Обновление страницы на панели входа после нажатия кнопки «Отправить» - PullRequest
0 голосов
/ 20 февраля 2019

Я новичок, когда дело доходит до PHP, и мне нужна помощь в отношении системы с открытым исходным кодом, которую я нашел в интернете, которую я адаптировал для проекта, над которым я сейчас работаю.

Перво-наперво, логин был вообще на другой веб-странице, но я адаптировал его для соответствия index.php .Система входа работает очень хорошо, но у меня есть проблема.После того, как я вхожу, веб-страница не обновляется сама, и форма входа исчезает.Если я обновлю веб-страницу, веб-сайт покажет, что я вошел в систему как следует.Можно ли как-нибудь это исправить?

Мой код:

<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>         

Я попробовал следующие методы:

  • Я установил, когдапользователь входит в систему, он перенаправляется на страницу с именем success.php , где появляется сообщение об успешном завершении и кнопка возврата.

  • Проблема заключается в том, что, когда пользователи нажимают кнопку «Назад» (index.php), система не распознает, что пользователи вошли в систему, и просит его снова войти в систему.И это все, бесконечный цикл, в который вы не можете войти.

  • Я перепробовал много тактик, чтобы дважды перезагрузить страницу, но это кажется очень неэффективным.

Ответы [ 3 ]

0 голосов
/ 20 февраля 2019

используйте сеанс PHP и попытайтесь сохранить пароль имени пользователя в сеансе, а затем перенаправить.

Ниже приведен небольшой пример того, как работают 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

Это удалит данные сеанса.

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

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

Logout.php

0 голосов
/ 20 февраля 2019

Вы проверили значения сеанса перед кодом отправки, потому что он не смог проверить переменную sesssion при отправке.

Я только что поместил ваш блок кода отправки выше проверки сеанса, чтобы онвступает в силу мгновенно.

И помните, что session_start(); на каждой странице.

<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>
0 голосов
/ 20 февраля 2019

Вам нужно вызывать session_start() в начале каждой PHP-страницы, на которой вам нужны сеансы, и сохранять их.Кроме того, я настоятельно рекомендую вам поместить логику входа в отдельный файл PHP для лучшей читабельности и возможности легко узнать, чего не хватает.

...