Php 如何将对象放入字符串并打印
我有一个脚本,它从html表单中获取变量并将它们发送到php脚本。我根据这些数字查询新数据,并将它们格式化为字符串,发送回脚本。问题是我的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
//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(以及请求)中出现的任何变量都是不可信的。始终对它们进行清理,如果要进入数据库查询,使用准备好的语句有助于保护坏数据可能破坏查询的所有隐蔽方式。