2015-06-23 4 views
0

Я пытаюсь сделать логин с ajax, я хочу, чтобы пользователь заходил в систему, и если имя пользователя (адрес электронной почты) и пароль верны, страница должна использовать метод .load для загрузки страницы «perfil.php ", что я не буду публиковать код, так как это не имеет значения. Однако ничего не происходит, даже если я нахожу случайного пользователя/пароль.Php Вход с Ajax

Я только начал с SESSION и AJAX, поэтому любая помощь будет оценена, BTW Мне не нужны ответы, говорящие о хешировании пароля в данный момент.

индекс

<?php 
    session_start(); 
    if(!empty($_SESSION['login_user'])){ 
     header('Location: user/perfil.php'); 
    } 
?> 

<form class="form-signin" id="form-signin" method="post" action=""> 
<h2 class="form-signin-heading">Sign in</h2> 
<input type="email" name="email" id="inputEmail" class="form-control" placeholder="Email address" required="true" autofocus="true"> 
<input type="password" name="password" id="inputPassword" class="form-control" placeholder="Password" required="true"> 
<div class="checkbox"> 
    <label> 
     <input type="checkbox" value="remember-me"> Lembrar-me 
    </label> 
</div> 
<button id="entrar" class="btn btn-lg btn-primary btn-block" type="submit" name="submit">Sign in</button> 

login.php

<?php 
include_once '../config/db.php'; 
session_start(); 
if (isSet($_POST['email']) && isSet($_POST['password'])) { 
    try { 
     $pdo = Database::connect(); 
     $email = $_POST['email']; 
     $password = $_POST['password']; 

     $query= "SELECT id FROM utilizador WHERE email = '$email' and pass = '$password'"; 

     $stmt = $pdo->prepare($query); 
     $stmt->execute(); 
     $num=$stmt->rowCount(); 

     $row = $stmt->fetch(PDO::FETCH_ASSOC); 
     if($num > 0) 
      $_SESSION['login_user']=$row['id']; 
      echo $row['id'];  
     } 
     Database::disconnect(); 
    } 
    catch (Exception $e){ 
     echo 'Exception: ', $e->getMessage(), "\n"; 
    } 
} 
?> 

Javascript

$('#entrar').click(function() 
{ 
    var email = $("#inputEmail").val(); 
    var password = $("#inputPassword").val(); 
    var dataString = 'email='+email+'&password='+password; 
    if($.trim(username).length>0 && $.trim(password).length>0) 
    { 
     $.ajax({ 
      type: "POST", 
      url: "user/login.php", 
      data: dataString, 
      cache: false, 
      beforeSend: function(){ $("#entrar").val('A entrar...');}, 
      success: function(data){ 
       if(data) 
       { 
        showNotas(); 
        $('#form-signin').fadeOut('slow', function(){ 
         $("#section-1 .container").load("user/perfil.php").fadeIn(1500).delay(5000); 
         $("#section-1 span").text("Perfil"); 
        }); 
        $('#notas').show(); 
       } 
       else 
       { 
        $("#entrar").val('Sign in') 
        $("#error").html("<span style='color:#cc0000'>Error:</span> Invalid username and password. "); 
       } 
      } 
     }); 
    } 
return false; 
}); 

РЕДАКТИРОВАТЬ: Хром DEV не показывает какую-либо ошибку

+0

Вы включили error_reporting? Есть ли ошибки в вашей консоли javascript? Правильно ли написан скрипт php? Если да, то что он возвращает? Также: Никогда не сохраняйте пароли обычного текста в своей базе данных. ВСЕГДА шифрует/хеширует их. Люди часто используют один и тот же пароль для нескольких служб. –

+0

Благодарим вас за помощь, однако, как я писал в сообщении: «Кстати, мне не нужны ответы, говорящие о хешировании пароля в данный момент». И нет никаких ошибок в консоли – dyzz1337

+1

Это просто страшный стиль. На ваш вопрос: вы проверили ошибки в PHP? Возвращает ли сценарий то, что вы ожидаете? Вы можете проверить его, используя curl для публикации данных или использовать расширение chrome, такое как почтальон –

ответ

0

