繁体   English   中英

无法找出我在用这个php条件做错了什么

[英]Can't figure out what I'm doing wrong with this php conditional

我正在尝试使用php做一个非常简单的登录系统。 我目前有两个文件:index.php和verifyCredentials.php

index.php

<!DOCTYPE html>
<html lang="en">
    <head>
        <title>Test Site</title>
    </head>

    <body>
        <h1>Welcome to My Test Homepage!</h1>

        <?php if ($_SESSION['logged_in'] != "true") : ?>
            <form method="post" action="verifyCredentials.php">
                Username: <input type="text" name="username" value=""/><br>
                Password: <input type="password" name="password" value=""/><br>
                <input type="submit" name="submit" value="Submit"/><br>
            </form>
        <?php else : ?>
            <h2>You're logged in! :)</h2>
        <?php endif ?>

        <?php if($_GET['verferr']==1){echo "<b>Login failed: incorrect username or password.</b>";} ?>

    </body>
</html>

verifyCredentials.php

<?php
    $username = $_POST['username'];
    $password = $_POST['password'];

    if($username == "myusername" && $password == "letmein")
    {
        $_SESSION['logged_in'] = "true";
        header("Location: index.php");
        exit;
    }
    else
    {
        $loginfailed_param = "?verferr=1";
        header("Location: index.php" . $loginfailed_param);
        exit;
    }
?>

我已经成功做到了,如果您的用户名/密码不正确(即不等于myusernameletmein ),那么它将重定向到登录页面,并在表单下显示一条错误消息。

我正在尝试这样做,以便当他们确实验证index.php上的表单时,该表单会消失并被一些成功文本替换。 但是,当我键入myusername和letmein时,它只是重定向到登录名而没有错误,并且表单仍然显示。

根据我所做的研究,如果我想在php节点之间插入html,则必须使用index.php文件中所示的if-else php结构,但是这样做是否错误?

有人可以告诉我我在做什么错吗?

如果要使用会话存储数据,请确保您具有session_start(); 在您调用的每个页面的顶部。 否则,它将不会读入会话标识符,并会假定您要启动一个新的会话标识符。

因此,在index.phpverifyCredentials.php的顶部添加命令。 但是请确保将其作为页面上的第一行代码。 然后,您需要将其添加到直接请求的任何页面中。

例如,如果您具有index.php并且其中包括form.phpnav.php ,则仅index.php将需要session_start() ,但是如果您具有到form_processing.php的链接,则form_processing.php将需要也有session_start()

PHP会话要求您在使用$_SESSION的每个页面的顶部调用session_start() 我在您的示例中看不到它。

噢,我准备好了,您接受了。 :(

这是您需要使用的。 无论如何..(此外,您应该使用jQuery以获得更好的过渡效果,请参见下文)

    <?php

    session_start();

    $args = array(
        'username'   => FILTER_SANITIZE_SPECIAL_CHARS,
        'password'    => FILTER_SANITIZE_SPECIAL_CHARS);

    $post = filter_input_array(INPUT_POST, $args);

    if ($post) {

        $username = $post['username'];
        $password = $post['password'];

        if($username == "myusername" && $password == "letmein") {

            $_SESSION['logged_in'] = true;
            header("Location: index.php");
            exit;

        } else {

            $loginfailed_param = "?verferr=1";
            header("Location: index.php" . $loginfailed_param);
            exit;
        }
    }

    if ($_SESSION['logged_in'] === true) {

        //User has logged in

    }

    ?>

使用jQuery

的HTML

<div id="loginForm">

    <form id="myLoginForm">
        <input id="username">
        <input id="password">
        <button id="formSubmit" name="formSubmit">Submit Form</button>
        <input style="display: none;" type="text" id="realSubmit" name="realSubmit" value="hidden">
    </form>

</div>
<div id="successPage">

   Thank you for loggging in...

</div>
<div id="loginHome">
    Login Homepage
    Welcome <span id="displayUsername"></span>
</div>

jQuery的

(function($){
    $(function(){

        $("#formSubmit").on('click', function() {



            var username= $("#username").val();
            var password = $("#password").val();
            var data = {username: username, password: password};
            delegateAjax('../myAjax.php', data, 'POST');

        });
    });

function delegateAjax(url, data, responseType, dataType, callback) {

    function successHandler(data) {
        console.log("Ajax Success");
        var responseData = $.parseJSON(data);
        if (responseData.status === 'Success') {

            $("#loginForm").fadeOut(1500, function() {
                 $("#successPage").fadeIn(1500, function() {
                     $(this).fadeOut(1500, function() {

                         $("#displayUsername").html(responseData.username);
                         $("#loginHome").fadeIn(1500);
                     });
                 });
            });
        }
    };

    function failureHandler(xhr, status, error) {
        console.log("Ajax Error");
        console.log(status);
        console.log(error);
        console.dir(xhr);
    };

    function handler404(xhr, status, error) {
        console.log("404 Error");
        console.log(status);
        console.log(error);
        console.dir(xhr);
    };

    function handler500(xhr, status, error) {
        console.log("500 Error");
        console.log(status);
        console.log(error);
        console.dir(xhr); 
    };

    url = typeof url !== 'undefined' ? url : 'js/ajaxDefault.php';
    data = typeof data !== 'undefined' ? data : new Object();
    responseType = typeof responseType !== 'undefined' ? responseType : 'GET';
    dataType = typeof dataType !== 'undefined' ? dataType : 'json';
    callback = typeof callback !== 'undefined' ? callback : 'callback';

    var jqxhr = $.ajax({url: url, type: responseType, cache: true, data: data, dataType: dataType, jsonp: callback, 
                        statusCode: { 404: handler404, 500: handler500 }});
    jqxhr.done(successHandler);
    jqxhr.fail(failureHandler);
};

})(jQuery);

的PHP

myAjax.php

<?php

define('IS_AJAX', isset($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest');
if (!IS_AJAX) {
    $response['status'] = 'Error';
    $response['message'] = 'Same Origin Policy Error';
    echo json_encode($response);
    exit;
}
$pos = strpos($_SERVER['HTTP_REFERER'], getenv('HTTP_HOST'));
if ($pos === false) {
    $response['status'] = 'Error';
    $response['message'] = 'Same Origin Policy Error';
    echo json_encode($response);
    exit;
}

function validUser($data) {
    //connect to db and validate user
    $dbi = new mysqliObject();
    $params['string'] = $data['username'];
    $dbi->newSelect($params);
    $table = 'users';
    $select = '*';
    $where = '`username` = ? LIMIT 1';
    if ($dbi->exec($table, $select, $where)) {
        $result = $dbi->result[0];
        return passwordVerify($result['password']); //true/false
    } else {

        //for debugging
        //echo 'Last Error: '.$dbi->get('lastError').'<br>'."\r\n";
        //echo 'Last Query: '.$dbi->get('lastQuery').'<br>'."\r\n";
        return false;
    }
}

$args = array(
    'username'   => FILTER_SANITIZE_SPECIAL_CHARS,
    'password'    => FILTER_SANITIZE_SPECIAL_CHARS);

$post = filter_input_array(INPUT_POST, $args);

if ($post) {



    if (validUser($post)) {


        $response['status'] = 'success';
        $response['username'] = $username;

        echo json_encode($response);
        exit;

    } else {

        $response['status'] = 'Failed';
        $response['message'] = 'Username/Password Invalid';
        echo json_encode($response);
        exit;
    }
}

$response['status'] = 'Error';
$response['message'] = 'POST Data Invalid';
echo json_encode($response);
exit;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM