BG Development


Страници: (3) [1] 2 3   ( Първото ново мнение ) Reply to this topicStart new topicStart Poll

> PHP AJAX login form
xhister
Публикувано на: 08-01-2017, 20:37
Quote Post



Име: Петър
Група: Потребител
Ранг: Посетител

Мнения: 93
Регистриран на: 09.09.16



Работя върху логин форма с PHP, Ajax, MySQL. Целта ми е да валидирам формата и ако всичко е спазено, да пратя потребителя към home.php, но проблемът е, че не ми приема данните, дори и да са правилни. Валидацията си работи, но когато пратя правилните данни към базата данни, не ми ги приема, а ми показва грешка от валидацията.

В базата ми от данни имам таблица users с полета: id, username, userpass с вмъкнат ред: 1, admin, admin.

Ето го кодът:

index.php
CODE

<!DOCTYPE html>
<html>
<head>
<title>Login page</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
</head>
<script type="text/javascript">
$(document).ready(function(){

      $("#login1").click(function(){
            var username = $("#name1").val();
            var password = $("#pass1").val();
            var message = $("#message1");
            if(username != '' || password != ''){
                  $.ajax({
                        type:'POST',
                        url:'example1.php',
                        data: {username:username, password:password},
                        success:function(data){
                              if(data == 1){      
                                    window.location.assign("settings.php");      
                              }else{
                                    message.text("Incorrect login details.");
                              }
                        }
                  });
            }else{
                  message.text("Please enter username and password.");
            }
            return false;
      });
      
      $("#login2").click(function(){
            var username = $("#name2").val();
            var password = $("#pass2").val();
            var message = $("#message2");
            if(username != '' || password != ''){
                  $.ajax({
                        type:'POST',
                        url:'example2.php',
                        data: {username:username, password:password},
                        success:function(data){
                              if(data == 1){      
                                    window.location.assign("favorites.php");      
                              }else{
                                    message.text("Incorrect login details.");
                              }
                        }
                  });
            }else{
                  message.text("Please enter username and password.");
            }
            return false;
      });

      $("#login3").click(function(){
            var username = $("#name3").val();
            var password = $("#pass3").val();
            var message = $("#message3");
            if(username != '' || password != ''){
                  $.ajax({
                        type:'POST',
                        url:'example3.php',
                        data: {username:username, password:password},
                        success:function(data){
                              if(data == 1){      
                                    window.location.assign("home.php");      
                              }else{
                                    message.text("Incorrect login details.");
                              }
                        }
                  });
            }else{
                  message.text("Please enter username and password.");
            }
            return false;
      });
});
</script>
<body>
<?php
      if(!isset($_SESSION['id'])){
                  if(isset($_GET['settings'])){  ?>
                  <div id="message" style="color:red; margin-bottom:10px;"></div>
                  <form role="form" id="form1" method="post">
                  
                  <div class="form-group">
                        <label for="user" class="control-label">Username:</label>
                        <input type="text" class="form-control" name="username1" id="name1">
                  </div>
                  
                  <div class="form-group">
                        <label for="pass" class="control-label">Password:</label>
                        <input type="password" class="form-control" name="password1" id="pass1">
                  </div>
                  
                  <button class="btn btn-primary" id="login1" name="login1" type="submit">Login</button>
                  </form>
      <?php      }elseif(isset($_GET['favorites'])){ ?>
                  <div id="message2" style="color:red; margin-bottom:10px;"></div>
                  <form role="form" id="form2" method="post">
                  
                  <div class="form-group">
                        <label for="user" class="control-label">Username:</label>
                        <input type="text" class="form-control" name="username2" id="name2">
                  </div>
                  
                  <div class="form-group">
                        <label for="pass" class="control-label">Password:</label>
                        <input type="password" class="form-control" name="password2" id="pass2">
                  </div>
                  
                  <button class="btn btn-primary" id="login2" name="login2" type="submit">Login</button>
                  </form>
      <?php      }else{  ?>
                  <div id="message3" style="color:red; margin-bottom:10px;"></div>
                  <form role="form" id="form3" method="post">
                  
                  <div class="form-group">
                        <label for="user" class="control-label">Username:</label>
                        <input type="text" class="form-control" name="username3" id="name3">
                  </div>
                  
                  <div class="form-group">
                        <label for="pass" class="control-label">Password:</label>
                        <input type="password" class="form-control" name="password3" id="pass3">
                  </div>
                  
                  <button class="btn btn-primary" id="login3" name="login3" type="submit">Login</button>
                  </form>
      <?php } ?>
<?php      }else{
                  if(isset($_GET['settings'])){
                        header("Location: settings.php");
                  }
                  elseif(isset($_GET['favorites'])){
                        header("Location: favorites.php");
                  }else{
                        header("Location: home.php");
                  }
            } ?>
