Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 从数据库中搜索时如何避免第一个结果为空_Php_Html_Mysql - Fatal编程技术网

Php 从数据库中搜索时如何避免第一个结果为空

Php 从数据库中搜索时如何避免第一个结果为空,php,html,mysql,Php,Html,Mysql,我有搜索网页,但当搜索运行时,第一个结果是空白的 <?php include "headnav.php"; $count = 0; $sql = "SELECT * FROM lost_property"; if (!empty($_POST)) { $name = mysqli_real_escape_string($dbconnect, htmlspecialchars($_POST['name'])); $item = mys

我有搜索网页,但当搜索运行时,第一个结果是空白的

<?php include "headnav.php";

$count = 0;
$sql = "SELECT * FROM lost_property";
if (!empty($_POST)) {
    $name = mysqli_real_escape_string($dbconnect, htmlspecialchars($_POST['name']));
    $item = mysqli_real_escape_string($dbconnect, htmlspecialchars($_POST['item']));
    $area = mysqli_real_escape_string($dbconnect, htmlspecialchars($_POST['area']));
    $sql = "
    SELECT * 
      FROM lost_property
      JOIN item 
        ON lost_property.itemID = item.itemID
      JOIN area 
        ON lost_property.areaID = area.areaID
     WHERE name LIKE '%$name%' 
       AND item LIKE '%$item%' 
       AND area LIKE '%$area%'
     ORDER 
        BY lost_property.name ASC
";
    $search_query = mysqli_query($dbconnect, $sql);
    $count = mysqli_num_rows($search_query);
}
$result = $dbconnect->query($sql);
?>

<body>
    <div class="form">
        <h1>Search for lost property here:</h1>
        <form action="" method="POST">
            Name:
            <input type="text" placeholder="Name" name="name">
            Item type:
            <select name="item" class="dropdown">
                <option value="" disabled selected>Item</option>
                <?php
                $item_sql = "SELECT DISTINCT item FROM `lost_property`
                JOIN item ON (lost_property.itemID = item.itemID)
                ORDER BY item ASC
                ";

                $item_query = mysqli_query($dbconnect, $item_sql);
                $item_rs = mysqli_fetch_assoc($item_query);
                do {
                ?>
                    <option value="<?php echo $item_rs['item']; ?>"><?php echo $item_rs['item']; ?></option>
                <?php
                } while ($item_rs = mysqli_fetch_assoc($item_query));
                ?>
            </select>
            Area (where it was found):
            <select name="area" class="dropdown">
                <option value="" disabled selected>Area</option>
                <?php
                $area_sql = "SELECT DISTINCT area FROM `lost_property`
                JOIN area ON (lost_property.areaID = area.areaID)
                ORDER BY area ASC
                ";

                $area_query = mysqli_query($dbconnect, $area_sql);
                $area_rs = mysqli_fetch_assoc($area_query);
                do {
                ?>
                    <option value="<?php echo $area_rs['area']; ?>"><?php echo $area_rs['area']; ?></option>
                <?php
                } while ($area_rs = mysqli_fetch_assoc($area_query));
                ?>
            </select>
            <input type="submit" value="Search" name="btn">
        </form>
    </div>
    <div class="gallery">
        <h2>Search results:</h2>
        <?php
        //check for results. If there are none display error
        if ($count < 1) {
        ?>
            <div class="error">
                <h1>No results were found.</h1>
            </div>
            <?php
        } //end if
        else {
            do {
            ?>
                <!-- display image and information from database and show in gallery  -->
                <div class="results">
                    <h3><?php echo $search_rs['name']; ?></h3>
                    <h3><?php echo $search_rs['item']; ?></h3>
                    <p><?php echo $search_rs['area']; ?></p>
                </div>
        <?php
            } // end of do
            while ($search_rs = mysqli_fetch_assoc($search_query));
        } //end else
        //if there are any display
        ?>
    </div>
    </table>
</body>

</html>

区域(发现地点):
地区
搜索结果:
未发现任何结果。

没有CSS很难看到,但是无论搜索什么,总是有一个结果,但是h3和p字段没有任何内容。如果没有“无结果”错误消息,它也会在那里弹出。是什么导致了第一个结果?

使用
while(){}
,如果使用do,它将首先运行一次(归功于Magnus Eriksson)

结果就像

else {
            while ($search_rs = mysqli_fetch_assoc($search_query)) {
            ?>
                <!-- display image and information from database and show in gallery  -->
                <div class="results">
                    <h3><?php echo $search_rs['name']; ?></h3>
                    <h3><?php echo $search_rs['item']; ?></h3>
                    <p><?php echo $search_rs['area']; ?></p>
                </div>
        <?php
            } // end of do
        } //end else
        //if there are any display
        ?>
else{
while($search\u rs=mysqli\u fetch\u assoc($search\u query)){
?>

而不是

else {
            do {
            ?>
                <!-- display image and information from database and show in gallery  -->
                <div class="results">
                    <h3><?php echo $search_rs['name']; ?></h3>
                    <h3><?php echo $search_rs['item']; ?></h3>
                    <p><?php echo $search_rs['area']; ?></p>
                </div>
        <?php
            } // end of do
            while ($search_rs = mysqli_fetch_assoc($search_query));
        } //end else
        //if there are any display
        ?>
else{
做{
?>


请参阅关于sql注入以及准备好的和绑定的查询的重要性。这不是我们清理数据的方式。看到迭代记录集的
do…while
循环而不是更常见的
while(){}
类型是很奇怪的,有什么理由这样选择吗?您应该使用
while(…){…
而不是
do{..}而(…)
。如果使用
do while
则循环将始终至少运行一次,因为在循环之后而不是之前检查条件。是否有
区域
为空的记录?这似乎是最符合逻辑的explanation@BenHillier-OP说总是有一个空行。那是因为在do-while循环中,它将是一个始终运行第一个循环,不管发生什么。它也会在条件之前运行(在$search\r被分配任何数据之前),这就是为什么它们总是得到一个空行的原因。实际上,
foreach
循环会简单得多