Простой Ajax в PHP форма входа не работает - PullRequest
0 голосов
/ 29 августа 2018

Я создал форму входа в PHP, куда я хочу добавить код ajax, в котором он помогает мне успешно войти без загрузки окна, когда бит ajax-кода добавляется. Этот код не работает. Пожалуйста, помогите мне решить эту проблему, и, возможно, я не хочу показывать логин за страницей в Jquery. Я имею в виду, что после страницы входа я не хочу dashboard.php показывать пользователю. Но моя главная проблема в том, что мой код не работает. Пожалуйста, помогите и исправьте мою проблему.

Заранее спасибо.

$.ajax({
 method: "POST",
 url: "loginpage.php",
 dataType: "json",
 data: { email: email, password: pass},
success:function(data)
{
if(data.type=='success')
    window.location = 'welcomepage_hideme.php';
else
//server side error from php but now
   alert("Incorrect email or and password");
}
});
<?php
	$msg = "";

	if (isset($_POST['submit'])) {
		$con = new mysqli('localhost', 'research_emailC', 'test123', 'research_phpEmailConfirmation');

		$email = $con->real_escape_string($_POST['email']);
		$password = $con->real_escape_string($_POST['pass']);

		if ($email == "" || $password == "")
			$msg = "Please check your inputs!";
		else {
			$sql = $con->query("SELECT id, password, isEmailConfirmed FROM users WHERE email='$email'");
			if ($sql->num_rows > 0) {
                $data = $sql->fetch_array();
                if (password_verify($password, $data['password'])) {
                    if ($data['isEmailConfirmed'] == 0)
	                    $msg = "Please verify your email!";
                    else {
	                    $msg = "You have been logged in";
                      header("location: welcomepage_hideme.php");
                    }
                } else
	                $msg = "Please check your inputs!";
			} else {
				$msg = "Please check your inputs!";
			}
		}
	}
?>



<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Log In</title>
	<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/css/bootstrap.min.css" integrity="sha384-/Y6pD6FV/Vv2HJnA6t+vslU6fwYXjCFtcEpHbNJ0lyAFsXTsjBbfaDjzALeQsN6M" crossorigin="anonymous">
</head>
<body>
	<div class="container" style="margin-top: 100px;">
		<div class="row justify-content-center">
			<div class="col-md-6 col-md-offset-3" align="center">

				<img src="images/logo.png"><br><br>

				<?php if ($msg != "") echo $msg . "<br><br>" ?>

				<form method="post" action="loginpage.php">
					<input class="form-control" name="email" type="email" placeholder="Email..."><br>
					<input class="form-control" name="password" type="password" placeholder="Password..."><br>
					<input class="btn btn-primary" type="submit" name="submit" value="Log In">
				</form>

			</div>
		</div>
	</div>
</body>
</html>

Ответы [ 3 ]

0 голосов
/ 29 августа 2018

Пожалуйста, попробуйте это.

Код Ajax

$(document).ready(function(){
            $("#login").submit(function(e) { 
                e.preventDefault(); 
                $.ajax({
                 method: "POST",
                 url: "login.php",
                 dataType: "json",
                 data: $(this).serialize(),
                success:function(data){ 
                    console.log(data);
                if(data.type=='success')
                    window.location = 'welcomepage_hideme.php';
                else
                //server side error from php but now
                   alert("Incorrect email or and password");
                }
                });
            });
           })

HTML-код

<div class="container" style="margin-top: 100px;">
        <div class="row justify-content-center">
            <div class="col-md-6 col-md-offset-3" align="center">
                <form method="post" name="login_form" id="login_form">
                    <input class="form-control" name="email" type="email" placeholder="Email..."><br>
                    <input class="form-control" name="password" type="password" placeholder="Password..."><br>
                    <input class="btn btn-primary" type="submit" name="submit" value="Log In">
                </form>

            </div>
        </div>
    </div>
0 голосов
/ 29 августа 2018

Логика отверстия здесь неверна.

Сначала вы должны переместить код php из loginpage.php в fetchLogin.php:

<?php
$result = [ 'status' => false, 'msg' => "Please check your inputs!" ];

if ( isset( $_POST['email'] ) && isset( $_POST['password'] ) ) {
    $con = new mysqli( 'localhost', 'research_emailC', 'test123', 'research_phpEmailConfirmation' );

    $email    = $con->real_escape_string( $_POST['email'] );
    $password = $con->real_escape_string( $_POST['pass'] );

    if ( $email !== "" && $password !== "" ) {
        $sql = $con->query( "SELECT id, password, isEmailConfirmed FROM users WHERE email='$email'" );
        if ( $sql->num_rows > 0 ) {
            $data = $sql->fetch_array();
            if ( password_verify( $password, $data['password'] ) ) {
                if ( $data['isEmailConfirmed'] == 0 ) {
                    $result['msg'] = "Please verify your email!";
                } else {
                    $result['status'] = true;
                    $result['msg']    = "You have been logged in";
                }
            }
        }
    }
}
echo json_encode( $result );

die();

Затем обновите JS:

$.ajax({
  method: "POST",
  url: "fetchLogin.php",
  dataType: "json",
  data: { email: email, password: pass}
}).done( function( response ) {
    // code for render response.msg
    if ( ! response.status ) {
        return false;
    } else {
        setTimeout( window.location = "welcomepage_hideme.php", 3000 );
    }
});
0 голосов
/ 29 августа 2018

Проблема в названии получения параметра из массива $ _POST:

$password = $con->real_escape_string($_POST['pass']);

должно быть:

$password = $con->real_escape_string($_POST['password']);

Потому что в форме он имеет пароль имя:

<input class="form-control" name="password" type="password" placeholder="Password..."><br>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...