PHP数据库搜索显示

时间:2016-10-19 08:32:02

标签: php database sqlite

让您了解我正在做的事情。我正在做一个项目,在我的学校校园里你可以四处走动。例如,房间可以被称为J2626或J2617等......当用户使用我的网站时,我只希望它输入房间的确切名称才能显示任何内容。现在它不像我想要的那样工作。 例如:如果您只在搜索字段中键入J,它将显示所有以J开头的房间。

这是我现在的代码:

<?php

$fileName = dirname(dirname(__FILE__)) . "../../db/bth_nav.sqlite";

if (isset($_GET['page'])) {
    $argument = $_GET['page'];
    $argument = "%" . $argument . "%";

    $db = new PDO("sqlite:$fileName");
    $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);

    $stmt = $db->prepare('SELECT * FROM bth_nav WHERE name LIKE (:nameOwner) OR owner LIKE (:nameOwner);');
    $stmt->execute(array($argument));
    $res = $stmt->fetchAll(PDO::FETCH_ASSOC);

    if (empty($res)) {
        header("Location: " . "http://" . $_SERVER['index.php']);
    }
?>

<div class = "formObjectSearch">

    <?php foreach ($res as $val) { ?>
            <div class = "infoTab">
                <h2><?= $val['name']; ?></h2>
                <p>Guidance: <?= $val['info']; ?></p>
                <p>Whos sitting here?: <?= $val['owner']; ?>
            </div>
            <img class = "buildingImage" src = "img/<?= $val['image']; ?>"
                <?php
      }
}
                ?>
    </div>

我尝试过不同的if语句,但没有成功。所以我需要帮助的是,我只希望用户能够搜索正确的房间名称,而不能只搜索J并显示所有内容。

更新

这是我的index.php:

我使用了这个链接,因为代码示例不想工作:index.php code

这是我的building.php:

Samer:building.php code

新的search.php和帮助:

同样在这里:search.php code

我现在收到这些错误:

注意:未定义的索引:第19行的/path/incl/files/search.php中的index.php

警告:无法修改标头信息 - 第19行的/path/incl/files/search.php中已经发送的标头(输出从/path/incl/header.php:7开始)

我的header.php代码:

同样在这里:header.php code

我的config.php代码:

同样在这里:config.php code

我的footer.php代码:

同样在这里:footer.php code

1 个答案:

答案 0 :(得分:1)

如果我正确地告诉你,如果你想用起始字母J搜索所有房间,你需要改变你的论点。

<强>解释

'%J%' - 搜索所选字段,其中J字母。

'%J' - 搜索所选字段,其中J是最后一个字母。

'J%' - 搜索所选字段,其中J是第一个字母。

尝试改变你的论点:

$argument = $argument . "%";

<强>更新

修正你的if语句:

if (empty($res) OR $res == null) {
   header('Location: http://'.$_SERVER['index.php']);
}
else {
   echo '<div class = "formObjectSearch">';
   foreach ($res as $val) {
        echo '<div class = "infoTab">';
        echo '<h2>'.$val["name"].'</h2>';
        echo '<p>Guidance:'.$val["info"].'</p>';
        echo '<p>Whos sitting here?:'.$val["owner"].'</p>';
        echo '</div>';
        echo '<img class="buildingImage" src="img/'.$val['image'].'" />';
   }
   echo '</div>';
}

您可以尝试使用以下内容替换空:

if ($res->rowCount() > 0) {
  // if founded
} else {
  // header('Location: http://'.$_SERVER['index.php']);
}