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

时间:2017-02-22 12:05:54

标签: php mysql database phpmyadmin

我有一点形式:

<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”没有值,这很明显)

我做错了什么?

4 个答案:

答案 0 :(得分:3)

如果你是初学者,你需要学习的其中一件事,你应该尽量避免使用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”没有值,非常明显)

     

我做错了什么?

确实可以防止这种情况发生,您需要先检查表单是否已提交,然后才能实际处理任何内容。

  

注意:如果我们要插入来自外部源的任何数据(例如来自表单的用户输入),则清理数据非常重要   并经过验证。总是将表单中的输入视为非常   危险的黑客

答案 1 :(得分:0)

更改您的插入查询:

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

或者

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

答案 2 :(得分:0)

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

答案 3 :(得分:-1)

你可以尝试

$value = $_POST['plannername'];

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