不知怎的,我的条件根本不起作用。一旦我点击我的登录表单上的设置为“post”的按钮并将操作定义为下面的登录脚本,我只会被定向到脚本,但不会按照条件语句中的定义重定向。我的代码出了什么问题?
session_start();
$servername = "localhost";
$username = "root";
$password = "";
$database = "project";
$connection = mysqli_connect($servername, $username, $password, $database) or exit(header("location:maintenance.php"));
function login_check() {
global $connection;
$name = $_POST['name'];
$password = $_POST['password'];
$prepared = mysqli_stmt_init($connection);
$request = mysqli_stmt_prepare($prepared, "SELECT id FROM members WHERE name = ? AND password = ?");
mysqli_stmt_bind_param($prepared, "ss", $name, $password);
$result= mysqli_stmt_bind_result($request);
$rows_counter = mysqli_num_rows($result);
mysqli_stmt_close($prepared);
if ($rows_counter > 0) {
$_SESSION['member'] = $name;
header("location:../../success.php");
}
else {
header("location:../../relogin.php");
}
}
答案 0 :(得分:1)
以下是我对您的代码的输入和处理方法。
首先,在编写解决方案并告诉他们之前,一步一步地进行代码故障排除始终是一个好习惯。
在开始构建完整的登录系统并将if语句或make语句与输入等相结合之前。
将您的解决方案放在小巧的工作中并将拼图放在一起。
你的问题主要集中在if语句上,大部分的帮助和回答也集中在if语句是否很好,但问题不在那里。
我删除了if语句,并且只是专注于查看是否返回了一些内容,我没有。
你$result= mysqli_stmt_bind_result($request);
错过了论点,当修正后,下一行也错过了其他内容。我已经在那里退出调试。
我已经重写了你的代码并且它有效,我做了什么我已经重新定义了变量的命名,因此它们非常清楚地理解什么是name
,称之为username
,数据库{{1}称之为username
或dbUser
等。
如果您想检查代码是否返回某些内容,请使用dbUsername
。
最后一点,在制作帖子表单之前,你可以在你的数据库中创建一个虚拟的用户名和密码,并直接在你的代码中注入,只是为了看看每件事是否正常,然后转移到你的表单:
var_dump($someVariable)
我所做的解决方案只是为了演示如何做到而不一定代表最佳逻辑,但是你需要找到正确的逻辑,这完全取决于你的策略。
这是我的建议:
$username = "user1";
$password = "1234";
答案 1 :(得分:0)
答案 2 :(得分:0)
定义函数login_check()
后,你也应该调用它(如果条件合适):</ p>
function login_check() {
// your implementation as above
}
if (isset($_POST['name']) && isset($_POST['password'])) {
login_check(); // actually call the function
}
作为旁注,最好在重定向之前明智地关闭连接。
如KhomeHoly评论,只在必要时调用函数...
答案 3 :(得分:0)
如果您定义了函数,则需要调用它们。不这样做就像在新房子里建造一个房间但忘记了门。它在那里,但没有人可以使用或访问它。
所以你需要做的是:
// your script as it is right now
if (isset($_POST['name']) && isset($_POST['password'])) {
login_check(); // actually call the function
}
使用isset()
检查某些$_POST
参数是否已设置,但未经过验证。您至少应该对数据进行基本验证,看它们是否正确!
这样的事情会起作用,取决于你的要求
if (isset($_POST['name']) && strlen($_POST['name') >= 4 && isset($_POST['password']) && strlen($_POST['password']) >= 4) {
login_check(); // actually call the function
}
上面的代码会检查这些参数是否设置为和检查名称和密码是否至少为4个字符。 (我不会接受个人低于4个字符的用户名,密码对我来说应该至少为8个)
现在当然错过了正确的错误报告和所有这些内容,但我认为应该根据您的问题给出基本的想法。