2017-03-02 2 views
0

Hallo, ich bin total neu in Ajax. Ich habe eine Anmeldung bei Ajax gemacht, aber immer wenn ich mich anmelde, bekomme ich eine Meldung, dass die Anmeldung nicht funktioniert hat. Ich suche stundenlang nach dem Problem, kann aber nicht herausfinden, wo ich falsch lag.Ajax-Login meldet sich nicht an, wenn die korrekten Login-Benutzerdaten verwendet werden

Dies ist der Körper des index.html

<div class="loginform-in"> 
<h1>User Login</h1> 
<div class="err" id="add_err"></div> 
<fieldset> 
<form action="" method="post"> 
    <ul> 
     <li> <label for="name">Username </label> 
     <input type="text" size="30" name="name" id="name" /></li> 
     <li> <label for="name">Password</label>w 
     <input type="password" size="30" name="word" id="word" /></li> 
     <li> <label></label> 
     <input type="submit" id="login" name="login" value="Login" class="loginbutton" ></li> 
    </ul> 
    </form>  
</fieldset> 
</div> 

ich nicht die Ajax-Code in einer anderen Datei enthalten waren. Ich habe den Code unten in den Kopf der index.html

$(document).ready(function(){ 
     $("#add_err").css('display', 'none', 'important'); 
     $("#login").click(function(){ 
      username=$("#name").val(); 
      password=$("#word").val(); 
      $.ajax({ 
       type: "POST", 
       url: "login.php", 
       data: "name="+username+"&pwd="+password, 
       success: function(html){  
        if(html=='true') { 
     //$("#add_err").html("right username or password"); 
     window.location="dashboard.php"; 
     } 
     else { 
      $("#add_err").css('display', 'inline', 'important'); 
      $("#add_err").html("<img src='images/alert.png' />Wrong username or password"); 
     } 
    }, 
    beforeSend:function() 
    { 
     $("#add_err").css('display', 'inline', 'important'); 
     $("#add_err").html("<img src='images/ajax-loader.gif' /> Loading...") 
    } 
}); 
      return false; 
     }); 
    }); 

Und das ist die login.php

require_once '../config.php'; 

session_start(); 
$uName = $_POST['name']; 
$pWord = md5($_POST['pwd']); 
$qry = "SELECT usrid, username, oauth FROM ajax WHERE username='".$uName."' AND pass='".$pWord."' AND status='active'"; 
$res = mysqli_query($mysqli, $qry); 
$num_row = mysqli_num_rows($res); 
$row=mysqli_fetch_assoc($res); 
if($num_row == 1) { 
    echo 'true'; 
    $_SESSION['uName'] = $row['username']; 
    $_SESSION['oId'] = $row['orgid']; 
    $_SESSION['auth'] = $row['oauth']; 
} 
else { 
    echo 'false'; 
} 
+1

Sie sollten parametrisierte Abfragen verwenden und Ihr Hashing aktualisieren. – chris85

+0

Vielleicht ist diese Bedingung nie wahr 'if ($ num_row == 1) {' versuche es zu 'if ($ num_row> 0) {' –

+0

was sagt die Konsole? –

Antwort

0
$.ajax({ 
      type: "POST", 
      url: "login.php", 
      data: {name:username, pwd:password}, 
      success: function(html){  
       if(html=='true') { 
    //$("#add_err").html("right username or password"); 
    window.location="dashboard.php"; 
    } 
    else { 
     $("#add_err").css('display', 'inline', 'important'); 
     $("#add_err").html("<img src='images/alert.png' />Wrong username or password"); 
    } 
}, 
beforeSend:function() 
{ 
    $("#add_err").css('display', 'inline', 'important'); 
    $("#add_err").html("<img src='images/ajax-loader.gif' /> Loading...") 
} 
}); 

Daten ändern

+1

Antworten sollten eine Erklärung haben. – chris85

+0

Versucht dies, aber das hat auch nicht für mich funktioniert –

0

Erlauben Sie mir zu Einführung in die wunderbare Welt der vorbereiteten Aussagen mit mysqli und pdo und password_hash(); und password_verify() Dies werden Antworten auf all Ihre zukünftigen Probleme sein, wie @ Chris85 vorgeschlagen hat. und da Sie das Skript auf einem Live-Server verwenden, müssen Sie vorbereitete Anweisungen verwenden.

Erste Methode PDO

<div class="loginform-in"> 
<h1>User Login</h1> 
<div class="err" id="add_err"></div> 
<fieldset> 
<form action="" method="post" id="myform"> 
    <ul> 
     <li> <label for="name">Username </label> 
     <input type="text" size="30" name="name" id="name" /></li> 
     <li> <label for="name">Password</label>w 
     <input type="password" size="30" name="word" id="word" /></li> 
     <li> <label></label> 
     <input type="submit" id="login" name="login" value="Login" class="loginbutton" ></li> 
    </ul> 
    </form>  
</fieldset> 
</div> 

