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