我正在尝试在PHP中创建一个登录表单。我正在传递用户输入的用户名和密码,并检查数据库中存在的天气。
我已完成编码,但IF EXIST查询不会返回任何结果。
任何人都可以帮我解决这个问题。或者给我一个替代的想法..谢谢......
<?php
$name= $_POST["usname"];
$pass = $_POST ["password"];
$connection = mysqli_connect("localhost","sathya","sathya","learning1");
//mysqli_query($connection,"INSERT INTO user (name, password) VALUES ('".$name."', '".$pass."')");
$result = mysqli_query($connection, "IF EXISTS(SELECT * FROM user WHERE name='".$name."'AND password='".$pass."')");
mysqli_close($connection);
echo "result ".$result;
if($result == True){
header("Location: logedin.php");
//redirect_to('logedin.php');
}else{
echo "not logged in installed";
}
?>
答案 0 :(得分:4)
这是一个迟到的答案,但您需要了解一些事项。 (不接受已接受的答案)。
您需要使用if(mysqli_num_rows($result) > 0)
,因为如果用户名匹配且密码不匹配,您的查询将始终为TRUE,反之亦然。
最好使用mysqli_num_rows()
而不是if($result == True)
旁注: 请参阅有关密码存储和SQL注入的脚注。
<?php
$DB_HOST = "xxx";
$DB_NAME = "xxx";
$DB_PASS = "xxx";
$DB_USER = "xxx";
$db = new mysqli($DB_HOST, $DB_USER, $DB_PASS, $DB_NAME);
if($db->connect_errno > 0) {
die('Connection failed [' . $db->connect_error . ']');
}
$name = $_POST["usname"]; // See footnotes about this
$pass = $_POST ["password"]; // See footnotes about this
$result = mysqli_query($db, "SELECT EXISTS(SELECT * FROM users WHERE username='".$name."' AND password='".$pass."')");
// Works just as well
// $result = mysqli_query($db, "SELECT * FROM users WHERE username='".$name."' AND password='".$pass."'");
if(mysqli_num_rows($result) > 0){
echo "Both match.";
}
else{
echo "Sorry, there was not a perfect match.";
}
<强>脚注:强>
您也可以使用:
$result = mysqli_query($db, "SELECT * FROM users WHERE username='".$name."' AND password='".$pass."'");
SELECT EXISTS(SELECT *
在使用较少字符时也是如此。
或选择实际列:
$result = mysqli_query($db, "SELECT username, password FROM users WHERE username='".$name."' AND password='".$pass."'");
我建议你使用准备好的陈述并清理你的输入。如果不这样做会让您对SQL injection开放。
以下是关于(mysqli)准备好的语句的一些教程,您可以学习并尝试:
以下是PDO的一些教程:
<强>密码强>
我还注意到您以纯文本格式存储密码。不建议这样做。
使用以下其中一项:
crypt()
bcrypt()
scrypt()
password_hash()
功能。其他链接:
答案 1 :(得分:1)
我不能说PHP部分,但查询肯定会导致语法错误。
IF whatever ...
仅在存储过程或函数中允许,而不在单个查询中。但是,您可以将IF
替换为SELECT
$result = mysqli_query($connection, "SELECT EXISTS(SELECT * FROM user WHERE name='".$name."'AND password='".$pass."')");
此查询将返回0(如果不存在条目)或1(如果存在条目)。使用EXISTS
也是一个好主意,因为它会在找到条目后立即停止查询,并且不会返回整个数据集。
答案 2 :(得分:1)
您可以尝试使用&#39; IF EXISTS&#39;功能 -
$result = mysqli_query($connection, "SELECT * FROM user WHERE name='".$name."'AND password='".$pass."'");
$count=mysql_num_rows($result);
if($count==1) // $count=1 if any row is present with mathing username and pwd in db
{
echo "user already logged in";
}
else
{
echo "user not exist";
}