2016-06-30 25 views
0

Ich versuche, ein einfaches Login-Formular mit einem AJAX-Aufruf zu implementieren, der auf eine Seite umleitet, wo ich die Datenbank abfragen und dann den Benutzer auf die Indexseite oder zurück zur Anmeldeseite umleiten.Problem mit AJAX-Login-Anruf

HTML:

<form method="post"> 
<h4> Please Login </h4> 
    <input id="user" class="name" type="text" placeholder="Enter Username"/> 
    <input id = "pass" class="pw" type="password" placeholder="Enter Password"/> 
    <ul> 
     <li><a href="#">Forgot your password?</a></li> 
     <li><a href="#">Please Register Here</a></li> 
    </ul> 
    <input class="hvr-shrink" id="submitlogin" type="submit" value="Log in"/> 
</form> 

jQuery/AJAX:

$("#submitlogin").click(function() { 
    var $username = document.getElementById("user").value; 
    var $pass = document.getElementById("pass").value; 
    $.ajax ({ 
     url: "login_request.php", 
     type: "POST", 
     data: { 
      'username' : $username, 
      'password' : $pass 
     } 
    }); 
}); 

login_request.php

include "connect.php"; 
$myusername = mysqli_real_escape_string($db,$_POST['username']); 
$mypassword = mysqli_real_escape_string($db,$_POST['password']); 

$sql = "SELECT username, password FROM `CGSB_Compliance`.`nd_users` WHERE username = '$myusername' AND password = '$mypassword'"; 
$result = mysqli_query($db, $sql); 
$count = mysqli_num_rows($result); 

if($count == 1){ 
    $_SESSION['user'] = $myusername; 
    header("location:index.php"); 
} else { 
    header("location:login.php"); 
} 

Ich habe eine Tabelle mit einem Benutzernamen und Passwort, und jedes Mal, wenn ich anmelden, Es aktualisiert nur die Anmeldeseite. Ich habe meinen Code jetzt ein paar Mal überprüft und ich kann den Grund nicht finden, warum es nicht funktioniert. Ich habe das Gefühl, dass es ein dummer Fehler von meiner Seite ist, aber ich habe mir viele Beispiele angesehen und sie alle haben ziemlich genau dasselbe. Jede Hilfe wird geschätzt.

+1

[Kleine Bobby] (http://bobby-tables.com/) sagt *** [Ihr Skript in Gefahr ist für SQL-Injection-Attacken.] (Http://stackoverflow.com/questions/60174/how-can-i-prevent-sql-injection-in-php)*** Erfahren Sie mehr über [vorbereitete] (http://en.wikipedia.org/wiki/Prepared_statement) Anweisungen für [MySQLi] (http://php.net/manual/en/mysqli.quickstart.prepared-statements.php). Sogar [die Zeichenfolge zu entkommen] (http://stackoverflow.com/questions/5741187/sql-injection-that-gets-around-mysql-real-escape-string) ist nicht sicher! –

+1

** Speichern Sie niemals Nur-Text-Passwörter! ** Bitte verwenden Sie PHP [integrierte Funktionen] (http://jayblanchard.net/proper_password_hashing_with_PHP.html), um die Passwortsicherheit zu behandeln. Wenn Sie eine PHP-Version kleiner als 5.5 verwenden, können Sie das 'password_hash()' [compatibility pack] (https://github.com/ircmaxell/password_compat) verwenden. Stellen Sie sicher, dass Sie *** [Kennwörter nicht entgehen] (http://Stackoverflow.com/q/36628418/1011527) *** oder verwenden Sie einen anderen Bereinigungsmechanismus vor dem Hashing. Wenn Sie dies tun, * ändert * das Passwort und verursacht unnötige zusätzliche Codierung. –

+3

Sie tun nichts, um zu verhindern, dass das Formular erneut geladen wird. Sie sollten die Entwicklerkonsole verwenden, um zu sehen, was vor sich geht. Versuchen Sie, 'type =" submit "' zu 'type =" button "' – j08691

Antwort

-1

Mein Freund ich denke, Ihr Problem in Ihrer jQuery/AJAX ist: es des </body> Tag auf den Boden legen oder es in $(document).ready(function{});

+0

Sind Sie sicher, dass Sie die JQuery-Datei enthalten, einschließlich es –

0

Hallo habe ich habe Ihre code das Problem versucht, ist, dass Ihr ajax request nicht gehen Ihre login page. Verwenden Sie auch nicht $sign in javascript variables verwenden Sie var oder nichts. Sie können auch nicht jQuery library anrufen.

Ich habe das versucht und laufe mich. Probieren Sie mal das hier an. Zögern Sie nicht, es als Ihre Antwort zu markieren, wenn Sie Ihre Lösung finden.

// download file and save in your file if you are not connected to net and include with correct path 

    <script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script> 
    <Script> 
    $(document).ready(function(){ 

    $("#postsubmit").click(function(e) { 
     var pass = $("#pass").val(); 
     var username = $("#user").val(); 
      $.ajax({type:"POST",url:"login_request.php",data:{password:pass, username:username}, 
        }); 
     }); 
    }); 
     </script> 

    <h4> Please Login </h4> 
    <form name="postcontent" > 


     <input id="user" class="name" type="text" placeholder="Enter Username"/> 
     <input id = "pass" class="pw" type="password" placeholder="Enter Password"/> 
     <ul> 
      <li><a href="#">Forgot your password?</a></li> 
      <li><a href="#">Please Register Here</a></li> 
     </ul> 
     <input name="postsubmit" type="button" id="postsubmit" value="Sing Up"/> 

    </form> 

    login_request.php 

    <?php 
    $db = mysqli_connect('localhost','root','','yourdatabasename'); 
    echo $myusername = mysqli_real_escape_string($db,$_POST['username']); 
    echo $mypassword = mysqli_real_escape_string($db,$_POST['password']); 

    $sql = "SELECT username, pass FROM reg WHERE username = '$myusername' AND pass = '$mypassword'"; 
    $result = mysqli_query($db, $sql); 
    $count = mysqli_num_rows($result); 
    if($count == 1){ 
     $_SESSION['user'] = $myusername; 
     header("location:index.php"); 
    } else { 
     header("location:login.php"); 
    } 

ändern Ihre table name und datbase name nach Ihnen.

Auch preventDefault() hinzufügen Seite beschränken erfrischend

+0

Vielen Dank für die detaillierte Antwort, ich werde es jetzt versuchen und lassen Sie es wissen. Ich habe jQuery geladen, das ist kein Problem. – ybce

+0

immer noch nicht funktioniert, die Seite tut nichts, wenn ich auf die Schaltfläche klicke. Die Schaltfläche löst die Funktion aus, aber nichts passiert. – ybce