Intereting Posts
Prestashop: добавьте индивидуальный продукт в корзину PDO: Недопустимый номер параметра: смешанные имена и позиционные параметры – знак вопроса в комментариях Как работать с длинными ссылками в HTML-письмах Могу ли я преобразовать функции mysql в PDO по одному за раз? Зачем использовать кодировку CJSON, когда у нас есть json_encode Подключение нескольких баз данных и объединение запросов по базе данных в php Не удается установить PHPUnit через PEAR, требуется PEAR Installer> = 1.9.2, не может обновить PEAR с 1.9.0 Как написать dustjs в php-коде без nodejs PHP PDO избегает вопросительного знака, поэтому он не считает, что это заполнитель регулярное выражение в соответствии с пустой (или все пробелы) строкой Symfony2 / Datatable Bundle – ошибка: установите идентификатор datatable в вашем действии с помощью «setDatatableId», используя идентификатор из вашего представления Как включить php-gmp в Mac OS X 10.6.6? (без macports) PHP, заголовок (перенаправление), не работающий на реальном сервере Единый вход (SSO) – рабочий процесс Разделить предложение на отдельные слова

Как использовать переменную $ _POST в mysqli-запросе? (РНР)

В настоящее время я изучаю 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, иначе он сразу же отправит уведомление при загрузке страницы; предполагая, что отчет об ошибках включен в вашей системе.

  • Уведомление будет «Undefined index idEingabe …»

То есть:

 if(!empty($_POST['idEingabe'])){...} 

Еще одна вещь; если введенное значение является целым числом, вы можете использовать следующие функции, чтобы убедиться, что они являются целыми числами, а не строкой, если такова конечная цель:

и используя условное утверждение в сочетании с ними.


Добавьте отчет об ошибках в начало файла (ов), который поможет найти ошибки.

 <?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'";