dolfijn3000 Ответов: 3

Мой PHP scipt не будет выводить


Итак, у меня есть php-скрипт для поиска в базе данных того, что человек написал в поле поиска.
я получил этот код из учебника и немного отредактировал.
но проблема в том, что он ничего не выводит, почему?

<pre lang="PHP"><pre><?php
$connection = mysqli_connect('localhost','','',);
$output='';
if(isset($_POST['search'])){
    $searchkey= $_POST['search'];
    $searchkey=preg_replace("#[^0-9a-z]#i", "", $searchkey);

    $query = mysqli_query($connection,"SELECT * FROM books WHERE book LIKE '%$searchkey%'") or die("Could not search!");
    $count = mysqli_num_rows($query);

    if($count == 0){
        $output="There was no search result!";
    }
    else{
        while($row=mysqli_fetch_array($query)){
            $book=$row['books'];

            $output .='<div>'.$book.'</div>';

           // echo "$output";

        }
    }
}
?>




<!DOCTYPE html>
<html>
<head>
<title>library books</title>
</head>
<body>
<form action="index.php" methode="post">
		<input type="text" name="search" placeholder="search your book"/>
		<input type="submit"  value="search"/>
</form>
<?php print("$output");?>
</body>
</html>


Что я уже пробовал:

я внимательно посмотрел на учебник, чтобы увидеть, или я что-то пропустил

3 Ответов

Рейтинг:
1

Mohibur Rashid

Главная проблема заключается в том, что вы неправильно написали метод, поэтому значения $_POST нет. Следовательно, никогда не быть казненным.

Несколько других заметок:
1. Выбор С помощью * - это всегда плохая практика программирования
2. Вы делаете это сейчас, поэтому вы узнаете это сейчас, о SQL-инъекции.


Рейтинг:
1

Patrice T

Используйте отладчик, чтобы увидеть, что делает ваш код, а что нет.
Существует инструмент, который позволяет вам видеть, что делает ваш код, его имя отладчик Это также отличный инструмент обучения, потому что он показывает вам реальность, и вы можете увидеть, какие ожидания соответствуют реальности.
Когда вы не понимаете, что делает ваш код или почему он делает то, что делает, ответ таков: отладчик.
Используйте отладчик, чтобы увидеть, что делает ваш код. Просто установите точку останова и посмотрите, как работает ваш код, отладчик позволит вам выполнять строки 1 на 1 и проверять переменные по мере их выполнения.

Отладчик-Википедия, свободная энциклопедия[^]
phpdbg | php отладчик[^]
Методы отладки для PHP-программистов[^]
Отладчик здесь для того, чтобы показать вам, что делает ваш код, и ваша задача-сравнить его с тем, что он должен делать.
В отладчике нет никакой магии, он не находит ошибок, он просто помогает вам. Когда код не делает того, что ожидается, вы близки к ошибке.
-----

$query = mysqli_query($connection,"SELECT * FROM books WHERE book LIKE '%$searchkey%'") or die("Could not search!");

Не решение вашего вопроса, а еще одна проблема, которая у вас есть.
Никогда не создавайте SQL-запрос путем объединения строк. Рано или поздно вы сделаете это с помощью пользовательских вводов, и это откроет дверь уязвимости под названием "SQL injection", она опасна для вашей базы данных и подвержена ошибкам.
Одна кавычка в имени - и ваша программа рухнет. Если пользователь вводит имя типа "Брайан О'Коннер", это может привести к сбою вашего приложения, это уязвимость SQL-инъекции, и сбой-это наименьшая из проблем, вредоносный пользовательский ввод, и он продвигается к командам SQL со всеми учетными данными.
SQL-инъекция-Википедия[^]
SQL-инъекция[^]
Атаки SQL-инъекций на примере[^]
PHP: SQL Injection-руководство пользователя[^]
Шпаргалка по предотвращению инъекций SQL-OWASP[^]


Рейтинг:
1

Bryian Tan

Похоже, что в вашем примере есть незначительная проблема. Эта строка вызовет ошибку, я предполагаю, что в таблице книг нет поля/столбца с именем "книги".

$book=$row['books'];


Так и должно быть
$book=$row['book'];