0

私の本屋のために、私はキャッシュデスクスクリプトを作り始めました。これは非常に単純な形式で、ajax動的検索を備えています。これはローカルPC用のスクリプトであるため、スクリプトはWeb上で公開されません。

EANコードをスキャンすると、フォームにタイトル、作成者、編集者、価格が入力されます。本はバスケットに追加する準備ができています。

今、私はこのスクリプトでJsonを紹介しようとしています:しかし、スクリプトでmysqlクエリの値を取得し、それらをキャッシュデスクフォームの正しいフィールドに配置する方法がわかりません。

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 に答える