无法使登录页面工作

时间:2011-11-10 05:36:51

标签: php mysql

我有这个发布到自己的php页面然后检查天气是否登录某人。我遇到的问题是,如果它登录...然后它仍然显示用户名和密码文本框..但如果我刷新它们就会消失,现在由于会话而出现欢迎的事情。

我想要的是一旦点击提交并将其记录下来,立即不显示文本框(用户名,密码)并显示欢迎消息。现在我必须刷新。

请注意我是PHP新手,非常感谢任何明智的建议。

    <?php 

        echo "<form method=\"post\" action=\"index.php?form_type=$page_vals\">";
        echo "<body>";

        //Start session
         session_start();

       //Check whether the session variable SESS_MEMBER_ID is present or not
       if(!isset($_SESSION['SESS_MEMBER_ID']) || (trim($_SESSION['SESS_MEMBER_ID']) == '')) {

         extract($_POST);

       $username = "";
       $password = "";
       $userrole = "";
       $userid ="";

       $login_query = "SELECT user_id, user_role, user_username FROM users WHERE user_username = '$_POST[logInUsername]' AND user_password = '$_POST[logInPassword]'";

        if(!($database = mysql_connect("localhost","root","")))
                die("<p>Could not connect to database</p></div></div>
                                 </body>
                                </html>");

            if(!mysql_select_db("mydatabase", $database))
                die("<p>Could not open my databases database</p></div>
               </div>
                                 </body>
                                </html>");

                if(!($result = mysql_query($login_query, $database)))
                {
                    print("Could not execute query!<br/>");
                    die(mysql_error()."</div>
               </div>            
                                 </body>
                                </html>");
                }


            if (mysql_num_rows($result) == 0) {
               print("Please verify your login information<br/>");
                }


            while ($row = mysql_fetch_assoc($result)) {
                  $username = $row["user_username"];
                  $userrole = $row["user_role"];
                  $userid = $row["user_id"];
              }

            echo "Hello - '$username'";
            mysql_close($database);

            session_regenerate_id();

            $_SESSION['SESS_MEMBER_ID'] = $userid;
            $_SESSION['SESS_NAME'] = $username;

            //Write session to disc
            session_write_close();

                   echo '<div id="login" class="login">
        <label for="login">User Name</label>
        <input type="text" name="logInUsername" />
        <label for="Password">Password</label>
        <input type="password" name="logInPassword" />
        <input type="submit" value="Submit" class="button" />
        </div>';
        }
   else 
   {
    $sessionName = $_SESSION['SESS_NAME'];
     echo '<div id="login" class="login">
        <label for="welcome">Welcome '. $sessionName.'!</label>
        </div>';
   }

    ?>

3 个答案:

答案 0 :(得分:1)

所以,不要处理此处的任何安全或样式问题......

现在您正在查看会话是否已设置。如果不是,则处理登录。处理完登录后,您将显示表单字段。

你应该检查3个州......

有人已登录吗? 你需要处理登录吗? 如果这两者都不显示正常形式......

您可以使用会话字段的现有isset来执行此操作。

然后,如果未设置,请检查是否设置了帖子字段...如果已设置,则处理登录。

否则,请显示基本登录表单。

编辑:

完整的代码示例(抱歉可怕的格式化,主要是剪切和粘贴......:

 <?php 

        echo "<form method=\"post\" action=\"index.php?form_type=$page_vals\">";
        echo "<body>";

        //Start session
         session_start();

       //Check whether the session variable SESS_MEMBER_ID is present or not
       if(isset($_SESSION['SESS_MEMBER_ID']) || (trim($_SESSION['SESS_MEMBER_ID']) != '')) {
            $sessionName = $_SESSION['SESS_NAME'];
               echo '<div id="login" class="login">
             <label for="welcome">Welcome '. $sessionName.'!</label>
             </div>';

        }
    else if ($_POST[logInPassword] != null && $_POST[logInUsername] != null)
    {
          extract($_POST);

       $username = "";
       $password = "";
       $userrole = "";
       $userid ="";

       $login_query = "SELECT user_id, user_role, user_username FROM users WHERE user_username = '$_POST[logInUsername]' AND user_password = '$_POST[logInPassword]'";

        if(!($database = mysql_connect("localhost","root","")))
                die("<p>Could not connect to database</p></div></div>
                                 </body>
                                </html>");

            if(!mysql_select_db("mydatabase", $database))
                die("<p>Could not open my databases database</p></div>
               </div>
                                 </body>
                                </html>");

                if(!($result = mysql_query($login_query, $database)))
                {
                    print("Could not execute query!<br/>");
                    die(mysql_error()."</div>
               </div>            
                                 </body>
                                </html>");
                }


            if (mysql_num_rows($result) == 0) {
               print("Please verify your login information<br/>");
                }


            while ($row = mysql_fetch_assoc($result)) {
                  $username = $row["user_username"];
                  $userrole = $row["user_role"];
                  $userid = $row["user_id"];
              }

            echo "Hello - '$username'";
            mysql_close($database);

            session_regenerate_id();

            $_SESSION['SESS_MEMBER_ID'] = $userid;
            $_SESSION['SESS_NAME'] = $username;

            //Write session to disc
            session_write_close();

            $sessionName = $_SESSION['SESS_NAME'];
               echo '<div id="login" class="login">
             <label for="welcome">Welcome '. $sessionName.'!</label>
             </div>';


    }
   else 
   {

        echo '<div id="login" class="login">
        <label for="login">User Name</label>
        <input type="text" name="logInUsername" />
        <label for="Password">Password</label>
        <input type="password" name="logInPassword" />
        <input type="submit" value="Submit" class="button" />
        </div>';
   }

    ?>
祝你好运!

答案 1 :(得分:1)

这里的问题只是你的代码没有按顺序排列。我已经纠正了现在试试。

<?php 
   session_start();

    echo "<body>";

    //Start session
  //print_r($_SESSION);exit;

   //Check whether the session variable SESS_MEMBER_ID is present or not

     extract($_POST);

   $username = "";
   $password = "";
   $userrole = "";
   $userid ="";
if(isset($_POST))
{
   $login_query = "SELECT reg_id, role_id, f_name FROM registration WHERE f_name = '$_POST[logInUsername]' AND password = '$_POST[logInPassword]'";

    if(!($database = mysql_connect("sunlinux","pukhraj","pukhraj123")))
            die("<p>Could not connect to database</p></div></div>
                             </body>
                            </html>");

        if(!mysql_select_db("testbaj", $database))
            die("<p>Could not open my databases database</p></div>
           </div>
                             </body>
                            </html>");

            if(!($result = mysql_query($login_query, $database)))
            {
                print("Could not execute query!<br/>");
                die(mysql_error()."</div>
           </div>            
                             </body>
                            </html>");
            }


        if (mysql_num_rows($result) == 0) {
           print("Please verify your login information<br/>");
            }


        while ($row = mysql_fetch_assoc($result)) {
              $username = $row["f_name"];
              $userrole = $row["role"];
              $userid = $row["reg_id"];
          }

         $_SESSION['SESS_MEMBER_ID'] = $userid;
        $_SESSION['SESS_NAME'] = $username;
   }
   if(!isset($_SESSION['SESS_MEMBER_ID']) || (trim($_SESSION['SESS_MEMBER_ID']) == '')) {

        echo "Hello - '$username'";
        mysql_close($database);

        session_regenerate_id();



        //Write session to disc
        session_write_close();

        echo "<form method=\"post\" ><div id=\"login\" class=\"login\">
        <label for=\"login\">User Name</label>
        <input type=\"text\" name=\"logInUsername\" />
        <label for=\"Password\">Password</label>
        <input type=\"password\" name=\"logInPassword\" />
        <input type=\"submit\" value=\"Submit\" class=\"button\" />
        </div>";
        }
   else 
   {
    $sessionName = $_SESSION['SESS_NAME'];
     echo "<div id=\"login\" class=\"login\">
        <label for=\"welcome\">Welcome '$sessionName' !</label>
        </div>";
   }

?>

小变化:

  1. 只需在适当的地方填写表格标签即可。
  2. 切勿在发布后和发布之前混合代码。
  3. 这里所有数据库的东西都应该在提交后执行,所以我把它们包含在条件中if(isset($ _ POST))
  4. 由于代码的非线性,它在发布数据后再刷新一次后创建会话。现在纠正了。
  5. 消息的

    进行以下更改:

    1. 提供名称以提交按钮<input type=\"submit\" name=\"submit\" value=\"Submit\" class=\"button\" />

    2. 首先使用if(isset($_POST['submit']))

    3. 替换if条件

答案 2 :(得分:0)

你的逻辑需要重新考虑。这样的事怎么样? (伪代码)

if( user is NOT logged in) // Check via session
{
    $errors = array();
    if( user submitted the form and is trying to log in) // Can be checked with a POST'd variable
    {
        // Set the session correctly here, query DB, etc.
        // If there are any errors, add them to the $error array
    }

    if( !empty( $errors) || form was not submitted)
    {
        // Print the form and any errors (like invalid username / password combo)
    }
    exit; // Stop here
}

// Print welcome message here (since we know if we get here, the user is logged in)