繁体   English   中英

用PHP添加新的mySQL表行不起作用

[英]adding new mySQL table row with PHP doesn't work

我得到一个小表格:

<form id="plannerform" action="save.php" method="post">
    <input id="plannername" placeholder=" " type="text" autocomplete="off" name="plannername">
    <input id="plannersubmit" type="submit" value="eintragen">
</form>

如您所见,在文本输入上有action="save.php"method="post" ,这是name="plannername"

那就是我的PHP:

$con = mysql_connect("myHost","myUser","myPW");
if (!$con)
{
  die('Could not connect: ' . mysql_error());
}

mysql_select_db("myDB", $con);

$sql="INSERT INTO anmeldungen (FR_PM)
VALUES ('$_POST[plannername]')";

if (!mysql_query($sql,$con))
{
  die('Error: ' . mysql_error());
}
echo "1 record added";

FR_PM是表的一列。 但是当我按提交时,甚至没有创建新行。 什么都没发生。 但是,当我用“ mywebsite.com/save.php”调用我的php时,它在表中添加了新行(“ FR_PM”没有值,这很明显)

我做错了什么?

如果您是初学者,需要学习的一件事是,您应该尽一切努力避免使用已mysql_*函数,而php中不再支持该函数。 而是将mysqli_*与预备语句一起使用,或将PDO预备语句一起使用。

准备好的语句使您的代码看起来很干净并且易于调试。

这是您准备好的语句的示例。

<form id="plannerform" action="save.php" method="post">
    <input id="plannername" placeholder=" " type="text" autocomplete="off" name="plannername">
    <input id="plannersubmit" type="submit" value="eintragen" name="submit">
 </form>

ave.php

<?php
$servername = "localhost";
$username   = "root";
$password   = "";
$dbname     = "myDB";

// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);

// Check connection
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}

if (isset($_POST['submit'])) {

    if (empty($_POST['plannername'])) {

        die("Enter plannername");
    } else {
        // prepare and bind
        $stmt = $conn->prepare("INSERT INTO anmeldungen (FR_PM) VALUES (?)");
        $stmt->bind_param("s", $_POST['plannername']);

        if ($stmt->execute()) {

            echo "New records created successfully";

        } else {

            echo "Could not insert record";
        }

        $stmt->close();

    }
}
?>

我使用预备语句的原因:

  • 预准备语句减少了解析时间,因为对查询的准备仅执行一次(尽管该语句执行了多次)
  • 绑定参数可最大限度地减少服务器的带宽,因为您需要每次仅发送参数,而不发送整个查询
  • 对于SQL注入,准备好的语句非常有用,因为以后使用不同协议传输的参数值不需要正确地转义。 如果原始语句模板不是从外部输入派生的,则不会发生SQL注入。

但是,当我用“ mywebsite.com/save.php”调用我的php时,它在表中添加了新行(“ FR_PM”没有值,这很明显)

我做错了什么?

确实要防止这种情况发生,您需要在实际处理任何事情之前检查表单是否已提交。

注意:如果我们要插入来自外部源的任何数据(例如来自表单的用户输入),则对数据进行清理和验证非常重要。 始终将来自表单的输入视为来自非常危险的黑客的输入

更改您的插入查询:

$sql="INSERT INTO anmeldungen (FR_PM) VALUES ('".$_POST["plannername"]."')";

要么

$plannername = $_POST["plannername"];
$sql="INSERT INTO anmeldungen (FR_PM) VALUES ('".$plannername."')";

另外,在HTML表单中使用"name"=而不是"id"= 使用表单和HTTP POST方法时,这通常会产生误导。

你可以试试

$value = $_POST['plannername'];

$sql="INSERT INTO anmeldungen (FR_PM) VALUES ('{$value}')";

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM