2017-03-24 5 views
0

Ich habe ein Login und Anmeldeformular auf der gleichen Seite, die ich mit jQuery ausblenden, so dass nur ein Formular zu einer Zeit aktiv ist. Wenn ich das Registrierungsformular aktiv habe, fülle das E-Mail-Feld mit einer E-Mail aus, die nicht mit meiner PHP-if-Anweisung übereinstimmt, und drücke auf Senden, dann aktualisiert die Seite und aktiviert das Anmeldeformular.Kann Ajax nicht mit PHP so arbeiten, wie ich möchte

Ich möchte, dass die Seite das PHP-Skript ausführt, wenn die PHP-if-Anweisung fehlschlägt, verhindert sie das Aktualisieren der Seite und druckt dann die Nachricht in der else-Anweisung von PHP.

Der Code sieht wie folgt aus:

PHP:

if(isset($_POST['register'])) { 
    $email = strip_tags($_POST['email']); 
    $password = strip_tags($_POST['password']); 
    $request = $_POST['request']; 

    $email = $DBcon->real_escape_string($email); 
    $password = $DBcon->real_escape_string($password); 

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

    $hashed_password = password_hash($password, PASSWORD_DEFAULT); 
    $check_email = $DBcon->query("SELECT email FROM members WHERE email='$email'"); 
    $count = $check_email->num_rows; 

    if ($count==0) { 
     if (preg_match('/^[a-z]{6}+[0-9]{2}[email protected]+$/i', $email)) { 
      $query = "INSERT INTO members(email, password) VALUES('$email', '$hashed_password')"; 
      $result = $DBcon->query($query); 
      header("Location: home.php"); 
      die(); 
     } else { 
      echo "You must provide a valid student email!"; 
     } 
    } else{ 
     echo "Email already taken!"; 
    } 
} 
$DBcon->close(); 

jQuery:

$(document).ready(function() { 

var request = $(this).serialize(); 
$("#registerform").on('submit', function (event) { 
    event.preventDefault(); 

    $.ajax({ 
    type: 'POST', 
    url: 'registration.php', 
    data: request, 
    success: function(){ 
     $(this).submit(); 
     console.log("test"); 
    }, 
    error: function() { 
     event.preventDefault(); 
    alert("fail"); 
    } 
    }); 

    }); 
}); 
+4

Setzen Sie 'var request = $ (this) .serialize();' in submit-Funktion. – DrKey

+0

Ich habe dies versucht, aber ich bekomme diesen Fehler: "Undefinierter Index: Anfrage in ...." bezog sich auf meine "$ Anfrage = $ _POST ['Anfrage'];" in meinem PHP. Wenn ich "print_r ($ _ POST)" ausführen die Werte der Anfrage werden tatsächlich gedruckt. – Kristoffer

Antwort

0

Im dass Ihr Code laufen richtig angenommen und Sie erhalten die Daten ordnungsgemäß durch Eintrag in Javascript dann Nur diese Änderungen sind zu machen.

if ($count==0) { 
     if (preg_match('/^[a-z]{6}+[0-9]{2}[email protected]+$/i', $email)) { 
      $query = "INSERT INTO members(email, password) VALUES('$email', '$hashed_password')"; 
      $result = $DBcon->query($query); 

    if ($result){ 
     header("Location: home.php"); 
     } 
    else{ 
      die("Some error"); 
    } 
      die(); 
     } else { 
      die("You must provide a valid student email!"); 
     } 
    } else{ 
     die("Email already taken!"); 
    } 
+0

Jetzt bekomme ich immer "Undefined index: request in ...." bezogen auf meine "$ request = $ _POST ['request'];" in meinem PHP. Wenn ich "print_r ($ _ POST)" ausführen Die Werte der Anfrage werden tatsächlich gedruckt. – Kristoffer

+0

Überprüfen Sie, ob Sie den Namen des Schlüsselworts im Formular als 'Anfrage' verwendet haben. Dieser Fehler tritt nur auf, wenn Sie keinen Wert für $ _POST [Variable] haben; Überprüfen Sie also den variablen Teil. Überprüfen Sie auch, ob es korrekt an PHP übergeben wurde. –

+0

Wenn ich das zu serialisierende Objekt von "this" in die eigentliche Formular-ID "#registerform" änderte, funktionierte es teilweise, es wird nicht aus der else-Anweisung in PHP gedruckt ("Sie müssen eine gültige Studenten-Email angeben"). Aber dann, auf den Fehler Teil des Ajax bekomme ich die Warnung zu arbeiten, aber nicht die Standard verhindern. Irgendwelche Tipps dafür? – Kristoffer

Verwandte Themen