信息未提交到数据库

时间:2019-10-28 09:05:08

标签: php html mysql

我们有一个学校的作业,我已经尝试构建该应用程序,但是我想要插入数据库中的某些文本没有提交。

我尝试了不同的操作,但是该页面也未显示错误。

这是我的插入页面的代码

<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数据库时,数据确实显示在页面上。

2 个答案:

答案 0 :(得分:1)

警告::您对SQL Injections持开放态度,应使用参数化的准备好的语句,而不是手动构建查询。它们由PDOMySQLi提供。永远不要相信任何输入!即使您的查询仅由受信任的用户执行,you are still in risk of corrupting your dataEscaping 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中的某些索引拼写错误。例如:

    $_POST[einddatum] should be $_POST['Einddatum']

另外,请考虑此代码容易受到SQL Injection

的攻击