подскажите пожалуйста. стоит такая задача. Напишите форму, которая принимает от пользователя имя и возраст. По нажатию кнопки выводятся все пользователи из users которые совпадают по имени и возрасту. файл index.php Код (Text): echo '<form action="output.php" method="GET"> <p>Введите имя <input type="text" name="n1"></p> <p>Введите возраст <input type="text" name="n2"></p> <input type="submit" value="Вывести"> </form> '; файл output.php Код (Text): <?php require_once 'config.php'; $n1 = $_GET['n1']; $n2 = $_GET['n2']; $conn = mysqli_connect(SERVERNAME, USERNAME, PASSWORD, DBNAME); $sql = "SELECT name FROM users WHERE name=".$n1; $result = mysqli_query($conn, $sql); $b = array(); if(mysqli_num_rows($result) > 0) { while($row = mysqli_fetch_assoc($result)) { $b[] = $row; } } else { echo 'Нет таких данных'; } echo '<pre>'; print_r($b); echo '</pre>'; mysqli_close($conn); ?> НО выдает такую ошибку: Warning: mysqli_num_rows() expects parameter 1 to be mysqli_result, boolean given in /home/users/s/sharipov-r/domains/ostagroup.ru/kurs/unit_11/dz_unit_11/output.php on line 17 В чем дело, почему не получается работать с переменной? (база подключена нормально, проверено. если не через form, то все выводит).
1. это не ошибка - предупреждение 2. скорее всего результат запроса пустой 3. $sql = "SELECT name FROM users WHERE name='$n1'"; ведь это строка ну и конечно же SQL иньекция нарантирована
По сути ошибка. Даже если добавить кавычки, текст запроса может биться значением переменной. Даже если добавить фильтрацию или экранирование, все равно при выполнении запроса может возникать сбой.
@ADSoft работает спасибо! а я курс смотрел, там препод сделал по другому =".$n1; у него все работало.... может быть есть нюансы синтаксиса?
может все-таки есть какие-то нюансы, использования. я же повторял за ним это код, писал, все работало. правда там не было формы запроса. один файл, где показывал работу с бд
Нет, для $n1 без вариантов. Для $n2 еще возможно так сделать, если заранее проверить, что эта строка содержит число. Новое P.S. Если вы все повторяли за преподом, то пошлите его нафиг. В коде с самого начала идет полная хрень.
Webdev сразу предполагает контроль входных данных, обработку ошибок и т.п. Это в школе вы могли писать так: Код (Text): readln(a, b); r:= a + b; writeln(r); --- Добавлено --- Уже вот это хрень: PHP: $n1 = $_GET['n1']; $n2 = $_GET['n2']; $conn = mysqli_connect(SERVERNAME, USERNAME, PASSWORD, DBNAME); К первой команде (подключению конфига) тоже есть вопросы.