我将数据从表单发送到php脚本,该脚本应该连接到数据库,然后更新表。它基本上是所有注册用户的数据库。由于某种原因,数据库表没有使用值进行更新。
表单代码为:
<body>
<div class="header">
Registration
</div>
<div class="content" style="text-align:center";>
<form name="input" action="success.php" method="post"><br>
First name: <input type="text" name="firstname"><br/>
Last name: <input type="text" name="lastname"><br/>
Age: <input type="text" name="age"><br/>
Date of Birth: <input type="text" name="dateofbirth"><br/>
Email: <input type="text" name="email"><br/>
<input type="submit" value="Submit"><br/><br>
</form>
</div>
<br><br><a href="index.html" style="font-size: 22px";>Back</a>
</body>
我的PHP代码是:
<?php
$con=mysqli_connect("example.com","myname","123","database1");
$sql="INSERT INTO user (fname, lname, age, dob, email) VALUES ('$_POST[firstname]','$_POST[lastname]','$_POST[age]','$_POST[dateofbirth]','$_POST[email]')";
mysqli_query($sql);
mysqli_close($con);
?>
有人可以告诉我哪里出错了?数据库没有得到更新。我的表格中没有输入任何值。
答案 0 :(得分:0)
首先,请使用像PDO或mySQLi准备好的语句。
其次,数据库没有得到更新,因为你需要连接(再次,不要这样做,请!)这些值,如下所示:
$sql="INSERT INTO user (...) VALUES (".$_POST['firstname'].",".$_POST[]."...)";
这是非常危险的,所以我非常强烈......强烈建议调查PDO。
同时强>
mysqli_query
的语法错误,如您帖子中的评论中所述。
答案 1 :(得分:0)
尝试在$ _POST [...]周围加上花括号
像
$sql="INSERT INTO user (fname, lname, age, dob, email) VALUES ('{$_POST[firstname]}','...
答案 2 :(得分:0)
变化
$sql="INSERT INTO user (fname, lname, age, dob, email) VALUES ('$_POST[firstname]','$_POST[lastname]','$_POST[age]','$_POST[dateofbirth]','$_POST[email]')";
到
$sql="INSERT INTO user
(fname, lname, age, dob, email) VALUES
('".$_POST['firstname']."','".$_POST['lastname']."','".$_POST['age']."','".$_POST['dateofbirth']."','".$_POST['email']."')";
答案 3 :(得分:0)
运行SQL语句时始终检查错误。除非您检查查询是否成功,否则永远不会知道出了什么问题,然后打印错误。
同样正如其他人所评论的那样,请不要在SQL中直接包含$ _GET或$ _POST变量。这会让你受到黑客攻击。
以下是对此进行编码的正确方法示例:
<?php
$con=mysqli_connect("example.com","myname","123","database1");
if ($con->connect_error) {
trigger_error($con->connect_error, E_USER_ERROR);
}
$sql="INSERT INTO user (fname, lname, age, dob, email) VALUES (?, ?, ?, ?, ?)";
if (($stmt = $con->prepare($sql)) === false) {
trigger_error($con->error, E_USER_ERROR);
}
$stmt->bind_param("sssss", $_POST["firstname"], $_POST["lastname"],
$_POST["age"], $_POST["dateofbirth"], $_POST["email"]);
if ($stmt->execute() === false) {
trigger_error($stmt->error, E_USER_ERROR);
}
$con->close();
?>
现在,如果准备或执行查询时出现问题,它会向您报告。
答案 4 :(得分:0)
创建预准备语句并不难。简单地复制粘贴,你很好。我使用escapeshellarg添加了一些额外的安全性,应该更多地使用它,因为它准备好的语句并不总是100%安全。
<?php
$firstname = escapeshellarg($_POST["firstname"]);
$lastname = escapeshellarg($_POST["lastname"]);
$age = escapeshellarg($_POST["age"]);
$dateofbirth = escapeshellarg($_POST["dateofbirth"]);
$email = escapeshellarg($_POST["email"]);
$con=mysqli_connect("example.com","myname","123","database1");
if (mysqli_connect_errno($con))
{
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
$stmt = mysqli_stmt_init($con);
$query = "INSERT INTO user (fname, lname, age, dob, email) VALUES (?, ?, ?, ?, ?)";
mysqli_stmt_prepare($stmt, $query);
mysqli_stmt_bind_param($stmt, "sssss", $firstname, $lastname, $age, $dateofbirth, $email);
if(mysqli_stmt_execute($stmt))
{
mysqli_close($con);
}
?>
请注意,“sssss”代表字符串。如果你的年龄是一个int变量,那么请改用“ssiss”。
PS。我曾经使用WAMP(Apache)的一个简单错误是用户没有正确的权限。我花了太多时间才发现,不要犯同样的错误;)
答案 5 :(得分:0)
我创建了一个表格,其中包含您发布的相同条目,并得出了这个结论。
但首先;正如其他人所指出的那样,一次又一次地说,MySQL_
的使用已被弃用,并将在不久的将来删除。因此强烈建议使用MySQLi_和/或PDO。
要快速解决问题,在传递查询时,您并没有告诉它连接到您的数据库。
变化:
mysqli_query($sql);
为:
mysqli_query($con, $sql);
它会起作用。它对我有用,因此从理论上讲它也适合你。