Передача данных из HTML-формы в базу данных MySQL с использованием переполнения стека

Я пытаюсь вставить некоторые данные в базу данных mysql, созданную на моем локальном хосте (используя сервер wamp). Но это не вставка каких-либо данных в таблицу. Также не отображаются сообщения об ошибках. С другой стороны, это показывает эхо, которое я сделал.
Пожалуйста, помогите мне. Я не могу набрать весь код на одной странице, как этот вопрос как я перенаправляю на эту страницу из промежуточного файла php.
Вот код, который я написал.

<?php
$con = mysqli_connect("localhost", "root", "11111", "CAR_PARKING_SYSTEM");

$D_License_No = $_POST['D_License_No'];
$V_License_No = $_POST['V_License_No'];
$V_Type = $_POST['vehicle_type'];

if(!strcmp($V_Type, "four_wheel"))
{
$charge = 400;
}
else
{
$charge = 50;
}
$query = "INSERT INTO CUSTOMER_VEHICLE (V_License_No, D_License_No, Arrived_Time, Charge)
VALUES ('$V_License_No', '$D_License_No', 'date('H:i')', '$charge')";

echo "<p>Driver License Number " .$D_License_No. "</p>";
echo "<p>Vehicle License Plate Number " .$V_License_No. "</p>";
?>

1

Решение

Вот способ обработки этого запроса:

Сначала мы создаем дескриптор базы данных. Большинство людей в наши дни используют объектно-ориентированный способ сделать это, поэтому мы будем использовать его здесь.

$mysqli = new MySQLi('localhost', 'root', '11111', 'CAR_PARKING_SYSTEM');

Затем мы определяем запрос SQL. Вопросительные знаки (?) являются заполнителями для того, где будут размещены значения.

$sql = <<< SQL
INSERT INTO `CUSTOMER_VEHICLE` (
`V_License_No`,
`D_License_No`,
`Arrived_Time`,
`Charge`
) VALUES (
?, ?, ?, ?
);
SQL;

Для заполнения заполнителей нам нужно подготовить запрос. Это называется «подготовленное заявление» (или «stmt» для краткости).

Подготовленные операторы отправляются в базу данных, которая проверяет их на наличие ошибок, а также оптимизирует их так, чтобы последовательные вызовы execute() метод выполняется быстрее. В этом случае, однако, мы в основном просто используем подготовленный оператор, чтобы избежать влияния злонамеренного ввода на запрос.

$stmt = $mysqli->prepare($sql);
if ($stmt === false) {
die('Could not prepare SQL: '.$mysqli->error);
}

Прежде чем мы сможем использовать подготовленное утверждение, у нас должен быть какой-то способ поместить ценности в заполнители. Мы делаем это путем переплет некоторые переменные для заполнителей. В этом случае мы связываем переменные $vLicense, $dLicense, $arrived а также $charge для держателей мест. Имена переменных могут быть любыми.

$ok = $stmt->bind_param('sssi', $vLicense, $dLicense, $arrived, $charge);
if ($ok === false) {
die('Could not bind params: '.$stmt->error);
}

Теперь, когда мы связали некоторые переменные с заполнителями, мы можем начать устанавливать их значения. В этом случае мы используем filter_input() функция для очистки ввода некоторых переменных. $charge переменная имеет одно из двух значений в зависимости от того, с каким типом транспортного средства мы имеем дело.

$vLicense = filter_input(INPUT_POST, 'V_License_No', FILTER_SANITIZE_STRING);
$dLicense = filter_input(INPUT_POST, 'D_License_No', FILTER_SANITIZE_STRING);
$arrived  = date('H:i');
if (isset($_POST['vehicle_type']) && $_POST['vehicle_type'] === 'four_wheel') {
$charge = 50;
} else {
$charge = 400;
}

Значения установлены, и теперь мы можем выполнить инструкцию. Это делается просто путем вызова заявления execute() метод:

if ($stmt->execute() === false) {
die('Could not execute query: '.$stmt->error);
} else {
echo '<p>Query executed successfully!</p>';
}
$stmt->close();

Я призываю вас прочитать о MySQLi документация и расширение фильтра.

Полный код можно найти здесь.

3

Другие решения

Вы ничего не вставляете, $query это просто строка, вам нужно передать запрос в функцию mysqli, также лучше, если вы проверяете и избегаете SQL-инъекций. Ваш код должен быть примерно таким:

$mysqli = new mysqli("localhost", "root", "11111", "CAR_PARKING_SYSTEM");

$D_License_No = $_POST['D_License_No'];
$V_License_No = $_POST['V_License_No'];
$V_Type = $_POST['vehicle_type'];
$charge = !strcmp($V_Type, "four_wheel")?400:50;

$query = "insert into CUSTOMER_VEHICLE
(`V_License_No`, `D_License_No`, `Arrived_Time`, `Charge`)
values(? , ?, ?, ?)"$stmt = $mysqli->prepare($query);
$stmt->bind_param("ssss",$V_License_No, $D_License_No, date('H:i'), $charge);
if($stmt->execute()){
//success inserted
$stmt->close();
echo "<p>Driver License Number " .$D_License_No. "</p>";
echo "<p>Vehicle License Plate Number " .$V_License_No. "</p>";
}
else{
$error = $mysqli->error;
}
2

Вы забыли выполнить запрос:

$result = mysqli_query($query);
0

вам нужно использовать некоторую отладку, чтобы получить некоторые ошибки, о которых вы можете узнать дальше, как я это сделал из написанного скрипта

<?php
try
{
$con = mysqli_connect("localhost", "root", "11111", "CAR_PARKING_SYSTEM");

if (empty($con))
{
echo "Mysql failed".mysqli_error();
die; // should always kill script if you dont need it to continue
}

$D_License_No = $_POST['D_License_No'];
$V_License_No = $_POST['V_License_No'];
$V_Type = $_POST['vehicle_type'];

if(!strcmp($V_Type, "four_wheel"))
{
$charge = 400;
}
else
{
$charge = 50;
}
$query = "INSERT INTO CUSTOMER_VEHICLE (V_License_No, D_License_No, Arrived_Time, Charge)
VALUES ('$V_License_No', '$D_License_No', 'date('H:i')', '$charge')";

echo "<p>Driver License Number " .$D_License_No. "</p>";
echo "<p>Vehicle License Plate Number " .$V_License_No. "</p>";
}
catch (Exception $e)
{
echo $e;
}
?>

извините, если у меня отключен синтаксис, я в поезде и не лучшее место для кодирования: P

-3