使用PHP/MySQL和Ajax的AutoSuggest

使用PHP/MySQL和Ajax的AutoSuggest,php,mysql,ajax,autosuggest,Php,Mysql,Ajax,Autosuggest,我已经使用PHP/MySQL和Ajax创建了一个自动建议,但是当我单击带有“on”的搜索建议时,它不会填充搜索框,其他所有内容都会填充。例如,我不能点击一个搜索结果,上面写着“无法获得足够的信息”。但我可以点击,只是不能得到足够的。你们能告诉我为什么吗? 谢谢 守则: <?php include('conn2.php'); $str = strtolower($_GET['content']); if(strlen($str)) {

我已经使用PHP/MySQL和Ajax创建了一个自动建议,但是当我单击带有“on”的搜索建议时,它不会填充搜索框,其他所有内容都会填充。例如,我不能点击一个搜索结果,上面写着“无法获得足够的信息”。但我可以点击,只是不能得到足够的。你们能告诉我为什么吗? 谢谢

守则:

<?php
    include('conn2.php');
    $str = strtolower($_GET['content']);         
    if(strlen($str))
    {
        $sel = mysql_query("SELECT DISTINCT title FROM Music WHERE title LIKE '".mysql_real_escape_string(trim($str))."%'");
        if(mysql_num_rows($sel))
        {
            echo "<table border =\"0\" width=\"100%\">\n";
            if(mysql_num_rows($sel))
            {
                echo "<script language=\"javascript\">box('1');</script>";
                while($row = mysql_fetch_array($sel))
                {
                    $country = str_ireplace($str,"<b>".$str."</b>",($row['title']));
                    echo "<tr id=\"word".$row['title']."\" onmouseover=\"highlight(1,'".$row['title']."');\" onmouseout=\"highlight(0,'".$row['title']."');\" onClick=\"display('".$row['title']."');\" >\n<td>".$country."</td>\n</tr>\n";
                }
            }
            echo "</table>";
        }
    }
    else
    {
        echo "<script language=\"javascript\">box('0');</script>";
    }
?>
此外,如果您使用的是新的PHP版本,则可以使用新的filter_输入函数来防止SQL注入

供参考:
我认为问题可能在于搜索结果中的单引号与下面HTML行中的单引号冲突,该行使用单引号将参数括在鼠标悬停/移出/单击时的函数调用中

echo "<tr 
id=\"word" . $row['title'] . "\" 
onmouseover=\"highlight(1,'" . $row['title'] . "');\" 
onmouseout=\"highlight(0,'" . $row['title'] . "');\" 
onClick=\"display('" . $row['title'] . "');\" >\n
    <td>" . $country . "</td>\n
</tr>\n";
正如您将看到的,highlight和display函数都将title参数封装在单引号中,标题中的单引号可能与它们冲突,从而破坏HTML。尝试转义$row['title']中的单引号,然后应该可以工作


希望这有帮助

将数据库中的所有内容转换为其实体,并在$\u GET['content']@Aftad上使用htmlentites:我想你可能不知道,但这是你的代码,我没有改变任何东西使其工作。我刚才在回复中提到了这一点,以向您指出正确的行,以及可能阻止搜索结果中的单引号的问题。那么您知道问题出在哪里吗?@Aftad:我想我在回复中提到了一个问题,即搜索结果中的单引号与HTML中的单引号冲突。请尝试使用addslashes或preg_replace转义$row['title']中的单引号。我不确定,但也许您需要删除JS函数突出显示中的斜杠
echo "<tr 
id=\"word" . $row['title'] . "\" 
onmouseover=\"highlight(1,'" . $row['title'] . "');\" 
onmouseout=\"highlight(0,'" . $row['title'] . "');\" 
onClick=\"display('" . $row['title'] . "');\" >\n
    <td>" . $country . "</td>\n
</tr>\n";