2017-08-01 36 views
-2

我有一個PHP登錄腳本,我想用ajax執行。如果PHP腳本成功,用戶可以訪問頁面,但根據我使用的ajax請求,header位置也會加載到$('.logresult') div中,我怎麼做才能在成功時進入header位置,並顯示錯誤信息如果不是,則爲$('logresult')。下面是我的代碼:PHP登錄腳本與Ajax加載標題在同一頁

Ajax請求

$('#submit_log').click(function(e) { 
    e.preventDefault(); 
    var data = $('#loginForm').serialize(), 
    form = $('#loginForm'); 
    $.post($(form).attr("action"), data, function(data) { 
     $('.logresult').html(data); 
    }) 
}); 

PHP登錄腳本

session_start(); 
require_once ("db.php"); 
$db = new MyDB(); 

if(isset($_POST['log_name']) && isset($_POST['log_password'])) { 
    $username = preg_replace('#[^A-Za-z0-9]#i', '', $_POST['log_name']); 
    $password = preg_replace('#[^A-Za-z0-9]#i', '', $_POST['log_password']); 

    $sql = $db->prepare("SELECT * FROM users WHERE uname = ?"); 
    $sql->bindParam(1, $username, SQLITE3_TEXT); 
    $ret = $sql->execute(); 

    $count = $db->prepare("SELECT COUNT(*) as COUNT FROM users WHERE uname = ?"); 
    $count->bindParam(1, $password, SQLITE3_TEXT); 
    $count_ret = $count->execute(); 

    if (count($count_ret) == 1) 
    { 
     while ($row = $ret->fetchArray(SQLITE3_ASSOC)) 
     { 
      $id = $row['userid']; 
      $regas = $row['regas']; 
      $uemail = $row['uemail']; 
      $pword = $row['pword']; 

      if (password_verify($password, $pword)) 
      { 


       $_SESSION['log_id'] = $id; 
       $_SESSION['log_name'] = $username; 
       $_SESSION['regas'] = $regas; 
       $_SESSION['uemail'] = $uemail; 
       header("Location: index.php?log_id=$id"); 
       exit(); 
      } 
      else 
      { 
       echo "Information incorrect"; 
       exit(); 
      } 
     } 
    } 
} 

我猜問題是$('.logresult').html(data);但真的不知道如何解決這一問題(我一般對ajax是新的)。謝謝

+1

爲什麼使用ajax提交數據如果您使用標題重定向 – DestinatioN

回答

0

只是不要使用ajax如果你想改變位置。 ajax的用法主要是當你不想重新加載頁面時。在大多數情況下,ajax響應是一個json並使用javascript處理響應。

+0

謝謝。但是如果想在不刷新 – diagold

+0

的情況下說出不正確的用戶名或密碼,在這種情況下,您會用代碼和消息回覆json。然後用javascript檢查響應代碼。例如,如果它是404,則向用戶顯示彈出消息。 – Beaumind

0

如果你想在成功後改變頁面的位置,可以通過你的ajax來實現,我一直都在做。有一個網站使用ajax並重定向成功也不奇怪,我已經看到了很多。在你的PHP的,而不是做:如果我重做你有什麼

die("<script>window.location='http://www.example.com/index.php?log_id={$id}';</script>"); 

,我想:

header("Location: index.php?log_id=$id"); 
exit(); 

爲了保持它的簡單與您現有的腳本工作,您可以發送回的javascript接收json而不是以來自PHP的動作/指令的形式,並且讓javascript成功解釋指令,但這更復雜。