0

好吧,我很沮丧。我无法弄清楚我做错了什么。我是 PHP 和 MYSQL 的新手。好的,所以我已经建立了一个数据库。桌子也都摆好了。不过,我在使用 PHP 时遇到了困难。
我有 15 个要搜索的字段。但是在测试运行时,PHP 不断发布我放入框中的内容。如果我输入“Seth”,它只会发布“Seth”。这就是数据库中的任何内容。我只在 PHP 中放了一个字段来测试它。
我把我的代码放在这里。花括号在正确的位置。我在这个网站上缩进时遇到了麻烦。

第一个是我的 php.func.inc。

<?php
include 'db.inc.php';

function search_results($keywords)
{
    $returned_results = array();
    $where = "";

    $keywords = preg_split('/[\s]+/', $keywords);
    $total_keywords = count($keywords);

    foreach ($keywords as $key => $keyword) {
        $where .= " 'keywords' LIKE '%$keyword%' ";
        if ($key != ($total_keywords - 1)) {
            $where .= " AND";
        }
    }
    $results = "SELECT 'Investigator', 'ProjectTitle', 'Institution' FROM 'Studies' WHERE  
       WHERE";
    $results_num = $results = mysql_query($results) ? mysql_num_rows($results) : 0;
    if ($results_num === 0) {

        return false;
    } else {
        while ($results_row = mysql_fetch_assoc($results)) {
            echo $results_row['OtherNotes'];
        }
    }
}
?>

接下来是我的Index.php。我遗漏了连接到数据库的文件。

<?php include 'func.inc.php'; ?>

<!DOCTYPE HTML>
<html>
<head>
</head>
<body>
<h2> Search </h2>

<form action="" method="POST">
    <p>
        <input type="text" name="keywords"/> <input type="submit"
                                                    value="search"/>
    </p>
</form>
<?php
if (isset($_POST['keywords'])) {
    $keywords = mysql_real_escape_string(htmlentities(trim($_POST['keywords'])));
    echo $keywords;
    $errors = array();

    if (empty($keywords)) {
        $errors[] = "Please enter a search term";
    } else if (strlen($keywords) < 3) {
        $errors[] = "Your search term must be a 3 or more character";
    } else if (search_results($keywords === false)) {
        $errors[] = 'Your search for ' . $keywords . 'returned no results';
    }
    if (empty($errors)) {
        search_results($keywords);
    } else {
        foreach ($errors as $error) {
            echo $error;
        }
    }
}?>
</body>
<html>
4

2 回答 2

2

我注意到的一件事是您在表名和列名周围加上了单引号。

您还在查询中写了两次“where”一词。

我认为你想要做的是:

$results = "SELECT Investigator, ProjectTitle, Institution, FROM Studies WHERE " . $where;

您还应该更改检查匹配关键字的行:

$where .= " 'keywords' LIKE '%$keyword%' ";

至:

$where .= " keywords LIKE '%$keyword%' ";

因为您再次引用的是列名而不是字符串。

此外,当您尝试获取结果时,您要求的是“OtherNotes”列,但在您的查询中,您只查询“Investigator”、“ProjectTitle”和“Institution”列。

所以你的查询实际上变成了:

$results = "SELECT Investigator, ProjectTitle, Institution, OtherNotes FROM Studies WHERE " . $where

您还应该更改以下行:

foreach($keywords as $key=>$keyword)

只是:

foreach($keywords as $keyword)

然后就像你已经使用的一样使用 $keyword 变量。

您还可以更改检查表单是否已发布到的行:

if (!(is_null($_POST['keywords'])))

并确保研究表中确实有一个“关键字”列:)

于 2013-08-24T00:47:00.107 回答
0

看起来您将括号放在错误的位置:search_results($keywords === false)。应该是:search_results($keywords) === false

于 2013-08-24T00:49:52.503 回答