正在使用 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?