В настоящее время я изучаю php и тестирую с помощью sqli-запросов. Я хочу иметь поле ввода, в которое можно ввести число. Этот номер используется в sql-запросе. К сожалению, это не работает так, как я хочу. Текстовое поле хранится в index.php следующим образом:
<form method="post" action="handler.php"> <input type="text" name="idEingabe"> <input type="submit" value="Abfrage für eingegebene ID starten"> </form>
В handler.php я использую
$stridEingabe = $_POST["idEingabe"];
И запрос содержит:
$query = 'SELECT name, beschreibung FROM uebersicht WHERE id = "$stridEingabe"'; $result = mysqli_query($con, $query); if ($result = mysqli_query($con, $query)) { /* Array ausgeben */ while ($row = mysqli_fetch_assoc($result)) { printf ("<b>%s</b> <br>%s<br> <br>", $row["name"], $row["beschreibung"]); } /* free result set */ mysqli_free_result($result); } mysqli_close($con); ?>
К сожалению, я не получаю никаких результатов, когда я ввожу номер в текстовое поле и нажимаю кнопку отправки. Но если я напишу номер в запросе без использования $ stridEingabe, я получаю результаты.
Где ошибка? большое спасибо
Увидев, что ответ был представлен до этого, подумал, что я тоже поместил бы его, и на основе комментария, который я оставил под вопросом.
Одна из проблем заключается в том, что вы дважды запрашиваете, что является серьезной проблемой, что приводит к синтаксической ошибке, которую MySQL бросает в фоновом режиме , но вы ее не слушаете. Кроме того, ваш метод цитирования, который я изменил ниже, на всякий случай, это строка; которые мы не знаем в настоящее время.
$query = 'SELECT name, beschreibung FROM uebersicht WHERE id = "$stridEingabe"'; $result = mysqli_query($con, $query); ^^^^^^^^^^^^ if ($result = mysqli_query($con, $query)) { ^^^^^^^^^^^^ /* Array ausgeben */ while ($row = mysqli_fetch_assoc($result)) { printf ("<b>%s</b> <br>%s<br> <br>", $row["name"], $row["beschreibung"]); }
вы хотите удалить = mysqli_query($con, $query)
и добавить проверку ошибок:
$query = "SELECT name, beschreibung FROM uebersicht WHERE id = '".$stridEingabe."'"; $result = mysqli_query($con, $query); if ($result) { /* Array ausgeben */ while ($row = mysqli_fetch_assoc($result)) { printf ("<b>%s</b> <br>%s<br> <br>", $row["name"], $row["beschreibung"]); } } // brace for if ($result) // else statement for if ($result) else{ echo "There was an error: " .mysqli_error($con); }
Или, еще лучше, используя mysqli_real_escape_string()
.
$stridEingabe = mysqli_real_escape_string($con,$_POST["idEingabe"]);
Кроме того, в отношении SQL-инъекции, к которой вы открыты, следует использовать mysqli
с подготовленными операторами или PDO с подготовленными операторами , они намного безопаснее .
Примечания:
Убедитесь, что вы действительно используете mysqli_
для подключения, а не к другому API MySQL, например mysql_
или PDO для подключения. Эти различные API не смешиваются друг с другом.
Я говорю это, потому что метод подключения неизвестен в вашем вопросе.
Кроме того, если вы используете весь свой код внутри одного и того же файла, вы должны использовать условный оператор для своего массива POST, иначе он сразу же отправит уведомление при загрузке страницы; предполагая, что отчет об ошибках включен в вашей системе.
То есть:
if(!empty($_POST['idEingabe'])){...}
Еще одна вещь; если введенное значение является целым числом, вы можете использовать следующие функции, чтобы убедиться, что они являются целыми числами, а не строкой, если такова конечная цель:
is_int()
is_numeric()
и используя условное утверждение в сочетании с ними.
Добавьте отчет об ошибках в начало файла (ов), который поможет найти ошибки.
<?php error_reporting(E_ALL); ini_set('display_errors', 1); // rest of your code
Sidenote: Сообщение об ошибках должно выполняться только в стадии постановки и никогда не выпускаться.
Две вещи: сначала ваши кавычки ошибочны, а во-вторых, с вашим кодом, который вы уязвимы для SQL-инъекций для инъекций кода, попробуйте это вместо этого:
$stridEingabe = mysql_real_escape_string($_POST["idEingabe"]); $query = "SELECT name, beschreibung FROM uebersicht WHERE id='$stridEingabe'";
Проблема в том, что вы не связываете строку $ с запросом
Используйте что-то вроде
$query = 'SELECT name, beschreibung FROM uebersicht WHERE id = ''.$stridEingabe.'';
Или используйте двойные кавычки, которые являются более приемлемыми
$query = "SELECT name, beschreibung FROM uebersicht WHERE id = '$stridEingabe'";
И попробуйте использовать только $ results, объявленные в инструкции if, чтобы избежать двойных запросов.
Вы используете неправильные кавычки. попробуй это:
$query = "SELECT name, beschreibung FROM uebersicht WHERE id = '$stridEingabe'";