使用PHP将数据从HTML表单传递到MySQL数据库

时间:2014-09-14 22:54:30

标签: php mysql database insert html-form

我试图将一些数据插入到我在localhost上创建的mysql数据库中(使用wamp服务器)。但是它没有在表格中插入任何数据。它也没有显示任何错误按摩。另一方面,它显示了我制作的回声。 请帮帮我。我不能像this question那样在一个页面中键入所有代码,因为我从中间的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>";
?>

4 个答案:

答案 0 :(得分:3)

以下是处理此查询的方法:

首先我们创建一个数据库句柄。现在大多数人都使用面向对象的方式,所以我们将在这里使用它。

$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;

为了填写占位符,我们需要准备查询。这称为"prepared statement"(或&#34; stmt&#34;简称)。

将准备好的语句发送到数据库,数据库会检查错误并对其进行优化,以便更快地执行对execute()方法的连续调用。但是,在这种情况下,我们大多只是使用预准备语句,以避免恶意输入影响查询。

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

在我们使用准备好的声明之前,我们必须有一些方法将值放入占位符。我们通过binding向持有者提供一些变量。在这种情况下,我们将变量$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 documentationfilter extension

The full code can be found here

答案 1 :(得分:2)

你没有插入任何东西,$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 :(得分:0)

您忘记运行查询:

$result = mysqli_query($query);

答案 3 :(得分:-3)

你需要使用一些调试来获得一些错误你可以进一步调查这是我如何构建所述脚本

<?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