所以我试图创建一种搜索我的网站的方式。我在索引页面上创建了一个搜索栏。您可以在此处找到此页面:http://seersvillage.com/v1.2/
我的搜索表单如下:
<form method="post" action="search.php">
<input type="text" name="search" class="search" value="Skeleton" onFocus="this.value=''">
</form>
我有一个attach.php文件,这个页面也连接到我的mysql数据库。我有内容可供阅读/搜索所有准备好。
这是我在functions.php上的搜索功能:
function doSearch() {
$output = '';
if(isset($_POST['search'])) {
$searchq = $_POST['search'];
$searchq = preg_replace ("#[^0-9a-z]#i","",$searchq);
$query = mysql_query("SELECT * FROM entries WHERE name LIKE '%$searchq%' or description LIKE '%$searchq%' or content LIKE '%$searchq%'") or die("Could not search");
$count = mysql_num_rows($query);
if($count == 0) {
$output = 'there was no search results!';
} else {
while($row = mysql_fetch_array($query)) {
$eName = $row['name'];
$eDesc = $row['description'];
$eCont = $row['content'];
$id = $row['id'];
$output .= '<div>'.$eName.' '.$eDesc.'</div>';
}
}
}
}
我的search.php上的唯一内容(不包括你通常的html布局)如下:
<?php
include('includes/functions.php');
if(!isset($_POST['search'])) {
header("Location:index.php");
}
?>
并在标签中进一步向下。
<?php print("$output");?>
现在我对PHP和MySQL都很陌生。但是我的error.log文件没有出错,使得第一个计时器的故障排除有点困难。有什么建议?我确定这是一个非常简单的错误,可能只是拼错了一些东西,但我只是看不到它。
答案 0 :(得分:1)
似乎您的php.ini文件设置为不显示错误。在代码的开头添加这些代码行并重试:
<?php
error_reporting(E_ALL);
ini_set("display_errors", 1);
?>
答案 1 :(得分:0)
您的doSearch
函数不会返回任何内容。
return $output;
但$ output仅在函数内声明。所以你需要使用
print(doSearch());
或者将$ output声明为全局变量,但我们不想这样做:)
答案 2 :(得分:0)
function doSearch() {
$output = '';
if(isset($_POST['search'])) {
$searchq = $_POST['search'];
$searchq = preg_replace ("#[^0-9a-z]#i","",$searchq);
$query = mysql_query("SELECT * FROM entries WHERE name LIKE '%$searchq%' or description LIKE '%$searchq%' or content LIKE '%$searchq%'") or die("Could not search");
$count = mysql_num_rows($query);
if($count == 0) {
$output = 'there was no search results!';
} else {
while($row = mysql_fetch_array($query)) {
$eName = $row['name'];
$eDesc = $row['description'];
$eCont = $row['content'];
$id = $row['id'];
$output .= '<div>'.$eName.' '.$eDesc.'</div>';
}
}
//make sure your function returns $output
return $output;
}
确保您的函数返回输出,然后回显函数:
<?php echo doSearch(); ?>
这是因为PHP变量是scoped。
...当然,我们需要添加所有标准附加条件...... 不要使用mysql_
库,它几乎像挪威蓝一样死了。如果您使用mysqli或PDO,您可以将参数/值绑定到预准备语句,这不仅可以提高效率,还可以确保您的输入得到正确的清理(远远优于奇怪的ad-hoc preg_replace
你'重新使用)。
当查询失败时,你不想杀死你的脚本(die
) - 这有点奇怪,正确处理错误。
有更好的方法可以在SQL中进行搜索,例如FULLTEXT搜索..或者如果可以的话,也许可以实现Apache Solr而不是尝试自己动手。