正在使用 PHP 通过 HTML 表单插入 MySQL,但数据不可搜索

Posted

技术标签:

【中文标题】正在使用 PHP 通过 HTML 表单插入 MySQL,但数据不可搜索【英文标题】:MySQL insertion through an HTML form using PHP is happening but the data is not searchable 【发布时间】:2014-12-19 18:17:23 【问题描述】:

我创建了一个 mysql 数据库,目前只有一个名为“users”的表。字段包括:id、first_name、last_name、用户名、电子邮件、关于、位置、网站。我正在使用 php 通过自动提交的 html 表单插入数据。

插入没有问题,但让我感到困惑的是,当通过 HTML 表单进行插入时,里面的数据是不可搜索的。例如,如果我尝试执行搜索查询以查找具有匹配电子邮件或用户名的用户,则即使该用户确实存在于数据库中,也找不到该用户。只有当我使用他的 ID(这是一个自动增量并由 MYSQL 自动插入)搜索用户时,搜索查询才会找到该用户。下面是我的代码。我已经剥离了从 CSS 到验证和安全功能的所有内容,以排除可能导致这种情况的因素。

<?php
if (isset($_POST['submit'])) 


    //$user = new User();
    $first_name =$_POST["first_name"];
    $last_name =$_POST["last_name"];
    $email =$_POST["email"];
    $username =$_POST["username"];

    $connection=mysqli_connect(DB_SERVER, DB_USER, DB_PASS, DB_NAME);

    $sql = "INSERT INTO users ";
    $sql .= "(first_name, last_name, email, username) ";
    $sql .= "VALUES ('$first_name', '$last_name', '$email', '$username')";
    $result = mysqli_query($connection, $sql);
    if ($result) 
        echo "Insertion succeed";
     else 
        echo "Insertion failed";
    

?>


<h2>Sign up</h2>

<form  action="sign_up2.php" method="post"/>
<ul>
<li>
First_name: <input type="text" name="first_name" value=" "/>
</li>
<li>
Last_name:<input type="text" name="last_name" value=" "/>
</li>
<li>
Email:<input type="text" name="email" value=" "/>
</li>
<li>
Username:<input type="text" name="username" value=" "/>
</li>
<li>
Password:<input type="password" name="password" value=""/>
</li>

<li>
<input type="submit" name="submit" value="Sign in" />
</li>
</ul>
</form>

另一方面,如果数据直接通过 MSQL 查询脚本插入到数据库中,避免了 HTML 表和 $_POST 超级全局变量,像这样......

$connection=mysqli_connect(DB_SERVER, DB_USER, DB_PASS, DB_NAME);

    $sql = "INSERT INTO users ";
    $sql .= "(first_name, last_name, email, username) ";
    $sql .= "VALUES ('John', 'Doe', 'John@gmail.com', 'john_d')";
    $result = mysqli_query($connection, $sql);
    if ($result) 
        echo "Insertion succeed";
     else 
        echo "Insertion failed";
    

....所有字段中的所有数据都可用于查找和匹配任何现有用户:电子邮件、用户名、名字等,而不仅仅是我之前提到的“ID”字段插入是通过 HTML 表单进行的。

我使用的是 WAMP 服务器 2.4,MySQL 版本是 5.6.12,PHP 版本是 5.4.12

我希望我对问题的描述很清楚,主要是希望您能帮助我弄清楚为什么会发生这种情况。

非常感谢!

阿图罗。

【问题讨论】:

***.com/questions/60174/… 【参考方案1】:

进行一些疯狂的猜测,但是......

这是你的问题

value=" "

这会将您的输入字段设置为单个空格字符。当您单击这些字段时,您可能不会注意到光标前后的空格字符。我想说你的所有字段值很有可能以前导或尾随空格结尾。

我要做的第一件事是将value 属性设置为空,即

<input type="text" name="first_name" value="">

您也可以trim() PHP 代码中的值...

$first_name = trim($_POST["first_name"]);

最后,您的INSERT 语句(可能还有您的所有其他查询)容易受到 SQL 注入的攻击。我强烈建议使用准备好的语句,例如

mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$connection = new mysqli(DB_SERVER, DB_USER, DB_PASS, DB_NAME);

$stmt = $connection->prepare('
    INSERT INTO users (first_name, last_name, email, username)
    VALUES (?, ?, ?, ?)
');
$stmt->bind_param('ssss', $first_name, $last_name, $email, $username);
$stmt->execute();

echo "Insertion succeed";
// any problems will trigger an exception so handle that however you want

【讨论】:

哇菲尔,非常感谢。你很准。这确实解决了这个问题。你是明星!我有在插入之前转义值以避免mysql注入的函数。将它们排除在外,以排除可能导致问题的任何其他因素。我是通过条纹斜线来做的,但我会尝试你建议的方式。非常感谢菲尔!!

以上是关于正在使用 PHP 通过 HTML 表单插入 MySQL,但数据不可搜索的主要内容,如果未能解决你的问题,请参考以下文章

如何通过 PHP 将未知数量的 HTML 表单字段插入 MySQL?

通过html和php表单将数据插入MySQL数据库时遇到问题[重复]

通过使用 HTML 表单插入 ID

通过表单将数据从一个表插入到另一个表

php在提交表单之前将数据插入数据库中的值为空?

将表单数据插入 MySQL?