我的PHP搜索功能不输出数据

时间:2014-02-22 00:51:39

标签: php mysql

所以我试图创建一种搜索我的网站的方式。我在索引页面上创建了一个搜索栏。您可以在此处找到此页面: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文件没有出错,使得第一个计时器的故障排除有点困难。有什么建议?我确定这是一个非常简单的错误,可能只是拼错了一些东西,但我只是看不到它。

3 个答案:

答案 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而不是尝试自己动手。