Проблема автозаполнения jQuery и php

#php #jquery

#php #jquery

Вопрос:

я пытаюсь получить список имен из таблицы MySQL, используя php и функцию автозаполнения jQuery, но я не получаю результата. не могли бы вы помочь, плз

вот jQuery

 <html>
<head>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.5.2/jquery.min.js" 
  type="text/javascript"></script> 

<script language="javascript" type="text/javascript">
  function findmatch(str){
    if (str.length>0){
      $('#found').load('SelectQury.php?n=' str);
    }
  }//fun
</script>
</head>

<body>
  <div id="container">
    <input type="text" name="text" id="textfield" autocomplete="off"    
     onkeyup="findmatch(this.value);"/>
    <div id="found" >non found</div>
  </div>

</body>
</html>
  

php-код

 if(isset($_POST['text'])){
    $s=$_POST['text'];

$query="SELECT FROM student WHERE name LIKE '$s%'";
$result=mysql_query($query) or die ('Wrong query : ' . mysql_error() );
$string='';
while($row = mysql_fetch_assoc($result)){
     $string.= $row['name'];
}
echo $string;
}else{
  echo 'wrong GET keywoord';

}//ifisset
  

Ответ №1:

Две проблемы:

 1. you are sending the value as "GET" method `?n=` and accessing in the PHP code as `$_POST`
2. the passed variable is `n` and not `text`
3. error in mysql query
  

Используйте следующий PHP-код:

 if(isset($_GETT['n'])){
   $s=$_GET['n'];

    $query="SELECT * FROM student WHERE name LIKE '$s%'";
    $result=mysql_query($query) or die ('Wrong query : ' . mysql_error() );
    $string='';
    while($row = mysql_fetch_assoc($result)){
         $string.= $row['name'];
    }
      echo $string;
  }else{
     echo 'wrong GET keywoord';

}
  

Комментарии:

1. спасибо, теперь я получаю сообщение об ошибке: неправильный запрос: у вас ошибка в вашем синтаксисе SQL; проверьте руководство, соответствующее вашей версии сервера MySQL, на предмет правильного синтаксиса для использования рядом с ‘FROM student WHERE name LIKE a%’ в строке 1

Ответ №2:

Я думаю, вы хотите, чтобы серверная функция возвращала HTML для списка, а не одну строку, представляющую собой объединение всех имен учащихся. Использовали ли вы такой инструмент, как fiddler, для проверки того, что отправляется и возвращается с сервера?

Ответ №3:

Было бы проще, если бы вы могли использовать $.getJSON для простоты то, что jQuery может быстро анализировать, чем использовать .load функцию.

Поскольку вы используете post , это можно сделать таким образом с помощью jQuery:

 var inputName = $('input[name=text]').val();

$.post('SelectQury.php', { text: inputName }, function(response)
{
    var nameBuild = '';
    for(i = 0; i < response.length; i  )
    {
        nameBuild  = '<div class="row">'   response[i].name   '</div>';
    }

    $(nameBuild).appendTo('#found');
}, 'JSON');
  

Если вы используете get , то используйте $.getJSON , выполнив это:

 var inputName = $('input[name=text]').val();

$.getJSON('SelectQury.php', { name: inputName }, function(response)
{
    var nameBuild = '';
    for(i = 0; i < response.length; i  )
    {
        nameBuild  = '<div class="row">'   response[i].name   '</div>';
    }

    $(nameBuild).appendTo('#found');
});
  

PHP:

Замените $ _POST на $_GET, если вы используете get, а не post

 if(isset($_POST['text']))
{
    $s = mysql_real_escape_string($_POST['text']);

    $query = "SELECT FROM student WHERE name LIKE '$s%'";
    $result = mysql_query($query) or die ('Wrong query : ' . mysql_error() );

    $string = array();
    while($row = mysql_fetch_assoc($result))
    {
         $string[] = array('name' => $row['name']);
    }

    echo json_encode($string);
}
else
{
    echo 'wrong GET keywoord';
}
  

Ответ №4:

На самом деле это довольно просто. jQuery выполняет большую часть тяжелой работы. Проблема заключается в получении данных из php в javascript. Затем, после этого, вы передаете данные в функцию автозаполнения jquery

пример:

 var data = "<?php echo implode(",",$customer_list) ?>".split(",");
    $("#CUSTOMER_NAME" ).autocomplete({source: data});
  

Вот массив customer_list, который помещается в массив данных javascript. Используйте селектор jquery в поле ввода, затем добавьте функцию автозаполнения.

Надеюсь, это поможет