我创建了一个MySQL数据库,目前只有一个名为"用户"的表。字段包括:id,first_name,last_name,用户名,电子邮件,about,location,website。我通过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";
}
....所有字段中的所有数据都可用于查找和匹配任何现有用户:email,username,first_name等,而不仅仅是我之前提到过的'ID'字段。插入是通过HTML表单进行的。
我使用的是WAMP服务器2.4,MySQL版本是5.6.12,PHP版本是5.4.12
我希望我对问题的描述很清楚,而且我希望你能帮我弄清楚为什么会这样。
非常感谢提前!
的Arturo。
答案 0 :(得分:3)
采取一些猜测,但......
这是您的问题
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