数据库搜索返回不一致的结果

时间:2015-12-06 21:16:45

标签: php mysqli

我正在对数据库中的一个表运行简单的数据库搜索。然后将结果显示在表格中。如果未找到任何结果,搜索会显示一条消息"0 results",但有时它会回显表格标题而不显示任何结果。此搜索是类项目的一部分,不会是活动数据库,因此我没有包含任何SQL注入保护。任何帮助将不胜感激。

<h2>Customer Search</h2>
<br>
<p class="first">Search the Customer Database</p>

<form action="searchcustomers.php" method="post">
  <input type="text" name="search" placeholder="Search...." />
  <input type="submit" value=">>" />
</form>

<?php

$servername = "localhost";
$username = "xxx";
$password = "xxx";
$dbname = "oldga740_SeniorProject";


// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
     die("Connection failed: " . $conn->connect_error);
}


// If there is a search variable try to search database
if(isset($_POST['search'])) {
    $searchq = $_POST['search'];
    $searchq = preg_replace("#[^0-9a-z]#i","",$searchq);
    $sql = "SELECT * FROM Customers WHERE Client LIKE '%$searchq%'";

if ($result = mysqli_query($conn, $sql)) {
    if (mysqli_num_rows($result) > 0) {

     echo '<table class="hoverTable"><tr><th>Client</th><th>Address</th><th>City</th><th>State</th><th>Zip Code<br></th><th>Phone</th></tr>';


       // We have results! Go fetch rows!
        while ($row = mysqli_fetch_row($result)) {
            // This loop runs until there are no more results left to echo
            while($row = $result->fetch_assoc()) {


         echo "<tr><td>" . $row["Client"]. "</td><td>" . $row["Address"]. "</td><td> " . $row["City"]. "</td><td> " . $row["State"]. "</td><td> " . $row["ZipCode"]. "</td><td> " . $row["Phone"]. "</td></tr>";

     }
     echo "</table>";

        }
    } else {
        // No results from query
        $message = "0 results";
    }

    /* free result set */
    mysqli_free_result($result);
}
}
?>

</div>
</div>

<div class="center">

<?php

        if(isset($message)){ echo $message; }

    ?>
</div>
  </body>
</html>

2 个答案:

答案 0 :(得分:1)

我发现,您可能不同意,但在填写内容之前打开和关闭标记可以正确缩进代码,从而减少问题的数量。说完了,现在它可能不起作用!

<html>
<head>
    <title>db search</title>
</head>
<body>
    <div>
        <div>
            <h2>Customer Search</h2>
            <p class="first">Search the Customer Database</p>

            <form action="searchcustomers.php" method="post">
              <input type="text" name="search" placeholder="Search...." />
              <input type="submit" value=">>" />
            </form>

            <?php
                $servername = "localhost";
                $username = "xxx";
                $password = "xxx";
                $dbname = "oldga740_SeniorProject";

                $conn = new mysqli( $servername, $username, $password, $dbname );
                if ( $conn->connect_error ) die("Connection failed: " . $conn->connect_error );

                if( isset( $_POST['search'] ) ) {

                    $searchq = $_POST['search'];
                    $searchq = preg_replace( "#[^0-9a-z]#i", "", $searchq );
                    $sql = "SELECT * FROM `Customers` WHERE `Client` LIKE '%$searchq%';";

                    if ( $result = mysqli_query( $conn, $sql ) ) {
                        if ( mysqli_num_rows( $result ) > 0 ) {

                             echo '
                             <table class="hoverTable">
                                <tr>
                                    <th>Client</th>
                                    <th>Address</th>
                                    <th>City</th>
                                    <th>State</th>
                                    <th>Zip Code</th>
                                    <th>Phone</th>
                                </tr>';

                                 while( $row = $result->fetch_assoc() ) {
                                     echo "
                                     <tr>
                                        <td>".$row["Client"]."</td>
                                        <td>".$row["Address"]."</td>
                                        <td>".$row["City"]."</td>
                                        <td>".$row["State"]."</td>
                                        <td>".$row["ZipCode"]."</td>
                                        <td>".$row["Phone"]."</td>
                                    </tr>";
                                 }

                             echo '
                             </table>';

                        } else {
                            $message = "0 results";
                        }
                    }
                    mysqli_free_result( $result );
                }
            ?>
        </div>
    </div>
    <div class="center">
        <?php if( isset( $message ) ){ echo $message; } ?>
    </div>
  </body>
</html>

答案 1 :(得分:0)

删除冗余的第一个while循环while ($row = mysqli_fetch_row($result)) {,如果查询只有1个结果,那么第一个循环只会获取它,而第二个while循环不会取任何东西只会产生一个标题而没有表格的主体

<h2>Customer Search</h2>
<br>
<p class="first">Search the Customer Database</p>

<form action="searchcustomers.php" method="post">
  <input type="text" name="search" placeholder="Search...." />
  <input type="submit" value=">>" />
</form>

<?php

$servername = "localhost";
$username = "xxx";
$password = "xxx";
$dbname = "oldga740_SeniorProject";


// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
     die("Connection failed: " . $conn->connect_error);
}


// If there is a search variable try to search database
if(isset($_POST['search'])) {
    $searchq = $_POST['search'];
    $searchq = preg_replace("#[^0-9a-z]#i","",$searchq);
    $sql = "SELECT * FROM Customers WHERE Client LIKE '%$searchq%'";

if ($result = mysqli_query($conn, $sql)) {
    if (mysqli_num_rows($result) > 0) {

     echo '<table class="hoverTable"><tr><th>Client</th><th>Address</th><th>City</th><th>State</th><th>Zip Code<br></th><th>Phone</th></tr>';


       // We have results! Go fetch rows!
            // This loop runs until there are no more results left to echo
            while($row = $result->fetch_assoc()) {


         echo "<tr><td>" . $row["Client"]. "</td><td>" . $row["Address"]. "</td><td> " . $row["City"]. "</td><td> " . $row["State"]. "</td><td> " . $row["ZipCode"]. "</td><td> " . $row["Phone"]. "</td></tr>";

     }
     echo "</table>";


    } else {
        // No results from query
        $message = "0 results";
    }

    /* free result set */
    mysqli_free_result($result);
}
}
?>

</div>
</div>

<div class="center">

<?php

        if(isset($message)){ echo $message; }

    ?>
</div>
  </body>
</html>