【问题标题】:Inserting form data into mysql table (safely)将表单数据插入mysql表(安全)
【发布时间】:2018-09-28 03:12:23
【问题描述】:

这是编辑后的代码?我仍然收到 404 错误,并且没有任何内容发送到数据库表。表单提交后在404页面的url后面看到dbhh.php(也就是下面的文件)

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

try {
    $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
    // set the PDO error mode to exception
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    // prepare sql and bind parameters
    $stmt = $conn->prepare("INSERT INTO user_input(first_name1, last_name1, email1) 
    VALUES (:first_name1, :last_name1, :email1)");

    // insert a row

    $stmt->execute([
    ':first_name1' => $_POST["first_name1"],
    ':last_name1'  => $_POST["last_name1"],
    ':email1'      => $_POST["email1"]
]);

        echo "New records created successfully";
    }
catch(PDOException $e)
    {
    echo "Error: " . $e->getMessage();
    }
$conn = null;

?> 

【问题讨论】:

    标签: php mysql database mysqli


    【解决方案1】:

    您已在准备好查询后声明了 POST 变量。首先,确保将 POST 值分配给变量。

    // insert a row
    $first_name1 = $_POST["first_name1"];
    $last_name1 = $_POST["last_name1"];
    $email1 = $_POST["email1"];
    
    $stmt = $conn->prepare("INSERT INTO user_input(first_name1, last_name1, email1) 
    VALUES (:first_name1, :last_name1, :email1)");
    $stmt->bindParam(':first_name1', $first_name1);
    $stmt->bindParam(':last_name1', $last_name1);
    $stmt->bindParam(':email1', $email1);
    $stmt->execute();
    

    注意区别。我把 POST 放在查询之前。当bindParam被执行时,它可以获取值。

    【讨论】:

    • 有理由不使用$stmt-&gt;bindParam(':first_name1', $_POST["first_name1"]);等吗?
    • 这是个好主意。它更有效。您可以发布自己的答案。
    • 不@IdontDownVote,人们只是想让事情“更具可读性”。 YMMV
    • 似乎是一种非常常见的方法,但客观上没有必要,但我想看看我是否遗漏了什么。
    【解决方案2】:

    什么@david said。尽管更紧凑的方法只是跳过手动绑定,并立即通过 PDO::execute 传递参数:

    $stmt->execute([
        ':first_name1' => $_POST["first_name1"],
        ':last_name1'  => $_POST["last_name1"],
        ':email1'      => $_POST["email1"]
    ]);
    

    【讨论】:

    • 谢谢大家!我将代码编辑为以下内容,但仍然收到 404 错误,我可以在 URL 末尾看到 dbhh.php,这在提交表单后会带来 404 错误
    • 404 不是 PHP 错误,不足以诊断任何事情(访问/重写日志 + webdir 结构),无论如何都是一个完全不同的问题。
    【解决方案3】:

    试试这个。希望对你有帮助。

    <?php
    $servername = "localhost";
    $username = "username";
    $password = "password";
    $dbname = "dbname";
    
    $conn = new mysqli($servername, $username, $password, $dbname);
     $stmt = $mysqli->prepare("INSERT INTO user_input (first_name1, last_name1,email1) VALUES (?, ?)");
    $stmt->bind_param("si", $_POST['first_name1'], $_POST['last_name1'],$_POST['email1']);
    $stmt->execute();
    echo "New records created successfully";
    $stmt->close();
    $conn->close();
    
    ?> 
    

    【讨论】:

      猜你喜欢
      • 2017-12-09
      • 2013-02-20
      • 1970-01-01
      • 2012-03-26
      • 1970-01-01
      • 2020-02-26
      • 2019-01-12
      • 2013-06-13
      • 1970-01-01
      相关资源
      最近更新 更多