</body>
</html>


example1.php:
CODE
<?php
      session_start();
      if(isset($_POST['login1'])){
      $username = trim($_POST['username1']);
      $username = strip_tags($username);
      $username = htmlspecialchars($username);
      
      $userpass = trim($_POST['password1']);
      $userpass = strip_tags($username);
      $userpass = htmlspecialchars($username);
      
      $connect = mysqli_connect("localhost", "root", "", "tests1");
      $query = mysqli_query($connect, "select * from users where username = '".$username."' and userpass = '".$userpass."'");
      $numrow = mysqli_num_rows($query);
      $row = mysqli_fetch_array($query);
      if($numrow == 1){
            $_SESSION['id'] = $row['id'];
            echo 1;      
      }
      else {
            echo 0;      
      }
      }
?>


example2.php:
CODE

<?php
      session_start();
      if(isset($_POST['login2'])){
      $username = trim($_POST['username2']);
      $username = strip_tags($username);
      $username = htmlspecialchars($username);
      
      $userpass = trim($_POST['password2']);
      $userpass = strip_tags($username);
      $userpass = htmlspecialchars($username);
      
      $connect = mysqli_connect("localhost", "root", "", "tests1");
      $query = mysqli_query($connect, "select * from users where username = '".$username."' and userpass = '".$userpass."'");
      $numrow = mysqli_num_rows($query);
      $row = mysqli_fetch_array($query);
      if($numrow == 1){
            $_SESSION['id'] = $row['id'];
            echo 1;
      }
      else {      
            echo 0;      
            }
      }
?>


example3.php:

CODE

<?php
      session_start();
      if(isset($_POST['login3'])){
      $username = trim($_POST['username3']);
      $username = strip_tags($username);
      $username = htmlspecialchars($username);
      
      $userpass = trim($_POST['password3']);
      $userpass = strip_tags($username);
      $userpass = htmlspecialchars($username);
      
      $connect = mysqli_connect("localhost", "root", "", "tests1");
      $query = mysqli_query($connect, "select * from users where username = '".$username."' and userpass = '".$userpass."'");
      $numrow = mysqli_num_rows($query);
      $row = mysqli_fetch_array($query);
      if($numrow == 1){
            $_SESSION['id'] = $row['id'];
            echo 1;      
      }
      else {
            echo 0;
      }
      }
?>

и една страница за тестове:
CODE

<!DOCTYPE html>
<html>
<head>
<title>Login page</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
</head>
<body>
<a href="index.php?settings">Login settings</a>
<a href="index.php?favorites">Login favorites</a>
<a href="index.php"></a>
</body>
</html>


останалите страници са празни засега. Поствам всички страници, тъй като не съм сигурен къде може да е грешката. Четох навсякъде как да си оправя проблема, но без резултат.
Долу съм качил снимка от резултата.

Прикачена картинка (Кликнете на картинката, за да я увеличите!)
Прикачена картинка
PMEmail Poster
Top
relax4o
Публикувано на: 08-01-2017, 20:51
Quote Post



Име:
Група: Потребител
Ранг: Почетен член

Мнения: 1248
Регистриран на: 04.04.07



Мен ме съмнява, че данните, които получаваш на data не са тези, които очакваш.

