2012-03-02 4 views
2

Я пытаюсь заставить код ниже работать, чтобы он вызывал функцию JS для передачи значения в мой PHP-файл, который вернет несколько значений из базы данных MySQL. Это часть задания, которое, как я думал, будет довольно простым, но я думаю, что моя проблема связана с обработчиком событий 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 
$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);" /> 

Кроме того, вы должны защитить свой запрос к базе данных от защиты, изменив PHP на

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

Я также думаю, что это может приходить от OnKeyDown - ли вы проверить ваше решение? – Chan

+0

Нет, я не тестировал. Может быть, лучше использовать 'onkeyup' для этого случая –

+0

Привет, спасибо. Я попробовал «this.value» с «onchange», но это не сработало. Теперь это работает с 'onkeyup' и 'this.value'. Можете ли вы сказать мне, как я буду запускать событие, используя клавишу Enter/Return? «on change» не будет работать для меня. Спасибо – garethdn