2016-08-27 4 views
1

Я новичок в JQuery, и я использую метод пост в моем login.js файл отправить запрос на мой login.php сценарий и получить сообщение об ошибке в зависимости от характера введенных данных формы.Как перенаправить пользователя на главную страницу с JQuery после успешного входа в систему

Все мои сообщения об ошибках работают и отображаются правильно в браузере. Моя проблема в том, что когда пользователь вводит правильные учетные данные, я хочу перенаправить их на домашнюю страницу. Вместо этого jQuery берет мой результат за успешный вход в систему и вставляет его в login_error div.

Любые идеи, в которых я ошибаюсь?

login.js:

$(document).ready(
function login_error() 
{ 
    $("#login").click(function(event) 
    { 
     event.preventDefault(); 
     var postData = $('#login_form').serialize(); 

     $.post('login.php', postData, function(result) 
     { 
      if(result != "match"){ 
       $('#login_error').html(result); 
      }else{ 
       window.location = 'home.php'; 
      } 
     }); 
    }); 
}); 

login.php:

<?php 

include "core/init.php"; 

$username = $password = ""; 

if(isset($_POST['username']) && isset($_POST['password'])){ 

    $username = $_POST['username']; 
    $password = $_POST['password']; 

    if(empty($username) || empty($password)){ 
     echo '<p class="alert-danger">You didn\'t fill in all the fields.</p>'; 
    }else if(user_exists($username) === false){ 
     echo '<p class="alert-danger">The username you entered doesn\'t match any account in our records. Sign up for an account.</p>'; 
    }else if(user_verified($username) === false){ 
     echo "<p class='alert-danger'><strong>".$username."</strong>&nbspis not a verified username. Check your inbox for a verification email.</p>"; 
    }else if(check_details($username, $password) === false){ 
     echo '<p class="alert-danger">The login details you entered don\'t match our records.</p>'; 
    }else{ 
     log_in($username, $password); 
    } 

}else{ 
    echo '<p class="alert-danger">Oops - something broke! We\'re working to fix this, check back soon.</p>'; 
} 

?> 

Мой log_in функция:

function log_in($username, $password){ 

    $db = mysqli_connect('localhost', 'root', '', 'forum'); 
    $sql = "SELECT user_id FROM users WHERE username = ?"; 
    $stmt = mysqli_prepare($db, $sql); 

    if($stmt){ 
     mysqli_stmt_bind_param($stmt, 's', $username); 
     mysqli_stmt_bind_result($stmt, $user_id); 
     mysqli_stmt_execute($stmt); 
     mysqli_stmt_fetch($stmt); 

     if(!empty($user_id)){ 
      $_SESSION['id'] = $user_id; 
      $_SESSION['user'] = $username; 
      echo 'match'; 
     }else{ 
      return false; 
     } 
    } 
} 
+0

Это эхо, «совпадение», как ошибка или что-то еще? – Forbs

+0

Да, это повторяет «матч». jQuery обрабатывает результат для успешных учетных данных точно так же, как обрабатывает различные результаты для недопустимых учетных данных. – Callum

+1

Затем либо сделайте 'view source', и посмотрите, будут ли отображаться дополнительные пробелы или входящие, или измените if на' if (result.trim()! = 'Match') 'и посмотрите, разрешило ли оно это – Forbs

ответ

0

Если ваш оставшийся код работает нормально тогда Просто измените window.location код с window.location.href = "home.php"; Здесь href используется для перенаправления местоположения

0

Вы можете просто использовать header("Location: home.php"); в функции входа php при успешном завершении. Нравится:

if(!empty($user_id)){ 
     $_SESSION['id'] = $user_id; 
     $_SESSION['user'] = $username; 
     header("Location: home.php"); 
    }else{ 
     return false; 
    }