Я запускаю простой поиск базы данных по одной таблице в моей базе данных. Затем результаты отображаются в таблице. Если результаты не найдены, поиск показывает сообщение с сообщением "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>
ваш код выборки результирующих строк дважды, вы получите непоследовательной и не хватает результатов 'в то время как ($ строка = mysqli_fetch_row ($ результат)) {запускает // Этот цикл до тех пор, пока не больше результатов осталось не повторить while ($ row = $ result-> fetch_assoc()) {' – Shujaat
Два момента, не уверен, что это исправит проблему: сначала ваше закрытие' 'находится в первом операторе' while', а во-вторых, вы, похоже, используйте две функции, которые будут возвращать результаты из базы данных. – redreddington