gpt4 book ai didi

php - 为什么在使用 php 插入变量时在 mysql 表中生成额外的空行

转载 作者:太空宇宙 更新时间:2023-11-03 10:45:59 25 4
gpt4 key购买 nike

我试图从提交的 html 表单中将变量插入到 mysql 表中。但是,我观察到在我刚刚插入 1 行数据变量时生成了 3 行。当数据不可变时,问题就消失了。这个问题让我非常恼火。希望问题能够得到解决。非常感谢。

下面是创建表的代码:

<!DOCTYPE html>
<html>
<head>
<title>Server Database</title>
</head>
<body>
<span style='font-size:24;font-weight:bold;'>Server Database</span>
<br /><br />

<?php
$host="localhost";
$port=3306;
$socket="";
$user="root";
$password="";
$dbname="";

$conn = new mysqli($host, $user, $password, $dbname, $port, $socket)
or die ('Could not connect to the database server' . mysqli_connect_error());

echo "it work"."<br>";

$SCusName=$_POST['CusName'];
$SCusChiName=$_POST['CusChiName'];
$SDate=$_POST['Date'];

$sql = "CREATE DATABASE db";
if ($conn->query($sql) === TRUE) {
echo "Database created successfully"."<br>";
} else {
echo "Error creating database: " . $conn->error;
}

mysqli_select_db($conn,"db")
or die ('cannot select');

$sql = "CREATE TABLE Requests (
RequestNumber INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
CustomerName VARCHAR(50),
ChineseName VARCHAR(50),
DateOfRequest VARCHAR(30)
)";

if ($conn->query($sql) === TRUE) {
echo "Table Requests created successfully"."<br>";
} else {
echo "Error creating table: " . $conn->error;
}

$sql = "INSERT INTO Requests (CustomerName, ChineseName, DateOfRequest)
VALUES ('".$SCusName."', '".$SCusChiName."', '".$SDate."');";

if ($conn->query($sql) === TRUE) {
echo "New record created successfully"."<br>";
} else {
echo "Error: " . $sql . "<br>" . $conn->error;
}

$sql = "SELECT BbKeyID, CustomerName, ChineseName FROM Requests";
$result = $conn->query($sql);

if ($result->num_rows > 0) {
// output data of each row
while($row = $result->fetch_assoc()) {
echo "BbKeyID: " . $row["BbKeyID"]. " CustomerName: " . $row["CustomerName"]. " ChineseName: " . $row["ChineseName"]. "<br>";
}
} else {
echo "0 results";
}

$conn->close();
?>

</body>
</html>

mysql 表中的结果变为包含三行,如下所示,并返回一条消息 3 行:第一行包含正确的数据,而其他两行的值仅为空,只有自动递增的 RequestNumber。 RequestNumber 是否有问题?

1 结果 1 结果 2 结果 3

2

3

空值不为 NULL。

如果插入数据改为:

$sql = "INSERT INTO Requests (CustomerName, ChineseName, DateOfRequest)
VALUES ('AAA', 'BBB', 'CCC')";

结果正确,只给出一行如下。

1 结果 1 结果 2 结果 3

请帮我解决这个问题。非常感谢..

最佳答案

您每次加载页面时都运行INSERT 查询,即使没有提交表单也是如此。因此,如果通过 GET 获取页面,您将拥有未定义的 $_POST 数据,并插入空字符串。

你至少应该有

if ($_SERVER['REQUEST_METHOD'] == 'POST') {
... do db insert stuff here ...
}

从非发布请求中“隐藏”代码。

而且你很容易受到 sql injection attacks 的攻击.享受你的服务器 pwn3d。

关于php - 为什么在使用 php 插入变量时在 mysql 表中生成额外的空行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31753333/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com