2012-05-15 27 views
3

它在我的登录脚本中正常工作。我在我的div(id = login_reply)中获得正确的响应,会话开始。但是,无论何时刷新页面,login_reply都消失了。我如何能够保持login_reply?谢谢!使页面刷新时php响应保持可见

这里是PHP:

if (isset($_POST['username'], $_POST['password'])) 
{ 
    $username = mysql_real_escape_string($_POST['username']); 
    $password = mysql_real_escape_string(md5($_POST['password'])); 

    $check = mysql_query("SELECT * FROM `userbase` WHERE `user_name` = '$username'"); 
    if (mysql_num_rows($check) > 0) 
    { 
     while ($row = mysql_fetch_assoc($check)) 
     { 
      $user_id = $row['user_id']; 
      $user_name = $row['user_name']; 
      $user_email = $row['user_email']; 
      $user_password = $row['user_password']; 

      if ($password == $user_password) 
      { 
       $_SESSION['user_id'] = $user_id; 
       if (isset($_SESSION['user_id']) && $_SESSION['user_id'] != '') 
        echo "Welcome back '$user_name'!"; 
       else 
       { 
        echo 'no'; 
       } 

      } 
      else 
       echo 'no'; 
     } 
    } 
    else 
     echo 'no'; 
} 

这里是jQuery的

$(document).ready(function() 
{ 

$('#login').click(function() 
{ 
    var username = $('#username').val(); 
    var password = $('#password').val(); 

    $.ajax(
    { 
     type: 'POST', 
     url: 'php/login.php', 
     data: 'username=' +username + '&password=' + password, 
     success: function(data) 
     { 
      if (data != 'no') 
      { 
       $('#logform').slideUp(function() 
       { 
        $('#login_reply').html(data).css('color', 'white'); 
       }); 
      } 
      else      
       $('#login_reply').html('Invalid username or password').css('color', 'red'); 
     } 
    }); 
    return false; 
}); 
}); 
+2

不是一个答案,但你真的应该考虑[下探古'mysql_ *'功能(http://chat.stackoverflow.com/transcript/message/3656047 #3656047)。 – PeeHaa

回答

3

问题是,JS只是客户端脚本语言 - 它只处理客户端浏览器。

如果您想使用AJAX登录,没关系,但您必须将登录用户的值存储到会话(或cookie)中。然后在每个页面加载您将检查该会话或cookie是否设置和存在,如果他们这样做,您将登录后记下与jQuery相对应的HTML ...

换句话说,这里是什么你会做:

  1. 页面加载 - 用户
  2. 用户没有登录填写登录凭据并点击“登录”
  3. 您检查用户是否存在,如果他这样做,为您节省$_SESSION['username'](用于例如)
  4. 在AJAX中填写$('#login_reply')
  5. 用户点击某个环节,您的网站
  6. 内您检查是否有一个值(或索引设置)在$_SESSION['username']
  7. 如果它是由PHP你将填补#login_reply格,如果是不,你会显示登录表单...

希望这有助于...

EDIT1:你也应该以一种没有JS工作实现登录功能(禁用)在客户端上owser如此正常POST应该被计数...

EDIT2:我也想指出一些常见的编程错误...

这里是你的代码添加了我的意见:

if (isset($_POST['username'], $_POST['password'])) 
{ // <-- This is a .NET style of writing the brackets that I don't like much and I guess PHP don't like .NET either :-) 
    $username = mysql_real_escape_string($_POST['username']); 
    $password = mysql_real_escape_string(md5($_POST['password'])); 

    $check = mysql_query("SELECT * FROM `userbase` WHERE `user_name` = '$username'"); // <-- mysql_* method calls should be replaced by PDO or at least mysqli 
    // Also the query could be improved 
    if (mysql_num_rows($check) > 0) 
    { 
     while ($row = mysql_fetch_assoc($check)) // <-- why calling while when You expect ONLY one user to be found? 
     { 
      $user_id = $row['user_id']; 
      $user_name = $row['user_name']; 
      $user_email = $row['user_email']; 
      $user_password = $row['user_password']; // <-- What are these last 4 lines good for? This is useless... 

      if ($password == $user_password) // <-- this condition SHOULD be within the SQL query... 
      { 
       $_SESSION['user_id'] = $user_id; 
       if (isset($_SESSION['user_id']) && $_SESSION['user_id'] != '') // <-- this condition is useless as You have just set the session variable... 
       // ALSO, if You use brackets with else it is good to use brackets also with if 
        echo "Welcome back '$user_name'!"; 
       else 
       { 
        echo 'no'; 
       } 

      } 
      else 
       echo 'no'; 
     } 
    } 
    else 
     echo 'no'; 
} 

这里是我重写代码(仍在使用mysql_ *,感到抱歉):

if (isset($_POST['username'], $_POST['password'])) { 
    $username = mysql_real_escape_string($_POST['username']); 
    $password = mysql_real_escape_string(md5($_POST['password'])); 

    $check = mysql_query("SELECT * FROM `userbase` WHERE `user_name` = '{$username}' AND `user_password` = '{$password}' LIMIT 1"); // <-- We check whether a user with given username AND password exists and we ONLY want to return ONE record if found... 
    if ($check !== false) { 
     $row = mysql_fetch_assoc($check); 

     $_SESSION['user_id'] = $row['user_id']; 

     echo "Welcome back '{$row['user_name']}'!"; 
    } else { 
     echo 'no'; 
    } 
} else 
    echo 'no'; 
} 
+0

谢谢shadyyx!我把那个短暂的脚本放到了那里,并保存了会话数据,所以现在一切正常。 TY。 – Hobby99

+0

欢迎您! – shadyyx

1

你需要在一些地方保存在服务器上或者是在您的会话登录回复数据; javascript是一种客户端语言,因此任何取得的值都不会在刷新之间保持不变。

我会建议你存储结果,然后检查它是否存在,而用php生成页面;如果是这样,填写数据..等

2

最简单的解决方法是使用Cookies:

在PHP方面您声明并删除Cookie:

<?php 
if (!isset($_COOKIE['new_one'])) { 
    setcookie('new_one', "ole", 0, "/"); 
    echo "logged in"; 
} 
else { 
    setcookie('new_one', null); 
    echo "logged out"; 
} 
?> 

而jQuery的客户端:

$(document).ready(function() { 
    if ($.cookie("new_one") === "ole") { 
    $('#login_reply').html("Show msg only when the server sets the cookie."); 
    } 
}); 
+0

这真的很不错,但什么时候根本没有JS(在浏览器中禁用)? – shadyyx

+0

@shadyyx以及这只是弹出窗口通知你在页面重新加载之前做了一些事情,所以我认为它有次要优先级。提问者需要jQuery的解决方案。是的,你的解决方案更好;) –