Мой PHP-код для поиска имени или фамилии из таблицы в базе данных ничего не печатает на моей веб-странице - PullRequest
0 голосов
/ 09 ноября 2018

Пользователь предполагает ввести имя или фамилию в строку поиска на веб-странице и предполагает перечисление атрибутов из таблицы на веб-страницу. Независимо от того, что я печатаю в строке поиска, ничего не выводится. Я следовал за этим видео о том, как искать в php. Я пытался смотреть на это более часа, но не могу найти ничего плохого. Я не получаю сообщений об ошибках на моей веб-странице.

<?php
$serverName = 'localhost';
$userName = 'root';
$password = '';
$databaseName = 'project3';

$connection = mysqli_connect($serverName, $userName, $password, 
$databaseName);
if (!$connection) {
  die("Connection Failed: " . mysqli_connect_error());
  }
echo "Connected Successfully!! <br>";
$output = '';
if (isset($_Post['search'])) {
  $searchq = $_Post['search'];
  $searchq = preg_replace("#[^0-9a-z]#i", "", $searchq);

  $query = mysqli_query("SELECT * from employee WHERE fname LIKE 
  '%$searchq%' OR"
        . "lname LIKE '%$searchq%") or die("failed");
$count = mysqli_num_rows($query);
if ($count == 0) {
    $output = 'No search results';
} else {
    while ($row = mysqli_fetch_array($query)) {
        $firstname = $row['fname'];
        $lastname = $row['lname'];
        $id = $row['id'];
        $output .= '<div>' . $firstname . '' . $lname . '</div>';
        echo "hi";
    }
 }
}

?>

<!DOCTYPE html>

 <html>
<head>
    <meta charset="UTF-8">
    <title>Database Webpage</title>
<font color ="white">
<h1 style="background-color:black; text-align: center">Datebase Website</h1>

 <font color ="black">
</head>
 <body>

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


     </form>

    <?php print("$output"); ?>
 </body>
 </html>

1 Ответ

0 голосов
/ 09 ноября 2018

Для mysqli_query нужны 2 параметра, как API PHP показывает с процедурной формой, которая у вас есть.

Итак, для этой части вызов должен выглядеть следующим образом:

$query = mysqli_query($connection, "SELECT * from employee WHERE fname LIKE 
           '%$searchq%' OR"
    . "lname LIKE '%$searchq%") or die("failed");

Однако с запросом возникнут проблемы. Обратите внимание на эту часть запроса:

           '%$searchq%' OR" <--- No space after the OR
    . "lname LIKE '%$searchq%")
       ^--- No space before lname

Любой из этих двух областей требуется пробел.

Эта последняя часть строки запроса в конечном итоге будет выглядеть так:

'% $ searchq%' ORlname LIKE '% $ searchq%
^ --- проблема (без пробела) ^ --- и проблема здесь (без закрывающей одинарной кавычки)

Иногда бывает полезно установить запрос отдельно, чтобы вы могли повторить его, чтобы убедиться, что он синтаксически корректен в отношении расстояния между ключевыми словами, столбцами, значениями, использованием запятой (при необходимости), правильного цитирования и т. Д.

Рассмотрим эту разницу:

$query = "SELECT * from employee WHERE fname LIKE '%$searchq%' OR "
       . "lname LIKE '%$searchq%'";
// query check (delete after validation, or comment-out)
echo $query;

$result = mysqli_query($connection, $query);
// I like to use $result, as the query call will return a result set with SELECT
// or false with failure. (though it can return true for other query types, see the api link)

Также может быть полезно вывести ошибку как часть сообщения die:

if (!$result) { // Doh! something wrong...
  die('failed: ' . mysqli_error($connection));
} else {
  $count = mysqli_num_rows($result); // check the result count
  if ($count == 0) {
    $output = 'No search results';
  } else {
    while ($row = mysqli_fetch_array($result)) { // fetch a row
        $firstname = $row['fname'];
        $lastname = $row['lname'];
        $id = $row['id'];
        $output .= '<div>' . $firstname . '' . $lname . '</div>';
        echo "hi";
    }
  }
}

НТН

...