При success дебъгни data да видиш какво точно връща. Преди if сложи

CODE

console.log(data + " : " + typeof data);


и виж в конзолата (F12 -> Console ( отвори я предварително, ако не ще трябва да презаредиш страницата)) какво ти връща.

Това мнение е било редактирано от relax4o на 08-01-2017, 20:52


--------------------
Бисери :D

QUOTE (oveRLuckEd)
Ползваш някоя нова версия на PHP, която е вече ооп ориентирана и заради това ти я изкарва тази грешка.


QUOTE (nbacool2)
Щом няма input полета, значи няма откъде да се направи SQL инжекция Very Happy
PM
Top
xhister
Публикувано на: 08-01-2017, 20:56
Quote Post



Име: Петър
Група: Потребител
Ранг: Посетител

Мнения: 93
Регистриран на: 09.09.16



relax, направих това, което ми каза, но без резултат. Другото, което ме притеснява е това shadow root, а и другото, което е, принадлежи към някаква функция inject(), която видях в конзолата. Ето снимка от резултата:

Прикачена картинка (Кликнете на картинката, за да я увеличите!)
Прикачена картинка
PMEmail Poster
Top
rvc
Публикувано на: 08-01-2017, 20:56
Quote Post



Име:
Група: Потребител
Ранг: Почетен член

Мнения: 2434
Регистриран на: 13.05.11



когато изпращаш отговор през AJAX, връщай тоя хедър;

header('Content-type: text/plain');
PMEmail PosterUsers Website
Top
xhister
Публикувано на: 08-01-2017, 21:00
Quote Post



Име: Петър
Група: Потребител
Ранг: Посетител

Мнения: 93
Регистриран на: 09.09.16



Поставих този хедър в условията в пхп файловете, но все още няма резултат.

Надявам се, че така трябва да върна резултатът.
CODE

if($numrow == 1){
            $_SESSION['id'] = $row['id'];
            header("Content-Type: text/plain");
            echo 1;      
      }
      else {
            header("Content-Type: text/plain");
            echo 0;
      }


Това мнение е било редактирано от xhister на 08-01-2017, 21:03
PMEmail Poster
Top
relax4o
Публикувано на: 08-01-2017, 21:15
Quote Post



Име:
Група: Потребител
Ранг: Почетен член

Мнения: 1248
Регистриран на: 04.04.07



Добре, както и да е.

Хубаво е, когато работиш с AJAX да пращаш/получаваш данните в JSON формат.
Виждам, че в PHP файловете правиш проверка дали ти е натиснат даден бутон, а през AJAX въобще не пращаш тези данни. Прекалено си омешил нещата.

Сигурен ли си, че ти се изпълнява PHP скрипта? При click прихващай събитията

CODE

$(...).on('click', function ( event ) {
   
});


като с това предотвратявай нормалното изпращане на формата (не винаги return false върши тази работа) с

CODE

event.preventDefault();

// ... останалия код


В PHP файла махни проверката дали ти е натиснат бутона. Просто си обработи данните, които очакваш да получиш и при връщане на резултат използвай малко по-добър начин за това.

CODE

if ( тралалла ) {
     $data['success'] = true;
     $data['message'] = "";
}
else {
     $data['success'] = false;
     $data['message'] = "Incorrect data";
}

echo json_encode($data);


И вече при получаване на данните при success правиш следното:

CODE

data = JSON.parse(data);

if ( data.success ) { // или data['success']
      // redirect
}
else {
     message.text(data.message); // data['message']
}



П.П. Не е нужно бутона да ти е тип submit(така форсираш бутона да ти изпрати формата). Това можеш да го махнеш. Другия вариант е, не да прихващаш click, а submit събитието и отново да предотвратяваш нормалното изпращане на формата.

Това мнение е било редактирано от relax4o на 08-01-2017, 21:27


--------------------
Бисери :D

QUOTE (oveRLuckEd)
Ползваш някоя нова версия на PHP, която е вече ооп ориентирана и заради това ти я изкарва тази грешка.


