我的if / else语句对我的自定义php登录脚本不起作用

时间:2015-08-21 08:08:54

标签: php

不知怎的,我的条件根本不起作用。一旦我点击我的登录表单上的设置为“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");
    }
}

4 个答案:

答案 0 :(得分:1)

以下是我对您的代码的输入和处理方法。

首先,在编写解决方案并告诉他们之前,一步一步地进行代码故障排除始终是一个好习惯。

在开始构建完整的登录系统并将if语句或make语句与输入等相结合之前。

将您的解决方案放在小巧的工作中并将拼图放在一起。

你的问题主要集中在if语句上,大部分的帮助和回答也集中在if语句是否很好,但问题不在那里。

我删除了if语句,并且只是专注于查看是否返回了一些内容,我没有

$result= mysqli_stmt_bind_result($request);错过了论点,当修正后,下一行也错过了其他内容。我已经在那里退出调试。

我已经重写了你的代码并且它有效,我做了什么我已经重新定义了变量的命名,因此它们非常清楚地理解什么是name,称之为username,数据库{{1}称之为usernamedbUser等。

如果您想检查代码是否返回某些内容,请使用dbUsername

最后一点,在制作帖子表单之前,你可以在你的数据库中创建一个虚拟的用户名和密码,并直接在你的代码中注入,只是为了看看每件事是否正常,然后转移到你的表单:

var_dump($someVariable)

我所做的解决方案只是为了演示如何做到而不一定代表最佳逻辑,但是你需要找到正确的逻辑,这完全取决于你的策略。

这是我的建议:

$username = "user1";
$password = "1234";

答案 1 :(得分:0)

始终始终在exit()重定向呼叫后始终放置header。即使在这种情况下,它也可以解决您的问题。

header("location:../../success.php");
exit();

Why?

答案 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个)

现在当然错过了正确的错误报告和所有这些内容,但我认为应该根据您的问题给出基本的想法。