好的,问题是...我的新手和我试图了解发生了什么。我通过html表单在数据库中使用POST发送这个数据(名称,电子邮件)。我理解它背后的逻辑除了什么基本上发生的是,每当我输入一个名字,任何名称,它都会回应else语句:“已经有一个具有该名称的用户”。它会在数据库中发回第一个名称。当什么都没有时,它什么都不发送。所以这是块:
$query= "SELECT* from users where username='".$_POST['name']."'";
$result = mysql_query($query);
if (!$result){
$query = "INSERT into users (username, email, password) values
('".$_POST["name"]."', '".$_POST["email"]."',
'".$passwords[0]."')";
$result = mysql_query($query);
if ($result){
echo "It's entered!";
} else {
echo "There's been a problem: ".mysql_error();
}
} else {
echo "There is already a user with that name: <br />";
$sqlAll = "select * from users";
$resultsAll = mysql_query($sqlAll);
$row = mysql_fetch_array($resultsAll);
while ($row) {
echo $row["username"]." -- ".$row["email"]."<br />";
$row = mysql_fetch_array($result);
答案 0 :(得分:2)
您可能需要检查mysql_num_rows()而不是检查!$ result,我认为如果查询成功,您将获得资源,即使它包含零行。
您可能还想阅读:http://php.net/manual/en/security.database.sql-injection.php
答案 1 :(得分:2)
首先,您需要了解逃避。 你有没有听说过Johnny DROP TABLES?
严肃的事业
它总是返回的原因是因为$ result中的响应实际上是资源数据类型。当铸造为布尔值时,这将永远是真的。 (因为你的查询不应该失败)。
您应该获取结果。例如。 (这不是最好的方法,但这是一种方法)。
mysql_fetch_row(result)
答案 2 :(得分:1)
根据manual,当出现错误时,mysql_query将返回false - “对于SELECT,SHOW,DESCRIBE,EXPLAIN和其他返回结果集的语句,mysql_query()返回成功时的资源,或者出错时返回FALSE。 “
答案 3 :(得分:1)
查看代码中没有违规行为。第一个mysql_query执行时没有错误,并且总是返回true。尝试测试返回的行数如下:
if (mysql_num_rows($result) == 0) {
//insert record
} else {
// show alreay exists
}
答案 4 :(得分:0)
首先,您正在测试:
if (!$result)
只有在查询失败时才会评估为真。
在SQL查询中使用之前,您还应该清理所有输入。