简体   繁体   English

按提交按钮后,在登录面板上刷新页面

[英]Page refresh on Login Panel after pressing Submit button

I'm new when it comes to PHP and I would like some help regarding an open source system that I've found on the internet, which I adapted for the project I'm currently working on. 关于PHP,我是新手,我想在互联网上找到一个开源系统方面的帮助,我对该软件进行了改编,以适应当前正在进行的项目。

First things first, the login was on a different webpage altogether, but I've adapted it to fit into index.php . 首先,登录名完全位于另一个网页上,但我对其进行了调整以适合index.php The login system works really well, but I have an issue. 登录系统确实运行良好,但是我遇到了问题。 After I log in, the webpage doesn't refresh itself, and the login form disappears. 登录后,网页不会自动刷新,并且登录表单也消失了。 If I refresh the webpage, the website shows that I'm logged in as it should. 如果刷新网页,则该网站会显示我已登录。 Is there any way I can fix this? 有什么办法可以解决这个问题?

My code is: 我的代码是:

<div class="content">
    <?php
            //We display a welcome message, if the user is logged, we display it username
            ?>
        Hello
        <?php if(isset($_SESSION['username'])){echo ' '.htmlentities($_SESSION['username'], ENT_QUOTES, 'UTF-8');} ?>,
            <br /> Welcome on our website.
            <br /> You can <a href="users.php">see the list of users</a>.
            <br />
            <br />
            <?php
            //If the user is logged, we display links to edit his infos, to see his pms and to log out
            if(isset($_SESSION['username']))
            {
            //We count the number of new messages the user has
            $nb_new_pm = mysql_fetch_array(mysql_query('select count(*) as nb_new_pm from pm where ((user1="'.$_SESSION['userid'].'" and user1read="no") or (user2="'.$_SESSION['userid'].'" and user2read="no")) and id2="1"'));
            //The number of new messages is in the variable $nb_new_pm
            $nb_new_pm = $nb_new_pm['nb_new_pm'];

            // Check if current user is the admin
                if($_SESSION['userid']==1)
                { include('indexp.php');}
                else { echo'nu merge';}
            //We display the links
            ?>
                <a href="edit_infos.php">Edit my personnal informations</a>
                <br />
                <a href="list_pm.php">My personnal messages(<?php echo $nb_new_pm; ?> unread)</a>
                <br />
                <a href="logout.php">Logout</a>
                <?php
            }
            else
            {
            //Otherwise, we display a link to log in and to Sign up
            ?>
                    <a href="sign_up.php">Sign up</a>
                    <br />
                    <button data-toggle="collapse" data-target="#login">Log in</button>
                    <div id="login" class="collapse">
                        <?php
                    $ousername = '';
                    //We check if the form has been sent
                    if(isset($_POST['username'], $_POST['password']))
                    {
                        //We remove slashes depending on the configuration
                        if(get_magic_quotes_gpc())
                        {
                            $ousername = stripslashes($_POST['username']);
                            $username = mysql_real_escape_string(stripslashes($_POST['username']));
                            $password = stripslashes($_POST['password']);
                        }
                        else
                        {
                            $username = mysql_real_escape_string($_POST['username']);
                            $password = $_POST['password'];
                        }
                        //We get the password of the user
                        $req = mysql_query('select password,id from users where username="'.$username.'"');
                        $dn = mysql_fetch_array($req);
                        //We compare the submited password and the real one, and we check if the user exists
                        if($dn['password']==$password and mysql_num_rows($req)>0)
                        {
                            //If the password is good, we dont show the form
                            $form = false;
                            //We save the user name in the session username and the user Id in the session userid
                            $_SESSION['username'] = $_POST['username'];
                            $_SESSION['userid'] = $dn['id'];
                }
                else
                {
                    //Otherwise, we say the password is incorrect.
                    $form = true;
                    $message = 'The username or password is incorrect. Please try again!';
                }
                }
                else
                {
                $form = true;
                }
                if($form)
                {
                //We display a message if necessary
                if(isset($message))
                {
                echo '<div class="message">'.$message.'</div>';
                }
                //We display the form
                ?>
                            <div class="content">
                                <form action="success.php" method="post">
                                    Please type your IDs to log in:
                                    <br />
                                    <div class="center">
                                        <label for="username">Username</label>
                                        <input type="text" name="username" id="username" value="<?php echo htmlentities($ousername, ENT_QUOTES, 'UTF-8'); ?>" />
                                        <br />
                                        <label for="password">Password</label>
                                        <input type="password" name="password" id="password" />
                                        <br />
                                        <input type="submit" value="Log in" />
                                    </div>
                                </form>
                            </div>
                            <?php
                }
                ?>
                    </div>
                    <?php
            }
            ?>
