Оставайтесь на той же странице, если процесс входа не удался

0

У меня есть 3 php-страницы, которые являются index.php, login.php и loginSuccess.php index.php содержит только регистрационную форму, а login.php содержит php-коды для входа в систему.

<?php

session_start();

include './dbConnection.php';

$name = mysql_real_escape_string($_POST['userNameText']);
$password = mysql_real_escape_string($_POST['passwordText']);

$userName = stripslashes($name);
$userPassword = stripslashes($password);


$loginQuery = "SELECT * FROM users WHERE User_Name ='$userName' AND Password ='$userPassword'";
$query = mysql_query($loginQuery);
$result = mysql_num_rows($query);

if($result == 1){
    $_SESSION['userName'] = $userName;
    header("Location: loginSuccess.php");
}else{
    header("Location: index.php");
}

?>

Я хочу сделать это в файле index.php с сообщением об ошибке, если пользователь вводит неправильную регистрационную информацию. У меня есть функция jquery ниже, и я хочу назвать ее в состоянии login.php else. Как я могу это сделать? Спасибо за помощь.

$(function(){    
   $('#errorDiv').fadeIn();
});
  • 0
    Если вы не хотите перезагружать страницу, вы должны использовать AJAX вместо обычной отправки формы.
  • 0
    @ Barmar На самом деле у меня недостаточно знаний AJAX, чтобы заставить его работать.
Показать ещё 1 комментарий
Теги:
validation
forms

3 ответа

3
Лучший ответ

Один простой способ сделать это будет примерно так:

+ Изменить

header("Location: index.php");

в

// This is a bit rough, but, I'm guessing you're learning PHP
// so for now it'd do
header('Location: index.php?login=false');

А затем в вашем index.php добавьте что-то вроде

if ('false' === $_GET['login']) {
    echo 'Login failed!';
}

И вы получите красивое сообщение о том, что "Login failed!" когда... логин завершается с ошибкой.

Это никоим образом не является "правильным" способом сделать это, но это поможет вам изучить логику, которую вам нужно знать, чтобы такие вещи работали.

  • 0
    Это единственный способ сделать это, кроме Ajax?
  • 1
    Это всего лишь один из способов заставить вещи происходить с одной страницы на другую, это не единственный способ, например, вы можете использовать сеанс для хранения информации о том, успешно ли выполнен вход в систему, но я бы сказал, что его не нужно хранить в сессия. Если бы вы делали это с AJAX, вы, вероятно, захотите вывести ответ JSON, а затем забрать его с помощью jQuery.
Показать ещё 2 комментария
1

Вы не можете поместить свой код jQuery в состояние login.php else, потому что он все равно будет выполнять перенаправление. Мое предложение состоит в том, что вы храните сообщение об ошибке в переменной сеанса, а затем продолжаете перенаправление обратно на index.php где вы проверяете, установлена ли эта переменная сеанса. Если это так, вы можете показать сообщение об ошибке и затем "отменить" эту переменную сеанса.

index.php

<?php if (isset($_SESSION['error'])): ?>
  <p class="error-message"><?php echo $_SESSION['error']; ?></p>
  <?php unset($_SESSION['error']); ?>
<?php endif; ?>
<form>...</form>

login.php

...
else {
  $_SESSION['error'] = 'the error message';
  header('Location: index.php');
}
1

Это веский пример, но, надеюсь, вы увидите в нем логику.

У вас может быть форма входа в систему, который POSTs сам по себе. Вид вроде этого:

<form method="POST action="?login">
    <input type="text" name="username" />
    <input type="password" name="password" />
</form>

Затем на самой верхней части страницы index.php вы можете включить файл login.php.

<?php
    if(isset($_GET['login']){
        include 'login.php';
    }
?>

Сделайте то же самое, где бы вы ни захотели JavaScript.

<?php if(isset($_GET['login']){ ?>
    <script type="text/javascript>
        $(function(){    
            $('#errorDiv').fadeIn();
        });
    </script>
<?php } ?>

Если пользователь вошел в систему успешно, вы просто перенаправляетесь на loginSuccess.php. Если не все загружается снова.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню