0

对于我的书店,我开始构建一个收银台脚本。这是一个非常简单的表单,带有 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);
}

谢谢你的帮助 !

4

1 回答 1

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 扩展。

于 2013-03-11T15:12:05.747 回答