QUOTE (nbacool2)
Щом няма input полета, значи няма откъде да се направи SQL инжекция Very Happy
PM
Top
xhister
Публикувано на: 08-01-2017, 21:28
Quote Post



Име: Петър
Група: Потребител
Ранг: Посетител

Мнения: 93
Регистриран на: 09.09.16



Както каза, доста съм омешал нещата и не знам къде ми е грешката. Пробвах твоя начин, но и той не помага. Не ми изкарва резултата в конзолата, а и съобщението при валидацията ми го показва за една секунда и ми го скрива.

CODE

$("#login3").on("click", function(event){
            event.preventDefault;
            var username = $("#name3").val();
            var password = $("#pass3").val();
            var message = $("#message3");
            if(username != '' || password != ''){
                  $.ajax({
                        type:'POST',
                        url:'example3.php',
                        data: {username:username, password:password},
                        success:function(data){
                              data = JSON.parse(data);
                              if(data.success){      
                                    windows.location.href = "home.php";
                              }else{
                                    message.text(data.message);
                              }
                        }
                  });
            }else{
                  message.text("Please enter username and password.");
            }
      });
...............................................................

session_start();
      $username = trim($_POST['username3']);
      $username = strip_tags($username);
      $username = htmlspecialchars($username);
      
      $userpass = trim($_POST['password3']);
      $userpass = strip_tags($username);
      $userpass = htmlspecialchars($username);
      
      $connect = mysqli_connect("localhost", "root", "", "tests1");
      $query = mysqli_query($connect, "select * from users where username = '".$username."' and userpass = '".$userpass."'");
      $numrow = mysqli_num_rows($query);
      $row = mysqli_fetch_array($query);
      $data = array();
      if($numrow == 1){
            $_SESSION['id'] = $row['id'];
            $data["success"] = true;
            $data["message"] = "Successfully logged in.";
      }
      else {
            $data["success"] = false;
            $data["message"] = "Incorrect login details.";
      }
      echo json_encode($data);
PMEmail Poster
Top
relax4o
Публикувано на: 08-01-2017, 21:33
Quote Post



Име:
Група: Потребител
Ранг: Почетен член

Мнения: 1248
Регистриран на: 04.04.07



В момента връща ли ти нещо? В смисъл изпълнява ли се отново message.text(data.message) ?

Нали така правиш за да провериш data ?

CODE

success:function(data){
      console.log(data);
      data = JSON.parse(data);
      if(data.success){      
             windows.location.href = "home.php";
      }else{
              message.text(data.message);
      }
 }


Това мнение е било редактирано от relax4o на 08-01-2017, 21:34


--------------------
Бисери :D

QUOTE (oveRLuckEd)
Ползваш някоя нова версия на PHP, която е вече ооп ориентирана и заради това ти я изкарва тази грешка.


QUOTE (nbacool2)
Щом няма input полета, значи няма откъде да се направи SQL инжекция Very Happy
PM
Top
xhister
Публикувано на: 08-01-2017, 21:37
Quote Post



Име: Петър
Група: Потребител
Ранг: Посетител

Мнения: 93
Регистриран на: 09.09.16



Message текст ми се изпълнява, но само "Please enter password or username", а резултатите(и двата) от ajax не ми ги връща. Също първото съобщение ми го показва само за една секунда и изчезва. За success-a така правя да.

Това мнение е било редактирано от xhister на 08-01-2017, 21:38
PMEmail Poster
Top
xhister
Публикувано на: 08-01-2017, 21:41
Quote Post



Име: Петър
Група: Потребител
Ранг: Посетител

Мнения: 93
Регистриран на: 09.09.16



Също така махнах типа на бутона и пробвах в javascript с submit метода, но пак нищо не се получава.
PMEmail Poster
Top
1 потребители преглеждат тази тема в момента (1 гости, 0 анонимни потребители)
Потребители, преглеждащи темата в момента:

Topic Options Страници: (3) [1] 2 3  Reply to this topicStart new topicStart Poll

 


Copyright © 2003-2015 | BG Development | All Rights Reserved
RSS 2.0