1

名前と電話番号をフォームに入力し、入力値に基づいて mysql からデータを取得しようとしています。クリック機能でクエリを実行すると、ブラウザにphpとクエリが表示されますが、データベースからの値の代わりに「オブジェクトHTMLInputElement」が表示されます。

スクリプトに何かが欠けているに違いありませんが、それが何であるかわかりません。この ajax/mysql を送信したときに値が表示されない理由を教えてください。以下のコードを参照してください。ご協力をお願いします...

HTML とスクリプト

<script type="text/javascript" src="jquery-1.8.3.min.js"></script>
<script language="javascript" type="text/javascript">

function ajaxFunction(){
var ajaxRequest;  

try{

    ajaxRequest = new XMLHttpRequest();
} catch (e){

    try{
        ajaxRequest = new ActiveXObject("Msxml2.XMLHTTP");
    } catch (e) {
        try{
            ajaxRequest = new ActiveXObject("Microsoft.XMLHTTP");
        } catch (e){

            alert("Your browser broke!");
            return false;
        }
    }
}

ajaxRequest.onreadystatechange = function(){
    if(ajaxRequest.readyState == 4){
        var ajaxDisplay = document.getElementById('ajaxDiv');
        ajaxDisplay.innerHTML = ajaxRequest.responseText;
    }
}
var age = document.getElementById('lname').value;
var queryString = "?lname=" + lname + "&phone=" + phone ;
ajaxRequest.open("GET", "find.php" + queryString, true);
ajaxRequest.send(null); 
}

</script>
<form name='myForm'>
Last Name: <input type='text' id='lname' />
Phone: <input type='text' id='phone' />
<input type='button' onclick='ajaxFunction()' value='Query MySQL' />
</form>
<div id='ajaxDiv'>Your result will display here</div>
</body>
</html>

PHP

$inputedname = $_GET['lname'];
$inputedphone = $_GET['phone'];

$inputedname = mysql_real_escape_string($inputedname);
$inputedphone = mysql_real_escape_string($inputedphone);

$query = "SELECT FirstName, Phone FROM ClientInfo WHERE LastName = '$inputedname' AND Phone = '$inputedphone'";

$qry_result = mysql_query($query) or die(mysql_error());


$display_string = "<table>";
$display_string .= "<tr>";
$display_string .= "<th>Name</th>";
$display_string .= "<th>Phone</th>";
$display_string .= "</tr>";


while($row = mysql_fetch_array($qry_result)){
$display_string .= "<tr>";
$display_string .= "<td>$row[FirstName]</td>";
$display_string .= "<td>$row[Phone]</td>";
$display_string .= "</tr>";

}
echo "Query: " . $query . "<br />";
$display_string .= "</table>";
echo $display_string;

ブラウザで

ここに画像の説明を入力

4

1 に答える 1

1

これは、変数lnamephone自分のvar queryString = "?lname=" + lname + "&phone=" + phone ;行で定義したことがないためです。したがって、ブラウザは入力要素 ID から変数を生成します。文字列連結で DOM 要素を使用すると、それtoString()が呼び出されて出力されます[object HTMLInputElement]。これは、IE が初期の頃から提供してきた機能であり、他のブラウザーは IE と互換性を持つようにコピーされました。使ってはいけない機能です。

次のコードは問題を解決します。

var lname = document.getElementById('lname').value;
var phone = document.getElementById('phone').value;
var queryString = "?lname=" + lname + "&phone=" + phone ;
ajaxRequest.open("GET", "find.php" + queryString, true);

余談ですが、SQL インジェクションを防ぐために、非推奨のhttp://php.net/manual/en/function.mysql-real-escape-string.phpの代わりに準備済みステートメントを使用する必要があります。

于 2012-12-29T20:18:05.337 に答える