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

标签 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="计划者名称”

这就是我的 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>

save.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();

    }
}
?>

我使用准备好的语句的原因:

  • 准备好的语句减少了解析时间,因为在 查询仅执行一次(尽管该语句被执行多次 次)
  • 当您需要发送时,绑定(bind)参数可最大限度地减少服务器的带宽 每次只包含参数,而不是整个查询
  • 准备好的语句对于防范 SQL 注入(inject)非常有用,因为 参数值,稍后使用不同的方式传输 协议(protocol),不需要正确转义。如果按照原来的说法 模板不是从外部输入派生的,SQL注入(inject)不能 发生。

But when I call my php with "mywebsite.com/save.php" it adds a new row in my table (with no value at "FR_PM", what's pretty obvious)

What do I do wrong?

为了防止这种情况发生,您需要检查表单是否已提交,然后才能实际处理任何事情。

Note: If we want to insert any data from external sources (like user input from a form ), it is very important that the data is sanitized and validated. always treat input from a form as if its from a very dangerous hacker

关于php - 使用 PHP 添加新的 mySQL 表行不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42390991/

相关文章:

Python AES编码/解码字符串并存储在MySQL中

database - 使用谷歌应用引擎索引营业时间

mysql - 计算日期之间更改的记录

php - 我的mysqli插入查询无法正常工作

javascript - 获取错误消息;资源加载失败: the server responded with a status of 500

php解码base 64非常大的文件,而不是字符串

php - 向任何 PayPal 账户汇款并接收付款通知

php - 嵌入式 PHP MySQL 删除命令带有字母和数字值

php - PHP Crypt 方法中的西方和 Unicode 字符

php - mysqli 使用 foreach 从多个复选框插入数据库