改进Ajax自动完成以返回更好的结果

时间:2016-03-17 08:18:33

标签: php mysql ajax

我正在使用ajax& php用于获取与用户输入的密钥(字母)匹配的元素,其中的元素类似于数据库。

例如,数据库包含制造商名称:

Hydfloo, Rexflex, Easton, Vickters, EVER GUSH, Thomas Hydraulics, AVT Pumps

并说例如用户已在输入框中输入字母“H”。然后我只接受Hydfloo作为回归,而不是Thomas Hydraulics。如果键入“p”,我希望看到“AVT Pumps”。我需要对我的php进行哪些更改才能使返回的所有值与制造商名称的第一个或第二个字匹配。

PHP代码

 <?php
    require('../config/connection.php');

    if(!$dbc) {

        echo 'Could not connect to the database.';
    } else {

if(isset($_POST['queryString'])) {
    $queryString = mysqli_real_escape_string($dbc, $_POST['queryString']);

    if(strlen($queryString) >0) {

  $query = mysqli_query($dbc, "SELECT distinct name FROM prdct_subcat WHERE name LIKE '$queryString%' LIMIT 10");
  echo '<ul>';

  while ($result = mysqli_fetch_assoc($query)) {

  echo '<li onClick="fill(\''.addslashes($result['name']).'\');">'.$result['name'].'</li>';
            }
        echo '</ul>';


            } 
        } 
    }
?>

1 个答案:

答案 0 :(得分:1)

使用正则表达式而不是LIKE,因此您可以在值的任何位置匹配单词边界。

更改

WHERE name LIKE '$queryString%'

为:

WHERE name REGEXP '[[:<:]]$queryString'
SQL中的