2013-03-12 90 views
2

我想使用ajax來添加一個div來顯示錯誤消息。但不是每次都會得到空的正確錯誤消息。無效是Ajax從php獲取值?

<?php echo json_encode($_SESSION['msg']['login-err']); ?>; 

我該如何解決這個問題?爲什麼它顯示爲空?

的JavaScript:

  $(document).ready(function(){ 
      $("#open").click(function(){ 
       $("#register").fadeIn(500); 
      }); 
      $("#close").click(function(){ 
       $("#register").fadeOut(500); 
      }); 
      $("#log").click(function(){ 
       username=$("#username").val(); 
       password=$("#password").val(); 
       submit=$("#log").val(); 
       $.ajax({ 
        type: "POST", 
        url: "", 
        data: "submit="+submit+"&username="+username+"&password="+password, 
        success: function(html) { 
         if(html==true) { 

         } 
         else { 
          $("#error-log").remove(); 
          var error_msg = <?php echo json_encode($_SESSION['msg']['login-err']); ?>; 
          $("#s-log").append('<div id="error-log" class="err welcome dismissible">'+error_msg+'</div>'); 
          <?php unset($_SESSION['msg']['login-err']); ?> 
         } 
        } 
       }); 
       return false; 
      }); 

members.php:

<?php if(!defined('INCLUDE_CHECK')) header("Location: ../index.php"); ?> 
<?php 

require 'connect.php'; 
require 'functions.php'; 
// Those two files can be included only if INCLUDE_CHECK is defined 


session_name('Login'); 
// Starting the session 

session_set_cookie_params(7*24*60*60); 
// Making the cookie live for 1 week 

session_start(); 

if($_SESSION['id'] && !isset($_COOKIE['FRCteam3482Remember']) && !$_SESSION['rememberMe']) 
{ 
    // If you are logged in, but you don't have the FRCteam3482Remember cookie (browser restart) 
    // and you have not checked the rememberMe checkbox: 

    $_SESSION = array(); 
    session_destroy(); 

    // Destroy the session 
} 


if(isset($_GET['logoff'])) 
{ 
    $_SESSION = array(); 
    session_destroy(); 

    header("Location: ../../index.php"); 
    exit; 
} 

if($_POST['submit']=='Login') 
{ 
// Checking whether the Login form has been submitted 

$err = array(); 
// Will hold our errors 


if(!$_POST['username'] || !$_POST['password']) 
    $err[] = 'All the fields must be filled in!'; 

if(!count($err)) 
{ 
    $_POST['username'] = mysql_real_escape_string($_POST['username']); 
    $_POST['password'] = mysql_real_escape_string($_POST['password']); 
    $_POST['rememberMe'] = (int)$_POST['rememberMe']; 

    // Escaping all input data 

    $row = mysql_fetch_assoc(mysql_query("SELECT id,usr FROM members WHERE usr='{$_POST['username']}' AND pass='".md5($_POST['password'])."'")); 

    if($row['usr']) 
    { 
     // If everything is OK login 

     $_SESSION['usr']=$row['usr']; 
     $_SESSION['id'] = $row['id']; 
     $_SESSION['rememberMe'] = $_POST['rememberMe']; 

     // Store some data in the session 

     setcookie('FRCteam3482Remember',$_POST['rememberMe']); 
    } 
    else $err[]='Wrong username and/or password!'; 
} 

if($err) { 
    $_SESSION['msg']['login-err'] = implode('<br />',$err); 
    // Save the error messages in the session 

    header("Location: index.php"); 
} 
else 
    header("Location: workspace/index.php"); 
    echo 'true'; 
exit; 
} 
+0

當您打印'回聲json_encode($ _ SESSION [ 'MS ...'? – 2013-03-12 05:21:16

+0

它我建議改變你的查詢,'WHERE USR =' $ _POST ['username']'AND ...' 然後繼續嘗試執行'alert(html);'您的成功值在javascript。 – Ranjith 2013-03-12 05:22:08

+0

因爲$ _SESSION ['msg'] ['login-err']不是在沒有錯誤的情況下定義? – 2013-03-12 05:22:46

回答

1

通常一個AJAX請求作出屬於返回一個值 PHP頁面的請求。它通常是JSON,但不一定是。這是一個例子。

$.ajax({ 
    type: "POST", 
    url: "a request URL", 
    data:{ 
     'POST1':var1, 
     'POST2':var2 
     } 
    success: function(result) 
     { 
     //Do something based on result. If result is empty. You have a problem. 
     } 
}); 

你的PHP頁面並不總是返回值所以它很難知道怎麼回事。您的解決方法是使用JavaScript變量,當頁面返回空時,這些變量會保存回顯的PHP數據。但這不適用於你的情況。將PHP變量回應爲JavaScript可能會很好地工作,但這不是很好的做法。

它不會在你的情況下工作,因爲你的JavaScript變量是在第一次加載頁面時設置的。此時變量$_SESSION['msg']['login-err']尚未設置(或可能包含一些不相關的數據),這就是您的JavaScript變量也可以保存的內容。

當你這樣做時,我提到你也可以使用像console.log(result)alert(result)這樣的函數來手動查看PHP頁面的結果並修復任何問題。

我會建議做類似下面的事情。

if($err) { 
    $_SESSION['msg']['login-err'] = implode('<br />',$err); 
    echo $_SESSION['msg']['login-err']; 
} 
else 
    echo 'success'; 
} 

的Javascript

$.ajax({ 
     type: "POST", 
     url: "", 
     data: "submit="+submit+"&username="+username+"&password="+password, 
     success: function(response) { 
      if(response=='success') { 
       alert("Woo! everything went well. What happens now?"); 
       //do some stuff 
      } 
      else { 
       alert("oh no, looks like we ran into some problems. Response is"+ response); 
       $("#error-log").remove(); 
       var error_msg = response; 
       $("#s-log").append('<div id="error-log" class="err welcome dismissible">'+error_msg+'</div>'); 
      } 
     } 
}); 

這不一定工作完全按預期,但其一個良好的開端,爲您搭建上。

+0

所以我應該回顯錯誤信息而不是真/假嗎? – core16 2013-03-14 01:41:28

+0

是的,病倒了用一個例子來回答我的答案 – 2013-03-14 04:09:40

0

通過檢查代碼,似乎你是先做重定向然後發送響應。

也有一些是錯誤的下面的代碼片段

if($err) { 
    $_SESSION['msg']['login-err'] = implode('<br />',$err); 
    // Save the error messages in the session 

    header("Location: index.php"); 
} 
else 
    header("Location: workspace/index.php"); 
    echo 'true'; 
exit; 
}