PHP:将表单中的值插入 MySQL

标签 php html mysql

我从终端在 mysql 中创建了一个 users 表,我正在尝试创建一个简单的任务:从表单中插入值。这是我的 dbConfig 文件

<?php
$mysqli = new mysqli("localhost", "root", "pass", "testDB");

/* check connection */
if (mysqli_connect_errno()) {
    printf("Connect failed: %s\n", mysqli_connect_error());
    exit();
}
?>

这是我的 Index.php

<!doctype html>
<html>
 <head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
    <meta name="description" content="$1">
    <meta name="viewport" content="width=device-width, initial-scale=1">

    <link rel="stylesheet" type="text/css" href="style.css">

    <title>test</title>

    <?php
    include_once 'dbConfig.php';
    ?>

</head>
<body>
     <?php
    if(isset($_POST['save'])){
        $sql = "INSERT INTO users (username, password, email)
        VALUES ('".$_POST["username"]."','".$_POST["password"]."','".$_POST["email"]."')";
    }

    ?>

    <form method="post"> 
    <label id="first"> First name:</label><br/>
    <input type="text" name="username"><br/>

    <label id="first">Password</label><br/>
    <input type="password" name="password"><br/>

    <label id="first">Email</label><br/>
    <input type="text" name="email"><br/>

    <button type="submit" name="save">save</button>
    <button type="submit" name="get">get</button>
    </form>

</body>
</html>

点击我的保存按钮后,没有任何反应,数据库仍然是空的。我尝试了 echo'ing INSERT 查询,它按照预期从表单中获取所有值。在我尝试从终端检查这是否有效后,我登录到我的 sql 尝试从用户表返回所有数据,但我得到空集。

最佳答案

以下代码只是声明了一个包含 MySQL 查询的字符串变量:

$sql = "INSERT INTO users (username, password, email)
    VALUES ('".$_POST["username"]."','".$_POST["password"]."','".$_POST["email"]."')";

它不执行查询。为此,您需要使用一些函数,但让我先解释一下其他内容。

永远不要相信用户输入:永远不要附加用户输入(例如来自 $_GET$_POST 的表单输入)直接到您的查询。有人可能会以这种方式小心地操纵输入,从而对您的数据库造成巨大损害。这就是所谓的 SQL 注入(inject)。您可以阅读更多相关信息 here

为了保护您的脚本免受此类攻击,您必须使用准备好的语句。更多关于准备好的陈述 here

像这样在您的代码中包含准备好的语句:

$sql = "INSERT INTO users (username, password, email)
    VALUES (?,?,?)";

注意 ? 是如何用作值的占位符的。接下来,您应该使用 mysqli_prepare 准备语句:

$stmt = $mysqli->prepare($sql);

然后开始将输入变量绑定(bind)到准备好的语句:

$stmt->bind_param("sss", $_POST['username'], $_POST['email'], $_POST['password']);

最后执行准备好的语句。 (这是实际插入发生的地方)

$stmt->execute();

注意 虽然不是问题的一部分,但我强烈建议您永远不要以明文形式存储密码。相反,您应该使用 password_hash 来存储密码的哈希值

关于PHP:将表单中的值插入 MySQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37367992/

相关文章:

php表单数据插入到mysql数据库中

javascript - 如何使用 Bootstrap 在悬停时显示 Action 列表?

html - 将 CSS 存储在 mysql 数据库中

MySQL IF 然后用数学

php - Phalcon模型中的表前缀配置

php - 我的 PayPal 脚本突然停止验证 SSL 证书

php - 通过标签名称获取多个元素并在回显它的循环中检查元素标签

javascript - innerHTML 不更新文本

javascript - 内联 Javascript 事件会降低网页加载性能吗?

mysql - 用mysql计算余额