我正在为我的网站编写PHP代码。目前,我的代码存在一些问题。
这是我的代码。忽略一些使用的马来语,我试图翻译它们中的大多数。
<?php
session_start();
include "../library/inc.connectiondb.php";
$txtUser = $_POST['txtUser'];
$txtPass = $_POST['txtPass'];
if(trim($txtUser) == "") {
echo "<b>User ID</b> is empty, please fill";
include "login.php";
}
else if(strlen(trim($txtPass)) <= 5) {
echo "<b>Password</b> is less then 6 characters, please fix";
include "login.php";
}
else {
$sqlPeriksa = "SELECT userID FROM admin WHERE userID='$txtUser'";
$qryPeriksa = mysql_query($sqlPeriksa, $sambung);
$hslPeriksa = mysql_num_rows($qryPeriksa);
if($hslPeriksa == 0) {
# If username doesn't exist
echo "<b>UserID</b> doesn't exist";
include "login.php";
}
else {
$sqlPassword = "SELECT passID FROM admin WHERE (userID='$txtUser' && passID='$txtPass')";
$qryPassword = mysql_query($sqlPeriksa, $sambung);
$hslPassword = mysql_num_rows($qryPassword);
if($hslPassword < 1) {
# If password is incorrect
echo "<b>Password</b> is incorrect";
include "login.php";
}
else {
# If login successful
$SES_Admin = $txtUser;
session_register('SES_Admin');
echo "LOGIN SUCCESSFUL";
# Redirect to index.php
echo "<meta http-equiv='refresh' content='0; url=index.php'>";
exit;
}
}
}
?>
问题是即使密码错误,此代码也允许我登录。我做了一些搜索,但仍然没有解决我的问题。我很确定问题出在第27行。
所以,如果有人有解决方案,请快速告诉我。我正在为我的学校编写这段代码,并且必须在明年之前完成。
修改 好吧,我已经在代码中放置了 mysql_real_escape_string ,就像许多人告诉我的那样。我不知道这会有什么帮助,但是这个mysql表名为“admin”。它有2个领域; userID和passID。为了测试代码,我在表中插入了值“admin”和“12345678”。
答案 0 :(得分:1)
这就是您的问题所在:
$sqlPassword = "SELECT passID FROM admin WHERE (userID='$txtUser' && passID='$txtPass')";
$qryPassword = mysql_query($sqlPeriksa, $sambung);
$hslPassword = mysql_num_rows($qryPassword);
您看,您的mysql_query
正在执行$sqlPeriksa
,即:
$sqlPeriksa = "SELECT userID FROM admin WHERE userID='$txtUser'";
相反,您的代码应该是这样的:
$sqlPassword = "SELECT passID FROM admin WHERE (userID='$txtUser' && passID='$txtPass')";
$qryPassword = mysql_query($sqlPassword, $sambung);
$hslPassword = mysql_num_rows($qryPassword);
请尝试一下,让我们知道会发生什么。
[edit / additional]:我强烈建议您查看以下内容:
使用PDO:
http://net.tutsplus.com/tutorials/php/why-you-should-be-using-phps-pdo-for-database-access/
使用存储过程:
http://dev.mysql.com/doc/refman/5.0/en/create-procedure.html
使用PDO +存储过程:
http://php.net/manual/en/pdo.prepared-statements.php(参见示例#4)
答案 1 :(得分:0)
只需简单的故障排除是必要的。返回多少行?返回行的查询中userID和passID的值是多少?休息一下,看看发生了什么。我没有看到问题,但它很难解决这里发布的代码,因为它真的无法在没有数据库的情况下运行。
答案 2 :(得分:0)
我认为没有任何理由不按预期工作,我怀疑问题可能在其他地方。例如,我没有看到您检查是否已注册“SES_Admin”会话。但至少你需要用这个替换第5行和第6行,否则有人可能会删除你的整个用户表,并用你的MySQL数据库做各种其他恶意的事情。
$txtUser = mysql_real_escape_string($_POST['txtUser']);
$txtPass = mysql_real_escape_string($_POST['txtPass']);
请在http://php.net/manual/en/function.mysql-real-escape-string.php
上阅读mysql_real_escape_string
上的文章