</div>         

I tried the following methods: 我尝试了以下方法:

  • I set when the user logs on, it gets redirected to a page named success.php where a success message appears and a back button. 我设置了用户登录时的名称,它将重定向到名为success.php的页面,其中显示成功消息和后退按钮。

  • The problems is: when the users press the back button (index.php), the system doesn't recognize that users is logged in and asks him to log back in again. 问题是:当用户按下后退按钮(index.php)时,系统无法识别出用户已登录,并要求他再次登录。 And that's it, an infinite loop in which you can't log in. 就是这样,您无法登录到一个无限循环中。

  • I tried a lot of tactics to reload the page twice, but it seems very ineffective. 我尝试了很多策略来重新加载页面两次,但似乎效果很差。

You need to call session_start() at the beginning of every PHP page you need sessions in along with saving them. 您需要在需要会话的每个PHP页面的开始处调用session_start()并保存它们。 Also, I really recommend that you place the login logic in a separate PHP file for better readability and to be able to know what is missing easily. 另外,我真的建议您将登录逻辑放在单独的PHP文件中,以提高可读性,并能够轻松知道丢失的内容。

make use of PHP session and try to store the username password in the session and then redirect. 利用PHP会话,并尝试在会话中存储用户名密码,然后重定向。

following is small example oh how php sessions work 以下是一个小示例,哦,php会话如何工作

<?php
   ob_start();
   session_start();
?>

<?
   // error_reporting(E_ALL);
   // ini_set("display_errors", 1);
?>

<html lang = "en">

   <head>
      <title>Tutorialspoint.com</title>
      <link href = "css/bootstrap.min.css" rel = "stylesheet">

      <style>
         body {
            padding-top: 40px;
            padding-bottom: 40px;
            background-color: #ADABAB;
         }

         .form-signin {
            max-width: 330px;
            padding: 15px;
            margin: 0 auto;
            color: #017572;
         }

         .form-signin .form-signin-heading,
         .form-signin .checkbox {
            margin-bottom: 10px;
         }

         .form-signin .checkbox {
            font-weight: normal;
         }

         .form-signin .form-control {
            position: relative;
            height: auto;
            -webkit-box-sizing: border-box;
            -moz-box-sizing: border-box;
            box-sizing: border-box;
            padding: 10px;
            font-size: 16px;
         }

         .form-signin .form-control:focus {
            z-index: 2;
         }

         .form-signin input[type="email"] {
            margin-bottom: -1px;
            border-bottom-right-radius: 0;
            border-bottom-left-radius: 0;
            border-color:#017572;
         }

         .form-signin input[type="password"] {
            margin-bottom: 10px;
            border-top-left-radius: 0;
            border-top-right-radius: 0;
            border-color:#017572;
         }

         h2{
            text-align: center;
            color: #017572;
         }
      </style>

   </head>

   <body>

      <h2>Enter Username and Password</h2> 
      <div class = "container form-signin">

         <?php
            $msg = '';

            if (isset($_POST['login']) && !empty($_POST['username']) 
               && !empty($_POST['password'])) {

               if ($_POST['username'] == 'tutorialspoint' && 
                  $_POST['password'] == '1234') {
                  $_SESSION['valid'] = true;
                  $_SESSION['timeout'] = time();
                  $_SESSION['username'] = 'tutorialspoint';

                  echo 'You have entered valid use name and password';
               }else {
                  $msg = 'Wrong username or password';
               }
            }
         ?>
      </div> <!-- /container -->

      <div class = "container">

         <form class = "form-signin" role = "form" 
            action = "<?php echo htmlspecialchars($_SERVER['PHP_SELF']); 
            ?>" method = "post">
            <h4 class = "form-signin-heading"><?php echo $msg; ?></h4>
            <input type = "text" class = "form-control" 
               name = "username" placeholder = "username = tutorialspoint" 
               required autofocus></br>
            <input type = "password" class = "form-control"
               name = "password" placeholder = "password = 1234" required>
            <button class = "btn btn-lg btn-primary btn-block" type = "submit" 
               name = "login">Login</button>
         </form>

         Click here to clean <a href = "logout.php" tite = "Logout">Session.

      </div> 

   </body>
