我对这种php语言有点新意。我似乎在检查用户的数据库中的表时遇到问题。它只是一直成功,即使它不是正确的密码。它只是去" admin / index-admin.php"。请帮帮我..
我的代码:
<form action="" method="POST">
<table align="center">
<tr>
<td align="center"><h2>Administrator Login</h2></td>
</tr>
<tr>
<td align="left">Username : </td>
</tr>
<tr>
<td><input type="text" name="username" /></td>
</tr>
<tr>
<td align="left">Password : </td>
</tr>
<tr>
<td><input type="password" name="password" /></td>
</tr>
<tr>
<td align="center"><input type="submit" name="submit" value="Login" /></td>
</tr>
</table>
</form>
<?php
$user = $_REQUEST['username'];
$pass = $_REQUEST['password'];
$query = "SELECT * FROM users WHERE username=".$user." AND password=".$pass."";
$result = mysql_query($query);
if(count($result)>0)
{
header('Location: admin/index-admin.php');
echo "<script type='text/javascript'>";
echo "alert('You are logged In Successfully.')";
echo "</script>";
}
else
{
echo "Invalid Username or Password.";
}
?>
如果我使用jquery mobile与php会有什么不同我的问题?这会是同样的问题吗?
感谢您的帮助...
哦,我的数据库有点像这样:<?php
$conn = mysql_connect("","",""); ==> //i just left them blank in purpose..
if(!$conn)
{
echo mysql_error();
}
$db = mysql_select_db("",$conn); ==> //i just left them blank in purpose..
if(!$db)
{
echo mysql_error();
}
?>
答案 0 :(得分:2)
你需要在查询中将变量放在单引号中:(也使用mysqli_real_escape_string来防止sql注入)
$query = "SELECT * FROM users WHERE username='".mysqli_real_escape_string($user)."' AND password='".mysqli_real_escape_string($pass)."'";
您需要从结果集中获取行:
$result = mysqli_query($query);
$row = mysqli_fetch_array($result);
if (!empty($row)) {
..
}
答案 1 :(得分:0)
首先,我建议您使用不同的密码存储方法。有些贴在我的脚注中。
试试这个适用于我的mysqli_*
方法。
<form action="" method="POST">
<table align="center">
<tr>
<td align="center"><h2>Login</h2></td>
</tr>
<tr>
<td align="left">Username: </td>
</tr>
<tr>
<td><input type="text" name="username" /></td>
</tr>
<tr>
<td align="left">Password: </td>
</tr>
<tr>
<td><input type="password" name="password" /></td>
</tr>
<tr>
<td align="center"><input type="submit" name="submit" value="Login" /></td>
</tr>
</table>
</form>
<?php
DEFINE ('DB_USER', 'xxx');
DEFINE ('DB_PASSWORD', 'xxx');
DEFINE ('DB_HOST', 'xxx');
DEFINE ('DB_NAME', 'xxx');
$mysqli = @mysqli_connect (DB_HOST, DB_USER, DB_PASSWORD, DB_NAME)
OR die("could not connect");
if(isset($_POST['submit'])){
$user = mysqli_real_escape_string($mysqli,$_REQUEST['username']);
$pass = mysqli_real_escape_string($mysqli,$_REQUEST['password']);
$query = "SELECT * FROM users WHERE username='$user' AND password='$pass'";
$result = mysqli_query($mysqli,$query);
$row = mysqli_fetch_array($result);
if($row["username"]==$user && $row["password"]==$pass){
echo "You are a validated user.";
// header('Location: admin/index-admin.php');
}
else{
die("Sorry Jack");
}
} // brace for if(isset($_POST['submit']))
?>
添加方法:
使用“YES”或“NO”作为值创建名为approved
的列,以便暂时拒绝对标记为“NO”的用户进行访问。
$query = "SELECT * FROM users WHERE username='$user' AND password='$pass' AND approved='YES'";
<强>脚注:强>
密码
我注意到您以纯文本格式存储密码。不建议这样做。
使用以下其中一项:
crypt()
bcrypt()
scrypt()
password_hash()
功能。其他链接:
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的文档。