Форма поиска PHP / MYSQL с пустыми результатами - PullRequest
0 голосов
/ 25 февраля 2019

Пожалуйста, ребята, что должно быть не так с этим моим кодом, я попытался получить данные поиска из моей базы данных следующим образом

ДАННЫЕ для студентов Как следует

Рег. Номер: ФИО: Факультет: Программа: Уровень: Группа.

на странице поиска HTML

<html> 
<h2> Enter your matric number to connect to others studying your course </h2>
<form action="demo.php" method="post">
<b> ReG </b><input type="text" Name="find">
<input type="submit"  value="Submit" />

</form>
</html>

PHP SIDE

<table border="1">
<tr>
<th>Student Full Name</th>
<th> Faculty</th>
<th> Program</th>
<th> Entry Year</th>
<th> Study Group</th>
<th> Group Members Contact</th>
<th> Group Leader Contacts</th>
</tr>



<?php 

$conn=mysqli_connect("localhost", "root", "", "student");
// Check connection
if($conn=== false){
    die("ERROR: Could not connect. " . mysqli_connect_error());
}

 $q = $_POST['find'];


if ($q == "")
{
echo "<p>You forgot to enter a search term!!!";
exit;
}
$sql = "SELECT * FROM study_circle WHERE matric LIKE $q ";
$result = mysqli_query($conn, $sql);

if ($result)
 {
  while($row = mysql_fetch_array($result))
 {





        echo "<tr>";
        echo  "<td>";

    echo  $row['full_name'];
    echo  "</td>";
    echo  "<td>";
    echo  $row['faculty'];
    echo "</td>";
    echo  "<td>";
    echo  $row['program'];
    echo  "</td>";
    echo  "<td>";
    echo  $row['entry_year'];
    echo "</td>";
    echo  "<td>";
    echo  $row['study_group'];
    echo  "</td>";
    echo  "<td>";
    echo  $row['group_members'];
    echo  "</td>";
    echo "<td>";
    echo  $row['group_leader'];
    echo  "</td>";
    echo  "</tr>";
    echo  "<br/>";




    }
} else {
    echo "0 results";
}

mysqli_close($conn);
?>

Каждый раз, когда я пытаюсь это сделать, это приводит к пустым результатам, даже если язаполнил базу данных

Сейчас она в моей системе Localhost, пожалуйста, кто-нибудь хороший человек, чтобы помочь, я только новичок в программировании.Я буду рад исправить это

Ответы [ 3 ]

0 голосов
/ 25 февраля 2019

Ваш код неверно интерпретирует значение значения false:

if ($result)
{
    //...
} else {
    echo "0 results";
}

Значение false в $result не означает, что поиск ничего не нашел, это означает запрос не выполнен с ошибкой .Чтобы получить ошибку, используйте mysqli_error:

if ($result)
{
    //...
} else {
    echo "There was an error: " . mysqli_error($conn);
}

В этом случае ошибка вероятно синтаксическая ошибка в вашем коде SQL, потому что вы напрямую объединяете ввод пользователя в код SQL,Это также называется уязвимость SQL-инъекции .Есть некоторая полезная информация, с которой можно начать , исправляя ее здесь , в том числе, в частности, как использовать параметры запроса с оператором LIKE здесь .В самом простом случае вы захотите использовать подготовленный оператор с параметром запроса вместо использования интерполяции строк, как вы делаете сейчас.

0 голосов
/ 25 февраля 2019

Вам нужно получить количество строк в данных поиска.Это будет гарантией, если запись есть или нет, например.

$rowcount = mysqli_num_rows($result);

и затем выполните оператор if с ним.

см. Код ниже.

<?php 

$conn=mysqli_connect("localhost", "root", "", "student");
// Check connection
if($conn=== false){
    die("ERROR: Could not connect. " . mysqli_connect_error());
}

 $q = $_POST['find'];


if ($q == "")
{
echo "<p>You forgot to enter a search term!!!";
exit;
}
$sql = "SELECT * FROM study_circle WHERE matric LIKE $q ";
$result = mysqli_query($conn, $sql);
$rowcount = mysqli_num_rows($result);

if( $rowcount ){

$row = mysql_fetch_array($result);





        echo "<tr>";
        echo  "<td>";

    echo  $row['full_name'];
    echo  "</td>";
    echo  "<td>";
    echo  $row['faculty'];
    echo "</td>";
    echo  "<td>";
    echo  $row['program'];
    echo  "</td>";
    echo  "<td>";
    echo  $row['entry_year'];
    echo "</td>";
    echo  "<td>";
    echo  $row['study_group'];
    echo  "</td>";
    echo  "<td>";
    echo  $row['group_members'];
    echo  "</td>";
    echo "<td>";
    echo  $row['group_leader'];
    echo  "</td>";
    echo  "</tr>";
    echo  "<br/>";


    exit;
}else{
 echo "0 results";

}
}


mysqli_close($conn);
?>
0 голосов
/ 25 февраля 2019

Попробуйте добавить подстановочные знаки в начале и конце строки поиска:

$sql = "SELECT * FROM study_circle WHERE matric LIKE '%$q%'";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...