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

正在使用PHP通过HTML表单插入MySQL,但无法搜索数据,php,html,mysql,forms,Php,Html,Mysql,Forms,我创建了一个MySQL数据库,目前只有一个名为“users”的表。字段包括:id、名、姓、用户名、电子邮件、关于、位置、网站。我使用PHP通过自动提交的HTML表单插入数据 插入是毫无问题的,但让我感到困惑的是,当通过HTML表单进行插入时,里面的数据是不可搜索的。例如,如果我尝试执行搜索查询以查找具有匹配电子邮件或用户名的用户,则即使该用户确实存在于数据库中,也找不到该用户。只有当我搜索一个ID为的用户(自动递增,由MYSQL自动插入)时,搜索查询才会找到该用户。下面是我的代码。为了排除可能导

我创建了一个MySQL数据库,目前只有一个名为“users”的表。字段包括:id、名、姓、用户名、电子邮件、关于、位置、网站。我使用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>
..所有字段中的所有数据都可用于查找和匹配任何现有用户:电子邮件、用户名、名字等,而不仅仅是我前面提到的“ID”字段,当通过HTML表单进行插入时会发生这种情况

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

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

非常感谢


阿图罗。

胡乱猜测,但

这是你的问题

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

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

<input type="text" name="first_name" value="">
最后,您的
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注入。带他们出去,排除可能导致问题的任何其他因素。虽然我是在做条纹斜杠,但我会尝试你建议的方式。非常感谢你,菲尔!!
$first_name = trim($_POST["first_name"]);
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