Как мне вставить данные в MYSQL через ФОРМУ

#php #mysql #mysqli

#php #mysql #mysqli

Вопрос:

Я провел последние 2 дня, пытаясь создать форму для ввода данных в базу данных SQL. База данных функциональна, таблицы созданы, и я могу вводить данные через MYSQL. Я использую 2 файла bidinput.html и bidentry.php

Bidinput.HTML:

     <html>
    <body>
    <form action="bidentry.php" method="post">
    Bidder: <input type="text" name="BidderNumber"><br>
    Description: <input type="text" name="Description"><br>
    Price: <input type="decimal" name="Price"><br>
    Quantity: <input type="integer" name="Quantity"><br>
    Lot: <input type="text" name="Lot"><br>
    <input type ="submit">
    </form>

    </body>
    </html>
 

bidentry.php:

  <?php
    ######### From bidinput.html

    $BidderNumber = $_POST['BidderNumber'];
    $Description = $_POST['Description'];
    $Price = $_POST['Price'];
    $Quantity = $_POST['Quantity'];
    $Lot = $_POST['Lot'];
    ########

    $dbhost = "localhost";
    $dbuser = "root";
    $dbpass = "abcd1234";
    $dbname = "auction";
    // Create connection

    $mysqli = new mysqli($dbhost,$dbuser,$dbpass,$dbname);

    // Check connection
    if ($mysqli->connect_errno){
        echo "Failed to connect to MySQL: " . $mysqli->connect_error;
    }
    else{
        echo "Connected successfully";

    $sql = "INSERT INTO Bids (BidderNumber,Description,Price,Quantity,Lot) VALUES         ('$BidderNumber','$Description','$Price','$Quantity','$Lot')";

    echo "Error: " . $sql . "<br>" . $mysqli->error;

    }$mysqli->close();

    ?>
 

Когда я запускаю, нажимаю кнопку отправки, я получаю следующую ошибку:

Подключено успешно Ошибка: ВСТАВКА В ЗНАЧЕНИЯ Bids (BidderNumber, Description, Price,Quantity, Lot) (‘202′,’candy’,’3′,’1′,»)

Комментарии:

1. Вы не получаете сообщение об ошибке. Вы выводите запрос, даже не выполняя его. Вы должны использовать подготовленный оператор.

Ответ №1:

ПРЕДУПРЕЖДЕНИЕ Вам необходимо защитить себя от SQL-инъекций. Вы должны использовать подготовленные инструкции, чтобы защитить себя от SQL-инъекций.

На самом деле вы не выполняете никаких запросов с вашим текущим кодом.

Вам нужно использовать запрос mysqli:

 $mysqli->query($sql);
 

Подготовленный пример инструкции

Вот пример ВСТАВКИ с подготовленными операторами на основе вашего кода:

 mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$mysqli = new mysqli($dbhost,$dbuser,$dbpass,$dbname);

$stmt = $mysqli->prepare("INSERT INTO Bids (BidderNumber, Description, Price, Quantity, Lot) VALUES (?,?,?,?,?)");
$stmt->bind_param("sssss", $_POST['BidderNumber'], $_POST['Description'], $_POST['Price'], $_POST['Quantity'], $_POST['Lot']);
$stmt->execute();
$stmt->close();
 

Редактировать: поместите это в начало вашего PHP-файла:

 ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
 

Вы не хотите отображать ошибки в рабочей среде, но в среде разработки это нормально.
Возможно, вы захотите проверить свой PHP.INI-файл. По крайней мере log_errors , должно быть включено по умолчанию, и ошибки будут регистрироваться в вашем журнале ошибок apache.

Комментарии:

1. Я все еще получаю белый экран, журнал apache2 не показывает ошибок. есть ли какой-то отладочный скрипт, который я могу запустить?

2. Попадают ли данные в таблицу?

3. Сейчас это работает. Я перезагрузил SQL-сервер, и внезапно он заработал. Большое вам спасибо за вашу помощь.

4. Итак, давайте посмотрим, правильно ли я это понимаю. Подготовленный оператор в основном состоит из 4 частей …. 1. Подготовить. здесь я определяю столбцы, в которые я хочу вставить данные. 2. Привязка с помощью $POST[ ] это идентифицирует данные, которые должны быть введены в столбцы, определенные в строке подготовки. 3. Выполнить и 4. Закрыть. Без закрытой строки я все еще был бы подвержен sql-инъекции?

5. Очевидно, я использую старую справочную версию PHP amp; MYSQL для чайников 3rd edition. Он не ссылается на подготовленные операторы. Есть ли ссылка, которую вы бы порекомендовали?