Я не знаю почему, но я изменил $('#entrar').click(function(event) к function entrar() и переместил его за пределы $(document).ready(function(), и она работала .. Спасибо everyon в любом случае, Приветствия

0

ОБНОВЛЕНО

HTML (изменен флажок, добавлен идентификатор)

... 
<label> 
    <input id="rememberMe" type="checkbox" value="remember-me"> Lembrar-me 
</label> 
... 

Js

$('#entrar').click(function(event) 
{ 
    event.preventDefault(); 

    var email = $("#inputEmail").val(); 
    var password = $("#inputPassword").val(); 
    var rememberMe = 'unchecked'; 

    if ($('#rememberMe').is(':checked')){ 
     rememberMe = 'checked'; 
    } else { 
     rememberMe = 'unchecked'; 
    } 

    $.ajax({ 
     url: 'user/login.php', 
     type: 'POST', 
     data:{ 
      email:email, 
      password:password, 
      rememberMe:rememberMe 
     }, 
     success: function(data){ 
      alert(data); 
     } 
    }); 
}); 

пользователя/login.php

session_start(); 

header('Content-type: text/html; charset=utf-8'); 

$email = $_POST['email']; 
$password = $_POST['password']; 
$rememberMe = $_POST['rememberMe']; 

$_SESSION['test_email'] = $email; 
$_SESSION['test_password'] = $password; 

echo 'sessions: <br>' . $_SESSION['test_email'] . ' | ' . $_SESSION['test_password'] . ' | remember me: ' . $rememberMe; 

ОБНОВЛЕНО

добавить этот код в начало файла login.php выявить ошибки PHP

ini_set('display_errors', 1); 
error_reporting(~0); 
+0

Эй, приятель, страница просто обновляется в любом случае – dyzz1337

+0

Я обновлю свой ответ, дайте мне несколько минут ... – Boris

+0

Я обновил ответ. Надеюсь, это поможет. – Boris

1

Chrome Developer Инструменты могут не отображать никаких ошибок в вашей консоли, однако, перейдите к вкладке «Сеть», cl ick в запросе XHR (файл AJAX будет пинговать, чтобы сделать запрос для входа пользователя в систему, я предполагаю, что это будет user/login.php и перейдите на вкладку «Предварительный просмотр и/или ответ» и посмотрите, как они говорят нам , Это может быть просто ошибка PHP, а не JavaScript.

+0

Я уже имел в виду, что консоль и вкладка xhr вообще ничего не отображают. – dyzz1337

0

Очень сложно ответить на ваш вопрос, так как мы не знаем, в чем проблема. Поэтому я просто опишу системный подход к тому, как решить такую ​​ситуацию.

  • Вы должны проверить каждую часть своего кода, чтобы определить, где лежит проблема. Это означает: Javascript, PHP, Database.
  • Вы должны начать с PHP. Возможно, сначала не используйте данные из POST, а просто жестко задайте адрес электронной почты &, а затем проверьте, доставляет ли запрос к базе данных ожидаемый результат. Или запросите базу данных, но не используйте данные из POST.
  • Если PHP просто ничего не возвращает, убедитесь, что вы включили отчет об ошибках. Вы иначе не знаете, почему что-то не работает. Это можно сделать, добавив error_reporting (E_ALL); в верхней части вашего PHP-кода, прежде всего включает и требует.
  • Если это работает, попробуйте сделать это с сообщением. Сначала отправьте свою форму без Javascript. Вы можете использовать атрибут действия формы и просто отправить его в обычном режиме. Или вы используете что-то вроде curl или postman. Посмотрите, что говорит PHP с сообщением об ошибках.
  • Теперь сделайте тот же POST с вашим сценарием Ajax. Вы можете добавить операторы console.log(variable) и посмотреть в консоли, если что-то пойдет не так.

О, и в то время как все это пишу я заметил недостающую { в вашем коде. Это может быть проблема ...;)

<?php 
include_once '../config/db.php'; 
session_start(); 
if (isSet($_POST['email']) && isSet($_POST['password'])) { 
    try { 
     $pdo = Database::connect(); 
     $email = $_POST['email']; 
     $password = $_POST['password']; 

     $query= "SELECT id FROM utilizador WHERE email = '$email' and pass = '$password'"; 

     $stmt = $pdo->prepare($query); 
     $stmt->execute(); 
     $num=$stmt->rowCount(); 

     $row = $stmt->fetch(PDO::FETCH_ASSOC); 
     if($num > 0) { // THIS WAS MISSING 
      $_SESSION['login_user']=$row['id']; 
      echo $row['id'];  
     } 
     Database::disconnect(); 
    } 
    catch (Exception $e){ 
     echo 'Exception: ', $e->getMessage(), "\n"; 
    } 
} 
?> 
Смежные вопросы