Php 如何将对象放入字符串并打印

Php 如何将对象放入字符串并打印,php,jquery,json,Php,Jquery,Json,我有一个脚本,它从html表单中获取变量并将它们发送到php脚本。我根据这些数字查询新数据,并将它们格式化为字符串,发送回脚本。问题是我的php变量没有打印,我认为这是因为它们是对象。这是我的密码: //GET VENDOR PO NUMBER AND APPEND ONCHANGE OF # OF EXISTING POS $('#numvendpo').mouseover(function(){ var countpre = $(this).v

我有一个脚本,它从html表单中获取变量并将它们发送到php脚本。我根据这些数字查询新数据,并将它们格式化为字符串,发送回脚本。问题是我的php变量没有打印,我认为这是因为它们是对象。这是我的密码:

//GET VENDOR PO NUMBER AND APPEND ONCHANGE OF # OF EXISTING POS
            $('#numvendpo').mouseover(function(){
            var countpre = $(this).val();
            var p = $('#pro').val();
            var c = $('#custponumhold').val();
            var v = $('#vendorid').val();
            var cp = (parseInt(countpre)+1);
            var data_String;
             data_String = 'p='+p+'&c='+c+'&v='+v+'&cp='+cp;
             $.post('ft-final-v-po-num.php',data_String,function(data){
                   var data = jQuery.parseJSON(data);
                   $('#vendponum').val(data);
                });
            });
然后,我将这些值发布到此php脚本:

<?php
require "../inc/dbinfo.inc";

$p = $_POST['p'];
$c =$_POST['c'];
$v = $_POST['v'];
$cp = $_POST['cp'];

if ($c == 'null') { //cant use (!$customerpo) because $customerpo is passing the string of 'null' instead of the actual null value              
$c = NULL;         //so we change that to the actual null value
}

$getprojectnum = "SELECT ProjectNumber FROM tblProjects WHERE PROJECTNOID = '$p'"; //check
$getcustomerpo = "SELECT SequentialPONum FROM tblCustomerPOs WHERE CustomerPOID = '$c'"; //check
$getvendornum = "SELECT VendorNumber FROM tblVendors WHERE VENDORID = '$v'"; //check

$acpnhold = $conn->query($getprojectnum);
$accphold = $conn->query($getcustomerpo);
$acvnhold = $conn->query($getvendornum);

$acpn = mysqli_fetch_object($acpn);
$accp = mysqli_fetch_object($accp);
$acvn = mysqli_fetch_object($acvn);

if($c){
  $string = $acpn.'-'.$accp.'-'.$acvn.'-'.$cp;
  echo json_encode($string);
  exit();
}elseif(!$c){
  $string = $acpn.'-'.$acvn.'-'.$cp;
  echo json_encode($string);
  exit();
}else{
  echo json_encode('Error');
  exit();
}
?>


我的网页上的响应是
--2
,而不是(例如:
18000-1-2-2
)。如前所述,我认为这是因为它们是对象,但我不太确定。任何建议都将不胜感激。

请尝试以下代码:

    $.ajax({
    type: 'POST',
    url: 'ft-final-v-po-num.php',
    data: { 
        'p': p, 
        'c': c, 
        'v': v, 
        'cp': cp
    },
    success: function(msg){
        var data = jQuery.parseJSON(data);
        $('#vendponum').val(data);
    }
});

请尝试以下代码:

    $.ajax({
    type: 'POST',
    url: 'ft-final-v-po-num.php',
    data: { 
        'p': p, 
        'c': c, 
        'v': v, 
        'cp': cp
    },
    success: function(msg){
        var data = jQuery.parseJSON(data);
        $('#vendponum').val(data);
    }
});

您的问题在于此位:

$acpn = mysqli_fetch_object($acpn);
$accp = mysqli_fetch_object($accp);
$acvn = mysqli_fetch_object($acvn);
从php文档:

对象mysqli_fetch_对象(mysqli_result$result[,string$class_name=“stdClass”[,数组$params]])

您的
$acpn
$accp
$acvn
不是结果对象。在这些调用中使用它们之前,它们甚至没有定义

这将从每个查询结果中获取单个列:

$acpn = $acpnhold->fetch_row()[0];
$accp = $accphold->fetch_row()[0];
$acvn = $acvnhold->fetch_row()[0];

请记住,原始查询调用仍然存在一个主要的SQL注入漏洞。

您的问题在于这一点:

$acpn = mysqli_fetch_object($acpn);
$accp = mysqli_fetch_object($accp);
$acvn = mysqli_fetch_object($acvn);
从php文档:

对象mysqli_fetch_对象(mysqli_result$result[,string$class_name=“stdClass”[,数组$params]])

您的
$acpn
$accp
$acvn
不是结果对象。在这些调用中使用它们之前,它们甚至没有定义

这将从每个查询结果中获取单个列:

$acpn = $acpnhold->fetch_row()[0];
$accp = $accphold->fetch_row()[0];
$acvn = $acvnhold->fetch_row()[0];

请记住,原始查询调用仍然存在一个主要的SQL注入漏洞。

您听说过SQL注入吗?使用准备好的语句进行查询!启用错误报告并修复所有未定义的变量错误。例如,
$acpn
到底是什么?转储变量或打印它们,这样您就可以看到它有什么可能是对象,您可以使用$acvn->VendorNumber来代替,其他人也会这样做。我注意到您的第一个if条件正在运行,但检查只保证变量引用,而不是它的内容。调试的一个想法是——将要传递的变量数组编码为JSON,并将该字符串打印为响应,看看得到了什么?这样--$arr=array($a,$b,$c)$json=json_encode($arr);你听说过sql注入吗?使用准备好的语句进行查询!启用错误报告并修复所有未定义的变量错误。例如,
$acpn
到底是什么?转储变量或打印它们,这样您就可以看到它有什么可能是对象,您可以使用$acvn->VendorNumber来代替,其他人也会这样做。我注意到您的第一个if条件正在运行,但检查只保证变量引用,而不是它的内容。调试的一个想法是——将要传递的变量数组编码为JSON,并将该字符串打印为响应,看看得到了什么?这样--$arr=array($a,$b,$c)$json=json_encode($arr);仍然以“--2”回应,仍然以“--2”回应,太棒了。这些输入仅通过下拉菜单选择。请原谅我的无知,但这不会阻止除给定选项之外的任何用户输入吗?@Jordan:数据可以以任何方式制作并发布到脚本中,而无需使用表单。正如Abra所述。GET和POST(以及请求)中出现的任何变量都是不可信的。始终清理它们,如果进入数据库查询,使用准备好的语句有助于保护坏数据可能破坏查询的所有隐蔽方式。真棒。这些输入仅通过下拉菜单选择。请原谅我的无知,但这不会阻止除给定选项之外的任何用户输入吗?@Jordan:数据可以以任何方式制作并发布到脚本中,而无需使用表单。正如Abra所述。GET和POST(以及请求)中出现的任何变量都是不可信的。始终对它们进行清理,如果要进入数据库查询,使用准备好的语句有助于保护坏数据可能破坏查询的所有隐蔽方式。