<script type="text/javascript"> 
    $('document').ready(function(){ 

     $('#myform').submit(function(e){ 
      e.preventDefault(); 

      var formData = $('#myform').serialize(); 

      $.ajax({ 

       type : 'post', 
       url :'login.php', 
       data : formData, 
       dataType : 'json', 
       encode : true, 
       beforeSend : function(){ 
        $("#add_err").html("<img src='images/ajax-loader.gif' /> Loading..."); 
       }, 
       success : function(result){ 

        result = JSON.parse(result); 

        if(result == "ok"){ 

         $("#add_err").html("right username or password"); 
         setTimeout(' window.location.href = "dashboard.php"; ', 6000); 
        }else{ 

         $("#add_err").html("<img src='images/alert.png' /> Wrong username or password"); 
        } 
       } 


      }); 

     }); 

    }); 

</script> 

config.php

<?php 

    $host = '127.0.0.1'; 
    $db = 'YOURDATABASE'; 
    $user = 'DBUSER'; 
    $pass = 'YOURPASSWORD'; 
    $charset = 'utf8'; 

    $dsn = "mysql:host=$host;dbname=$db;charset=$charset"; 
    $opt = [ 
      PDO::ATTR_ERRMODE   => PDO::ERRMODE_EXCEPTION, 
      PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, 
      PDO::ATTR_EMULATE_PREPARES => false, 
      ]; 

$dbh = new PDO($dsn, $user, $pass, $opt); 

?> 

dann login.php

<?php 
session_start(); 

require 'config.php'; 


$message = ''; 
if (isset($_POST['login'])) { 

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

    try { 

     $stmt = $dbh->prepare("SELECT usrid,orgid, username,pass,oauth FROM ajax WHERE username= ? AND status='active'"); 
     $stmt->execute([$username]); 
     $results = $stmt->fetchall(); 

     if (count($results) > 0) { 
      //username is correct 
      foreach ($results as $key => $row) { 
       //verify password 
       if (password_verify($password, $row['pass'])) { 
        // password and username correct 
        $_SESSION['uName'] = $row['username']; 
        $_SESSION['oId'] = $row['orgid']; 
        $_SESSION['auth'] = $row['oauth']; 
        $message   = 'ok'; 
       } else { 
        //username and password does not match 

        $message = 'username and password does not match'; 
       } 
      } 
     } else { 
      //username is incorrect 
      $message = 'incorrect user account'; 
     } 

    } 
    catch (PDOException $e) { 

     error_log($e->getMessage()); 
    } 

    echo json_encode($message); 
} 

?> 

Das ist, wie si mple ist es, so auch auf der Registrierungsseite Sie vorbereitete Anweisungen verwenden, lesen Sie hier, wie Daten mit Prepared Statements einzufügen: https://phpdelusions.net/pdo#dml

auch auf das Register Seite länger Sie nicht gonna verwenden md5

so statt $password = md5($_POST['word']); werden Sie sagen $password = $_post['word']; dann müssen u, dass die Passwort-Hash dieses ist, wie u tun es $hash= password_hash($password,PASSWORD_DEFAULT); ODER '$ hash = password_hash ($ _ POST [' Wort '], PASSWORD_DEFAULT); `

Bevor Sie diese verwenden können Sie sicherstellen müssen, dass Sie Sie neu registrieren mit Konto password_hash();

2. Methode MySQLi vorbereitet Ich bin mit diesem nicht gut beenden, ich mit PDO bequemere bin, ich könnte irgendwo Fehler machen, Korrekturen willkommen, da ich auch hier bin um zu lernen.

<?php 
require 'config.php'; 
$message = ''; 
if (isset($_POST['submit'])) { 

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

    $stmt = $con->prepare("SELECT usrid, username,pass,orgid,oauth FROM ajax WHERE username= ? AND status='active'"); 
    $stmt->bind_param('s', $username); 
    $stmt->execute(); 
    $stmt->bind_result($user_id, $username,$pass,$orgid,$oauth); 
    $stmt->store_result(); 
    if ($stmt->num_rows == 1) //username correct 
     { 
     while ($stmt->fetch()) { 
      if (passord_verify($password, $pass)) { 
       // correct username 
       $_SESSION['uName'] = $username; 
       $_SESSION['oId'] = $orgid 
       $_SESSION['auth'] = $oauth; 
       $message   = 'ok'; 

      } else { 

       $message = 'username and password does not match'; 
      } 
     } 

    } else { 
     //username incorrect. 
     $message = 'incorrect user account'; 
    } 

    echo json_encode($message); 
    $stmt->close(); 
    $con->close(); 
} 

auf der zweiten Methode verwenden Sie die aktuelle Konfiguration, die Sie bereits haben.

+0

Danke für Ihre Antwort auf meine Frage @Masivuye Cokile. Ich werde definitiv PDO überprüfen. Ich habe versucht, die PDO-Methode, aber wenn ich den Code versuchen, bleibt es beim Laden Text ... –

+0

kommentieren Sie diese Zeile 'result = JSON.parse (Ergebnis);' dann erneut ausführen, überprüfen Sie auch, was die Konsole sagen. fügen Sie 'console.log (Ergebnis);' @BerkBalik –

+0

Kein Ergebnis .. Ich denke, es erreicht nicht einmal die PHP-Datei, weil es auf vorSenden und nicht auf Erfolg fest ist. Bei der Anmeldung gibt es nur das Ergebnis "loading ...". Also Ergebnis = JSON.parse (Ergebnis); wird nicht ausgeführt. –

Verwandte Themen