【问题标题】:How to store sanitized user's input in database using InsertInto如何使用 InsertInto 将经过清理的用户输入存储在数据库中
【发布时间】:2019-07-14 15:15:05
【问题描述】:

我想将一些用户的输入变量存储到 mysql 中。但是,它们存储为 :username 和 :password 而不是用户的输入。

$username = $_POST['username'];
$password = $_POST["password"];

$conn = new PDO("mysql:host=localhost;dbname=nome", "nome", "password");
$sql = "SELECT * FROM users";
$query = $conn->query($sql);
$result = $query->fetchAll(PDO::FETCH_ASSOC);

$sql = "SELECT * FROM users WHERE username = :username AND password = :password";
$stmt = $conn->prepare($sql);
$stmt->bindParam(":username", $_POST["username"]);
$stmt->bindParam(":password", $_POST["password"]);
$stmt->execute();
$result = $stmt->fetchAll(PDO::FETCH_ASSOC);
var_dump($result); 

if($username && $password){
    $sql = "INSERT INTO users (username, password) VALUES (':username', ':password')";    
    $stmt = $conn->prepare($sql);
    $stmt->bindParam(":username", $_POST["username"]);
    $stmt->bindParam(":password", $_POST["password"]);
    $stmt->execute();
    $result = $stmt->fetchAll(PDO::FETCH_ASSOC);
  }else{
    print "Dati non corretti";
};

<h1> Login Form </h1>
  <form action="?" method="post"> Name
    <input name="username"  value="" />


    Password
    <input name="password"  value=""/>

    <input type="submit" name="my_form_submit_button"
           value="Login" />

    </form>

当我检查 phpMyAdmin 表时,变量存储为:用户名和:密码。 我想将它们存储为用户的输入。例如,如果用户输入的用户名是 Mark,我想将其存储为 Mark,而不是 :username。

谢谢!

【问题讨论】:

  • 你能不能把':username'换成:username再试一次。 ' 将其转换为字符串参数,因此 bindParam 应该跳过它。
  • 或者你可以使用$sql = "INSERT INTO users (username, password) VALUES (?, ?)";$stmt-&gt;bindParam(1, $_POST["username"]);
  • @Cotur 在这种情况下,存储的值为“0”

标签: php mysql validation input


【解决方案1】:

现在完全可以运行了,将以下代码保存为php文件并运行它。

我更改了以下内容。

  1. INSERT sql 的值 ':username':username':password':password 相同,因为 ' 单引号在内部转换为字符串,bindValue 可以跳过它。
  2. ?&lt;form action"?"删除到&lt;form action"",它定义了请求页面本身。
  3. 在 php 代码中,我添加了if($_POST) 语句来检查在将值插入数据库表之前是否存在任何 POST 请求。
  4. 最后一个更改是在bindParam,我添加了PDO::PARAM_STR 作为最后一个变量来发送函数来定义值类型。
<?php


$conn = new PDO("mysql:host=localhost;dbname=nome", "nome", "password");
$sql = "SELECT * FROM users";
$query = $conn->query($sql);
$result = $query->fetchAll(PDO::FETCH_ASSOC);

var_dump($result);

if($_POST){
    $username = $_POST['username'];
    $password = $_POST["password"];

    $sql = "INSERT INTO users (username, password) VALUES (:username, :password)";    
    $stmt = $conn->prepare($sql);
    $stmt->bindParam(":username", $_POST["username"], PDO::PARAM_STR);
    $stmt->bindParam(":password", $_POST["password"], PDO::PARAM_STR);
    $stmt->execute();
}




?>

<h1> Login Form </h1>
<form action="" method="post"> Name
<input name="username"  value="" />


Password
<input name="password"  value=""/>

<input type="submit" name="my_form_submit_button"
        value="Login" />

</form>

【讨论】:

  • @Dharman,你是完全正确的。我已经添加了带有解释的更改。
  • 谢谢。 BTW PDO::PARAM_STR 是默认值,所以不需要添加它。
  • 是的,我添加它是为了展示它是如何工作的。尝试向 db 添加其他参数类型时,Kim 可以记住它。
猜你喜欢
  • 1970-01-01
  • 2016-04-23
  • 2012-12-04
  • 1970-01-01
  • 2011-02-20
  • 2021-04-12
  • 1970-01-01
  • 2015-01-03
  • 2023-04-06
相关资源
最近更新 更多