2012-03-02 7 views
2

私は、PHP関数を呼び出してMySQLデータベースからいくつかの値を返すPHPファイルに値を渡すように、以下のコードを実行しようとしています。これは、私は非常に簡単だろうと思った課題の一部ですが、私は私の問題は、JavaScriptのイベントハンドラと思う - 入力された値を参照する方法?PHPとAJAXとMySQLの統合

HTML:

<form> 
    <input type="text" name="users" onkeydown="showUser(this)"/> 
</form> 

<div id="txtHint"> 
    <p id="responder"><b>Person info will be listed here.</b></p> 
</div> 

showUser()関数:

<script type="text/javascript"> 
     function showUser(str) 
     { 
     if (str=="") 
      { 
      document.getElementById("responder").innerHTML=""; 
      return; 
      } 
     if (window.XMLHttpRequest) 
      {// code for IE7+, Firefox, Chrome, Opera, Safari 
      xmlhttp=new XMLHttpRequest(); 
      } 
     else 
      {// code for IE6, IE5 
      xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
      } 
     xmlhttp.onreadystatechange=function() 
      { 
      if (xmlhttp.readyState==4 && xmlhttp.status==200) 
       { 
       document.getElementById("responder").innerHTML=xmlhttp.responseText; 
       } 
      } 
     xmlhttp.open("GET","php/student_query.php?q="+str,true); 
     xmlhttp.send(); 
     } 
    </script> 

PHP:私が言ったように

<?php 
$q=$_GET["q"]; 
// Step 1 
$conn = mysql_connect("localhost", "root"); 
// Step 2 
mysql_select_db("collegeData", $conn); 
//Step 3 

$sql="SELECT * FROM studenttable WHERE studentID = '".$q."'"; 
$result = mysql_query($sql); 

// Step 4 
while ($row = mysql_fetch_array($result)) 
{ 
// Step 5 
echo "Hello $row[firstName] $row[lastName]<br/>"; 
echo "Your two course modules are $row[moduleNo1] and $row[moduleNo2]<br/>"; 
echo "<tr><td> $row[firstName]</td><td> $row[lastName] </td> <td> $row[studentID] </td> </tr>"; 
echo "<br/>"; 
} 
// Step 6 
mysql_close($conn); 
?> 

が、私は私の問題は、イベントハンドラであると思います、私はJSと素晴らしいことではない。助けていただければ幸いです。

答えて

1

入力要素を関数に送信しているように見えますが、それは価値がありません。

<input type="text" name="users" onkeydown="showUser(this.value);" /> 

試してみてください。また、あなたは

$q = mysql_real_escape_string(trim($_GET["q"])); 
if($q == "") 
{ 
    echo ""; 
    exit; 
} 
+0

にあなたのPHPを変更することで、保護からデータベースクエリを保護する必要があり、私もそれがonKeyDownメソッドから来るかもしれないと思う - あなたはあなたのソリューションをテストしましたか? – Chan

+0

いいえ私はテストしませんでした。このケースでは 'onkeyup'を使う方が良いかもしれません。 –

+0

こんにちは、ありがとう。私は 'onchange'で 'this.value'を試みましたが、うまくいきませんでした。これは、 'onkeyup'と 'this.value'で動作するようになりました。 Enter/Returnキーを使用してイベントをトリガする方法を教えてください。私のためには、「変えよう」はうまくいかないでしょう。おかげで – garethdn