2

リスト(listDIV)から情報を取得してフォーム(formDIV)に表示しようとしていますが、JSONを使用してデータベースから情報を取得しています。「データベースエラー、他のものを選択してください」というエラーが表示されるだけです。私のtextareaフィールドで、PHPに何か問題があると信じさせてくれます。

HTMLとJS:

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.0/jquery.min.js" type="text/javascript"></script>
<script type="text/javascript">
$(document).ready(function() {
$("#productList").change(function() {

    var action = $("#productForm").attr('action');
    var form_data = {
        id: $('#productList').val(),
        name: $("#name").val(),
        price: $("#price").val(),
        img: $("#img").val(),
        description: $("#description").val()
    };

var id="something";
    $.getJSON("getProduct.php",form_data,function(data){
        switch(data.retval){
            case 0: $("#name").value(data.data.prodName);
            break;
            default: $("#description").html("Database error, please select something else.");
            break;
        }
        });
    });
});
</script>  
</head><body>

<div id="listDIV">
<select id="productList" name="productList" size="8">
    <option value="123" class="prodID">Terminator Series</option>
    <option value="124" class="prodID">2001 A Space Odyssey</option>
    <option value="125" class="prodID">Serenity</option>
    <option value="126" class="prodID">Alien Quadrilogy</option>
    <option value="127" class="prodID">12 Monkeys</option>
    <option value="128" class="prodID">Final Fantasy</option>
</select>
</div><div id="formDIV">
<form id="productForm" action="getProduct.php" method="post">
    <input type="text" id="name" placeholder="Name" /><br />
    <input type="text" id="price" placeholder="Price" /><br />
    <input type="text" id="img" placeholder="Image" /><br />
    <textarea id="description" placeholder="Description"></textarea><br />
<input type="submit" id="save" value="Save" />
</form>
</div>
</body></html>

PHP(getProduct.php):

<?php
ob_start();
session_start();
mysql_connect('localhost', 'root', 'root') or 
    die('Could not connect: ' . mysql_error());
mysql_select_db('productDB') or
    die ('Can\'t use database: ' . mysql_error());

// retval: 0 - login ok, 1 - login failed, 2 - internal error
$json = array("retval" => 2, "data" => NULL, "debug" => "");

 $id=json_decode($_REQUEST['id']);
 $prodID=$id->id;

$sql="SELECT * FROM productTB WHERE prodID=" . $prodID;


$json['debug'] .= "SQL query was: ".$sql."\n";
$result=mysql_query($sql);
if (!$result) {
    $json['debug'] .= "SQL query failed\n";
    $json['debug'] .= "Other output: ". ob_get_contents();
    ob_end_clean();
die(json_encode($json));
}
$count=mysql_num_rows($result);

if($count==1){
    $json['retval'] = 0;
    $json['data'] = mysql_fetch_assoc($result);
} else {
    $json['retval'] = 1;
}
$json['debug'] .= "Other output: ". ob_get_contents();
ob_end_clean();
echo json_encode($json);

DBのテーブル構造:

--
-- Table structure for table `productTB`
--

CREATE TABLE `productTB` (
`prodID` int(11) NOT NULL,
`prodName` varchar(30) COLLATE utf8_unicode_ci NOT NULL,
`prodPrice` decimal(10,2) NOT NULL,
`prodDesc` longtext COLLATE utf8_unicode_ci NOT NULL,
`prodImg` varchar(30) COLLATE utf8_unicode_ci NOT NULL,
PRIMARY KEY (`prodID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
4

1 に答える 1

3

文字列ではなく、変数を渡す必要があります

$sql="SELECT * FROM productTB WHERE prodID=" . $prodID;

準備されたステートメントを使用することをお勧めしますが

編集:

あなたはあなたのphpページに渡しIDていない..あなたがアクセスできるものはここにある-これらはあなたがあなたのPHPに渡しているものである-

変化する

var form_data = {
    name: $("#name").val(),
    price: $("#price").val(),
    img: $("#img").val(),
    description: $("#description").val()
};

var form_data = {
    id: $('#productList').val(), // <-- pass the id
    name: $("#name").val(),
    price: $("#price").val(),
    img: $("#img").val(),
    description: $("#description").val()
};

DBから最初のものを取得するには、ページに渡すIDかクエリを実行する必要があります。ID次に、クエリでIDを使用して結果を取得できます

于 2012-10-18T19:54:05.547 に答える