2015-12-06 3 views
0

Я запускаю простой поиск базы данных по одной таблице в моей базе данных. Затем результаты отображаются в таблице. Если результаты не найдены, поиск показывает сообщение с сообщением "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> 
+0

ваш код выборки результирующих строк дважды, вы получите непоследовательной и не хватает результатов 'в то время как ($ строка = mysqli_fetch_row ($ результат)) {запускает // Этот цикл до тех пор, пока не больше результатов осталось не повторить while ($ row = $ result-> fetch_assoc()) {' – Shujaat

+0

Два момента, не уверен, что это исправит проблему: сначала ваше закрытие' 'находится в первом операторе' while', а во-вторых, вы, похоже, используйте две функции, которые будут возвращать результаты из базы данных. – redreddington

ответ

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> 
+0

На самом деле это работает отлично. Добавляем if (mysqli_num_rows ($ result)> 0) { , затем работает эхо таблицы. Спасибо за помощь. – Tony

+0

Рад, что это помогло - как я уже сказал, гораздо легче обнаружить ошибки, когда вы идете с правильным отступом, но потом, я дева, и мы склонны быть придирчивыми к подобным вещам ») – RamRaider

+0

Я не могу спорить с вы там. Ха-ха. Еще раз спасибо и отлично провести ночь. – Tony

0

удалить лишнюю первый во время цикла while ($row = mysqli_fetch_row($result)) {, если запрос был только 1 результата первого цикл будет иметь неправдоподобное это только тогда, когда второй, пока цикл не будет иметь сгружено ничего в результате только заголовок и не тела таблицы ,

<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> 
+0

Я удалил избыточный цикл while, но теперь он не возвращает «0 результатов», когда я ввожу то, что, как я знаю, не будет отображаться в поиске. – Tony

+0

вы можете опубликовать свой новый код (добавьте свой вопрос). – Shujaat

+0

Я только что опубликовал его для обзора – Tony

Смежные вопросы