0

我有一个要在 div 中使用的 php 文件:

<?php session_start(); ?>
<?php function loginForm() { ?>
<form method="POST" action="" name="loginForm" id="loginForm" accept-charset='UTF-8'>
    <input type='hidden' name='submit' id='submit' value='1'/>
    User: <input type="text" name="user" id="user" /><br />
    Password: <input type="password" name="passwd" id="passwd" /><br />
    <input type="submit" name="login" id="login" value="Login" />
</form>
<?php } ?>

<?php function logoutForm() { ?>
    <form method="POST" action="" name="logoutForm" id="logoutForm">
        Logout: <input type="submit" value="Log out" name="logout" id="logout" />
    </form>
<?php } ?>

<?php
function loggedUser() {
    if(isset($_SESSION['user']) && isset($_SESSION['passwd'])) {
        return $_SESSION;
    } else {
        return array();
    }
}

function loginLogout() {
    $loggedUser = loggedUser();
    if(!empty($loggedUser)) {
        logoutForm();
    } else {
        loginForm();
    }
    if(isset($_POST['login']) && isset($_POST['user']) && isset($_POST['passwd']) &&
            $_POST['user'] == "admin" && $_POST['passwd'] == "admin") {
        $_SESSION['user'] = $_POST['user'];
        $_SESSION['passwd'] = $_POST['passwd'];
        header('Refresh: 1; url='.$_SERVER['REQUEST_URI']);
    }
    if(isset($_POST['logout']) && isset($_SESSION)) {
        foreach($_SESSION as $k => $v) {
            unset($_SESSION[$k]);
        }
        header('Refresh: 1; url='.$_SERVER['REQUEST_URI']);
    }
}
loginLogout();

?>

而且我在 jquery 和 html 中有代码

<script type="text/javascript">
    $(document).ready(function(){
        $('#logindiv').load('loginLogout.php');
        $('#loginForm, #logoutForm').live('submit', function(e) {
            e.preventDefault();
            $.post('loginLogout.php', $(this).serialize(), function (
                    data, textStatus) {
                $('#logindiv').html(data);
            });
            return false;
        });
    });
</script>

和 div

<div id="logindiv"></div>

如何正确放置代码,登录和注销也可以在 jquery 中使用,而无需刷新整个页面?什么是识别行头的刷新事件('Refresh: 1; url='.$_SERVER['REQUEST_URI']); 在 php 文件中。Widhout div 和 jquery 它运行良好。

谢谢

4

2 回答 2

2

这是一个使用 2 个文件的完整工作示例,允许登录/注销表单动态更新而无需刷新页面。该代码与您的代码非常相似。

form.php的代码

<?php 
session_start(); 

function loginForm($isHidden) { 
    $display = ($isHidden) ? "none" : "block";
    ?>
    <form method="POST" action="" name="loginForm" id="loginForm" accept-charset='UTF-8' style="display: <?php echo $display; ?>;">
        <input type='hidden' name='actionLogin' id='actionLogin' value='1'/>
        User: <input type="text" name="user" id="user" /><br />
        Password: <input type="password" name="passwd" id="passwd" /><br />
        <input type="submit" name="login" id="login" value="Login" />
    </form>
    <?php 
} 

function logoutForm($isHidden) { 
    $display = ($isHidden) ? "none" : "block";
    ?>
    <form method="POST" action="" name="logoutForm" id="logoutForm" style="display: <?php echo $display; ?>;">
        <input type='hidden' name='actionLogout' id='actionLogout' value='1'/>
        Logout: <input type="submit" value="Log out" name="logout" id="logout" />
    </form>
    <?php 
}

function loggedUser() {
    if(isset($_SESSION['user']) && isset($_SESSION['passwd'])) {
        return $_SESSION;
    } else {
        return array();
    }
}
?>

<html>
<head>
    <title>Form</title>

    <script type='text/javascript' src='https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js'></script>

    <script type="text/javascript">
        $(document).ready(function(){
            $('#loginForm, #logoutForm').live('submit', function(e) {
                e.preventDefault();
                $.post('loginLogout.php', $(this).serialize(), function (data, textStatus) {
                    if (data == "true") { //login successful
                        $("#loginForm").hide();
                        $("#logoutForm").show();
                    } else {
                        $("#loginForm").show();
                        $("#logoutForm").hide();
                    }
                });
                return false;
            });
        });
    </script>
</head>
<body>

    <div id="logindiv">
        <?php
        $loggedUser = loggedUser();
        if(!empty($loggedUser)) {
            loginForm(true); //hidden
            logoutForm(false); //not hidden
        } else {
            loginForm(false);
            logoutForm(true);
        }
        ?>
    </div>

</body>
</html>

loginLogout.php的代码

<?php
session_start(); 

if(isset($_POST['actionLogin']) && isset($_POST['user']) && isset($_POST['passwd']) &&
        $_POST['user'] == "admin" && $_POST['passwd'] == "admin") {
    $_SESSION['user'] = $_POST['user'];
    $_SESSION['passwd'] = $_POST['passwd'];
    echo "true"; //successful log in

} else if(isset($_POST['actionLogout']) && isset($_SESSION)) {
    foreach($_SESSION as $k => $v) {
        unset($_SESSION[$k]);
    }
    echo "false"; //successful log out
}
?>
于 2012-05-29T19:59:33.270 回答
0

在打印表单之前更改您的代码以处理表单提交。这可能看起来违反直觉,但除非您首先处理所有输入,否则您打印的 HTML 在准备发送到浏览器时已经过时。

如果您使用 ajax,也不需要刷新标头。

只需像这样更改您的代码:

function loginLogout() {
    if(isset($_POST['login']) && isset($_POST['user']) && isset($_POST['passwd']) &&
            $_POST['user'] == "admin" && $_POST['passwd'] == "admin") {
        $_SESSION['user'] = $_POST['user'];
        $_SESSION['passwd'] = $_POST['passwd'];
    }
    if(isset($_POST['logout']) && isset($_SESSION)) {
        foreach($_SESSION as $k => $v) {
            unset($_SESSION[$k]);
        }
    }
    $loggedUser = loggedUser();
    if(!empty($loggedUser)) {
        logoutForm();
    } else {
        loginForm();
    }
}
于 2012-05-29T20:15:22.500 回答