我希望我的代码检查我的数据库中是否存在用户名和密码。 它确实工作硬编码,但我想用数据库来做。现在这就是我所拥有的:
if(isset($_POST["name"], $_POST["password"]))
{
$name = $_POST["name"];
$password = $_POST["password"];
$result1 = mysql_query("SELECT password FROM Users WHERE username = '".$name."'");
$result2 = mysql_query("SELECT username FROM Users WHERE password = '".$password."'");
if($name == $result2 && $password == $result1)
{
$_SESSION["logged_in"] = true;
$_SESSION["naam"] = $name;
}
else
{
echo'The username or password are incorrect!';
}
}
我认为问题出现在result1/2
部分,因为当我在我的网站中使用正确的用户名和密码时,它会给出不正确的消息。
哦,是的,查询也有效,在PHPmyAdmin中尝试了但是没有$name
部分,我将其替换为用户名
答案 0 :(得分:6)
您可以使用mysql_num_rows()
并结合您的查询 - 查看脚注
if(isset($_POST["name"], $_POST["password"]))
{
$name = $_POST["name"];
$password = $_POST["password"];
$result1 = mysql_query("SELECT username, password FROM Users WHERE username = '".$name."' AND password = '".$password."'");
if(mysql_num_rows($result1) > 0 )
{
$_SESSION["logged_in"] = true;
$_SESSION["naam"] = $name;
}
else
{
echo 'The username or password are incorrect!';
}
}
为了使您现有的代码更安全,请使用:
$name = stripslashes($_POST["name"]);
$name = mysql_real_escape_string($_POST["name"]);
$password = stripslashes$_POST["password"]);
$password = mysql_real_escape_string($_POST["password"]);
但请查看下面有关使用预准备语句和密码哈希的链接。
<强> 脚注: 强>
您目前的代码向SQL injection开放。使用prepared statements或PDO with prepared statements。请访问这些链接以获取更多信息。
我注意到您可能以纯文本格式存储密码。如果是这种情况,则非常气馁。
如果你是,这是一个LIVE网站,你最终会被黑客攻击。
我建议您使用CRYPT_BLOWFISH或PHP 5.5的password_hash()
函数。对于PHP&lt; 5.5使用password_hash() compatibility pack
。
mysql_*
函数弃用通知:
http://www.php.net/manual/en/intro.mysql.php
从PHP 5.5.0开始,不推荐使用此扩展,不建议用于编写新代码,因为将来会删除它。相反,应使用mysqli或PDO_MySQL扩展名。在选择MySQL API时,另请参阅MySQL API Overview以获得进一步的帮助。
这些功能允许您访问MySQL数据库服务器。有关MySQL的更多信息,请访问»http://www.mysql.com/。
可以在»http://dev.mysql.com/doc/找到MySQL的文档。
修改以帮助OP(请查看我提供的有关密码哈希的链接)。
尝试替换
if(mysql_num_rows($result1) > 0 )
{
$_SESSION["logged_in"] = true;
$_SESSION["naam"] = $name;
}
else
{
echo 'The username or password are incorrect!';
}
使用:
while($row=mysql_fetch_assoc($result1))
{
$check_username=$row['username'];
$check_password=$row['password'];
}
if($username == $check_username && $password == $check_password){
echo "Matches.";
}
else{
echo "No match found.";
}
答案 1 :(得分:1)
尝试一下:(我曾经使用过面向对象的mysql,如果您想使用其他版本的话)
if(isset($ _ POST [“ name”],$ _POST [“ password”])){
$name = $_POST["name"];
$password = $_POST["password"];
$select1 = "SELECT password FROM USERS WHERE username = '".$name."'";
$result1=$conn->query($select1);
$row1=$result1->fetch_assoc();
$select2 = "SELECT username FROM USERS WHERE password = '".$password."'";
$result2=$conn->query($select2);
$row2=$result2->fetch_assoc();
if($name == $row2["username"] && $password == $row1["password"])
{
$_SESSION["logged_in"] = true;
$_SESSION["naam"] = $name;
}
else
{
echo'The username or password are incorrect!';
}
答案 2 :(得分:-1)
$name
和$password
可能是字符串。如果您的查询正在进行并正确完成,它们将作为对象返回。
为了实现这一点,您只需从$name ==
条件中删除$password ==
和if()
!
为简单起见,您还可以合并这些查询。
<?php
$result = mysql_query("SELECT username, password FROM Users WHERE username = '".$name."' && password = '".$password."'");
if ($result && mysql_num_rows($result) > 0) {
// Login
} else {
// Failed!
}
如果你不在乎知道哪一个失败了,那将会完成同样的事情。
答案 3 :(得分:-1)
error_reporting(E_ALL);
ini_set('display_errors', 1);
session_start();
if(count($_POST)>0)
{
include'includePhp.php';
$sql="SELECT * FROM admin WHERE username='" . $_POST['username'] . "' AND password = '". $_POST['password']."'";
$result = $con->query($sql);
if ($result->num_rows > 0)
{
while($row = $result->fetch_assoc())
{
if(!empty($row) && !empty($row['username']) AND !empty($row['password']))
{
$_SESSION['username'] = $row['username'];
echo "SUCCESSFULLY LOGIN ";
header("Location: inDhanush.php");
}
else
{
echo "Try again";
}
}
}
}