</html>

Login.php 的login.php

It will erase the session data. 它将删除会话数据。

<?php
   session_start();
   unset($_SESSION["username"]);
   unset($_SESSION["password"]);

   echo 'You have cleaned session';
   header('Refresh: 2; URL = login.php');
?>

Logout.php Logout.php

You have checked the session values before the submit code, because of that it was unable to check the sesssion variable on submit. 您已经在提交代码之前检查了会话值,因为它无法在提交时检查sesssion变量。

I have just put your submit code block above the session checking, so that it comes in effect instant. 我只是将您的提交代码块放在会话检查之上,因此它立即生效。

And remember to have session_start(); 并记得有session_start(); on every page. 在每一页上。

<div class="content">
    <?php
    session_start();
    $ousername = '';
    //We check if the form has been sent
    if (isset($_POST['username'], $_POST['password'])) {
        //We remove slashes depending on the configuration
        if (get_magic_quotes_gpc()) {
            $ousername = stripslashes($_POST['username']);
            $username = mysql_real_escape_string(stripslashes($_POST['username']));
            $password = stripslashes($_POST['password']);
        } else {
            $username = mysql_real_escape_string($_POST['username']);
            $password = $_POST['password'];
        }
        //We get the password of the user
        $req = mysql_query('select password,id from users where username="' . $username . '"');
        $dn = mysql_fetch_array($req);
        //We compare the submited password and the real one, and we check if the user exists
        if ($dn['password'] == $password and mysql_num_rows($req) > 0) {
            //If the password is good, we dont show the form
            $form = false;
            //We save the user name in the session username and the user Id in the session userid
            $_SESSION['username'] = $_POST['username'];
            $_SESSION['userid'] = $dn['id'];
        } else {
            //Otherwise, we say the password is incorrect.
            $form = true;
            $message = 'The username or password is incorrect. Please try again!';
        }
    } else {
        $form = true;
    }
    //We display a welcome message, if the user is logged, we display it username
    ?>
    Hello<?php if (isset($_SESSION['username'])) {
        echo ' ' . htmlentities($_SESSION['username'], ENT_QUOTES, 'UTF-8');
    } ?>,<br/>
    Welcome on our website.<br/>
    You can <a href="users.php">see the list of users</a>.<br/><br/>
    <?php
    //If the user is logged, we display links to edit his infos, to see his pms and to log out
    if (isset($_SESSION['username'])) {
        //We count the number of new messages the user has
        $nb_new_pm = mysql_fetch_array(mysql_query('select count(*) as nb_new_pm from pm where ((user1="' . $_SESSION['userid'] . '" and user1read="no") or (user2="' . $_SESSION['userid'] . '" and user2read="no")) and id2="1"'));
        //The number of new messages is in the variable $nb_new_pm
        $nb_new_pm = $nb_new_pm['nb_new_pm'];

        // Check if current user is the admin
        if ($_SESSION['userid'] == 1) {
            include('indexp.php');
        } else {
            echo 'nu merge';
        }
        //We display the links
        ?>
        <a href="edit_infos.php">Edit my personnal informations</a><br/>
        <a href="list_pm.php">My personnal messages(<?php echo $nb_new_pm; ?> unread)</a><br/>
        <a href="logout.php">Logout</a>
        <?php
    } else {
        //Otherwise, we display a link to log in and to Sign up
        ?>
        <a href="sign_up.php">Sign up</a><br/>
        <button data-toggle="collapse" data-target="#login">Log in</button>
        <div id="login" class="collapse">
            <?php
            if ($form) {
                //We display a message if necessary
                if (isset($message)) {
                    echo '<div class="message">' . $message . '</div>';
                }
                //We display the form
                ?>
                <div class="content">
                    <form action="success.php" method="post">
                        Please type your IDs to log in:<br/>
                        <div class="center">
                            <label for="username">Username</label><input type="text" name="username" id="username"
                                                                         value="<?php echo htmlentities($ousername, ENT_QUOTES, 'UTF-8'); ?>"/><br/>
                            <label for="password">Password</label><input type="password" name="password" id="password"/><br/>
                            <input type="submit" value="Log in"/>
                        </div>
                    </form>
                </div>
                <?php
            }
            ?>
        </div>
        <?php
    }
    ?>
</div>

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

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