我们有一个学校的作业,我已经尝试构建该应用程序,但是我想要插入数据库中的某些文本没有提交。
我尝试了不同的操作,但是该页面也未显示错误。
这是我的插入页面的代码
<head>
</head>
<body>
<form action="index.php" method="post">
ID: <input type="text" name="id"><br/>
Server: <input type="text" name="Server"><br/>
Student: <input type="text" name="Student"><br/>
Docent: <input type="text" name="Docent"><br/>
Project: <input type="text" name="Project"><br/>
Startdatum: <input type="text" name="Startdatum"><br/>
Einddatum: <input type="text" name="Einddatum"><br/>
<input type="submit" name="submit">
</form>
<?php
if(isset($_POST['submit'])) {
$con = mysqli_connect("localhost", "root", "usbw", "serverruimte");
if(!$con) {
die(mysqli_connect_error());
}
$sql = "INSERT INTO serverruimte (id,Server,Student,Docent,Project,startdatum,einddatum) VALUES ('$_POST[id]','$_POST[Server]','$_POST[Student]','$_POST[Docent]','$_POST[Project]','$_POST[startdatum]','$_POST[einddatum]')";
$result = mysqli_query($con, $sql);
if($result) {
echo "Opslaan voltooid!";
} else {
echo mysqli_error($con);
}
mysqli_close($con);
}
?>
</body>
</html>
基本上,发生的是:https://i.imgur.com/aUOx5yj.mp4
有人知道问题出在哪里吗,为什么插入的数据没有显示在索引页上?当我直接将数据提交到MYSQL数据库时,数据确实显示在页面上。
答案 0 :(得分:1)
警告::您对SQL Injections持开放态度,应使用参数化的准备好的语句,而不是手动构建查询。它们由PDO或MySQLi提供。永远不要相信任何输入!即使您的查询仅由受信任的用户执行,you are still in risk of corrupting your data。 Escaping is not enough!
使用MySQLi时,您应该启用自动错误报告,而不是手动检查错误。手动检查错误是一种可怕的做法,非常容易出错,应不惜一切代价避免。让MySQLi抛出异常,不要捕获它们。参见How to get the error message in MySQLi?
打开MySQLi连接时,必须指定正确的字符集。推荐的是utf8mb4
。
if (isset($_POST['submit'])) {
// Enable automatic error reporting
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
// Create new instance of MySQLi class
$con = new mysqli("localhost", "root", "usbw", "serverruimte");
// Set correct charset. Important!
$con->set_charset('utf8mb4');
$stmt = $con->prepare('INSERT INTO serverruimte (id,Server,Student,Docent,Project,startdatum,einddatum) VALUES (?,?,?,?,?,?,?)');
$stmt->bind_param('sssssss', $_POST['id'], $_POST['Server'], $_POST['Student'], $_POST['Docent'], $_POST['Project'], $_POST['startdatum'], $_POST['einddatum']);
$stmt->execute();
echo "Opslaan voltooid!";
mysqli_close($con);
}
答案 1 :(得分:0)
更改此行:
$sql = "INSERT INTO serverruimte (id,Server,Student,Docent,Project,startdatum,einddatum) VALUES ('$_POST[id]','$_POST[Server]','$_POST[Student]','$_POST[Docent]','$_POST[Project]','$_POST[startdatum]','$_POST[einddatum]')";
收件人:
$sql = "INSERT INTO serverruimte (id,Server,Student,Docent,Project,startdatum,einddatum) VALUES ('".$_POST['id']."','".$_POST['Server']."','".$_POST[Student]."','".$_POST['Docent']."','".$_POST['Project']."','".$_POST['Startdatum']."','".$_POST['Einddatum']."')";
此更改的原因是由于以下原因您的查询错误:
您在$ _POST中的某些索引拼写错误。例如:
$_POST[einddatum] should be $_POST['Einddatum']
另外,请考虑此代码容易受到SQL Injection
的攻击