对于我的书店,我开始构建一个cashdesk脚本。这是一个非常简单的表单,带有ajax动态搜索。这是本地PC的脚本,因此该脚本不会在网上发布。
当我扫描EAN代码时,我的表单填写了标题,作者,编辑和价格。这本书已准备好加入购物篮。
现在我正在尝试在这个脚本中引入Json:但我不明白如何在脚本中获取mysql查询的值,并将它们放在我的cashdesk表单的正确字段中。
我测试了Mysql查询和Json。
查询
<?php
header('Content-Type: text/html; charset=ISO-8859-1');
include('connexion.php');
$connect_db = connect();
$i = 0;
$tmp = array();
$fetch = mysql_query("SELECT jos_vm_product.product_id,product_name,product_author,product_editor,jos_vm_product_price.product_price FROM jos_vm_product INNER JOIN jos_vm_product_price ON (jos_vm_product.product_id = jos_vm_product_price.product_id) WHERE product_EAN = '$_POST[EAN]'");
while ($row = mysql_fetch_array($fetch, MYSQL_ASSOC)) {
$tmp[$i] = $row;
}
echo json_encode($tmp);
close();
?>
一个json例子:
[{"product_id":"7097","product_name":"Paix pour tous - Livre audio","product_author":"Wayne W. Dyer","product_editor":"Ada","product_price":"20.28"}]
ajax脚本
var xhr = null;
function getXhr()
{
if(window.XMLHttpRequest) xhr = new XMLHttpRequest();
else if(window.ActiveXObject)
{
try
{
xhr = new ActiveXObject("Msxml2.XMLHTTP");
}
catch (e)
{
xhr = new ActiveXObject("Microsoft.XMLHTTP");
}
}
else
{
alert("Not Working");
xhr = false;
}
}
function ajaxEAN()
{
getXhr();
xhr.onreadystatechange = function()
{
if(xhr.readyState == 4 && xhr.status == 200)
{
var data = '{"product_id": "product_id", "product_name":"product_name", "product_author":"product_author", "product_editor":"product_editor", "product_price":"product_price"}';
oData = JSON.parse( data);
for( var i in oData){
document.getElementById( i).value = oData[i];
}
}
}
xhr.open("POST",'ajaxrecupaddr.php',true);
xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
EAN = document.getElementById("EAN").value;
xhr.send("EAN="+EAN);
}
感谢您的帮助!
答案 0 :(得分:0)
据了解,您根本无法从响应中获取JSON。如果是这样,那么你应该这样做:
xhr.onreadystatechange = function()
{
if(xhr.readyState == 4 && xhr.status == 200) {
oData = JSON.parse(xhr.responseText);
for(var i = 0; i < oData.length; i++) {
for( var key in oData[i]){
document.getElementById(key).value = oData[i][key];
}
}
}
在那里,xhr.responseText
将返回一个字符串,其中包含从服务器收到的JSON。
另外,几点说明: 而不是
header('Content-Type: text/html; charset=ISO-8859-1');
你应该更好地使用:
header('Content-Type: application/json;');
另外,在下面的行中,您将打开SQL注入:
$fetch = mysql_query("SELECT jos_vm_product.product_id,product_name,product_author,product_editor,jos_vm_product_price.product_price FROM jos_vm_product INNER JOIN jos_vm_product_price ON (jos_vm_product.product_id = jos_vm_product_price.product_id) WHERE product_EAN = '$_POST[EAN]'");
而不是简单地执行WHERE product_EAN = '$_POST[EAN]'
,至少应该WHERE product_EAN = '".mysql_real_esape_string($_POST["EAN"]) . "'
:
$fetch = mysql_query("SELECT jos_vm_product.product_id,product_name,product_author,product_editor,jos_vm_product_price.product_price FROM jos_vm_product INNER JOIN jos_vm_product_price ON (jos_vm_product.product_id = jos_vm_product_price.product_id) WHERE product_EAN = '".mysql_real_esape_string($_POST["EAN"]) . "'");
详细了解mysql_real_escape_string
。它将正确地逃避所有潜在危险的符号,并在EAN中有'
符号时避免错误。此外,请阅读上面链接的页面上显示的警告。您应该更好地更改数据库扩展,因为不推荐使用MySQL扩展。