2017-02-23 3 views
0

Ich bin mir bewusst, dass diese Frage Millionen von Mal gestellt wurde, aber hoffentlich ist dies ein bisschen anders, da ich nicht scheinen kann, eine Antwort zu finden. Ich versuche, nach einem erfolgreichen Anmeldevorgang zurück zur Indexseite (wo der Login stattfindet) umzuleiten. Idealerweiseumleiten zu einer anderen Seite mit separaten jquery-Datei

header("Location: index.php"); 

würde verwendet werden. Allerdings kann ich das nicht als Teil meiner PHP-Validierung verwenden. Der Code, den ich unten habe, funktioniert perfekt. Mit

<script> 
    window.location.href = "index.php"; 
</script> 

Dies ist das Ende Teil meines Validierungscode:

//loads of other form validation using echo's 
... 

{ 
    $resultusername = queryMysql("SELECT * FROM members WHERE username='$username'"); 

    if ($resultusername->num_rows) 
    { 
echo <<<_END 
<div id=usernameinuse> 
    <p>This username is already in use!</p> 
</div> 
_END; 

} 
else 
{ 
      $qresult = queryMysql("INSERT INTO members (firstname, 
surname, gender, dob, email, username, password) 
VALUES('$firstname', '$surname', '$gender', '$dob', '$email', '$username', '$password')"); 



echo <<<_END 
<script> 
window.location.href = "index.php"; 
</script> 
_END; 

} 

Wie ich sagte, dies funktioniert perfekt, aber ich würde im Idealfall wie alle Jquery und Javascript werden in separaten Dateien von meinem PHP und verlinkt am Anfang der Datei (andere jquery-Dateien sind bereits da oben) und wollen vermeiden, in Javascript mitten in einer PHP-Datei zu gehen. Also meine Frage ist, gibt es eine Möglichkeit, dass Skript extern zu machen und es in einer jquery Datei zu fangen wie

$('input[type=submit]').click && ($qresult)(function() { 
window.location.href = 'index.php'; 
return false; 
} 

Dies funktioniert ohne && ($qresult) bisschen, aber dann, wenn Sie nur einreichen klicken, nicht die Validierung erfolgt und nichts wird in die Datenbank eingegeben.

Ich weiß auch, PDO ist viel besser zu bedienen und mysql Funktionen sind leicht veraltet, aber ich bin nur an alles gewöhnt. Dank

+0

im PHP-Code können Sie 'echo ' '' –

+0

@NikolayGanovski Entschuldigung, ich muss meinen Beitrag bearbeiten! Das ist, was ich getan habe, ich wundere mich, wenn es eine Möglichkeit gibt, dieses Skript extern zu machen und es in einer jquery-Datei zu fangen – crapAtCode

+0

Sie könnten natürlich etw '', aber ich don sehe den Vorteil nicht ... – Jeff

Antwort

1

Lassen Sie uns sagen Sie einen Controller-Datei, die diese Funktion hat:

function insert_user($data) { 
    $qresult = false; 
    $resultusername = queryMysql("SELECT firstname FROM members WHERE username='$username'"); 
    if ($resultusername->num_rows < 1) 
    { 
     $qresult = queryMysql(" 
     INSERT INTO members (firstname, surname, gender, dob, email, username, password) 
     VALUES('{$data['firstname']}', '$data['surname']', '$data['gender']', '$data['dob']', '$data['email']', '$data['username']', '$data['password']') 
     "); 
    } 
    return $qresult; 
} 

Wenn Ihr Formular Aktion eine POST-Anforderung an derselben Datei sendet, wo es insert_user() so etwas wie dies anrufen:

$inserted = insert_user($_REQUEST); 
if($inserted) { 
    include("successful_registration.php"); 
} 
else { 
    include("user_already_exists.php"); 
} 

wo diese zwei enthaltenen Dateien zwei verschiedene Ansichten sind. Sie können diese Logik nach Ihren Wünschen anpassen, aber die Idee hier ist, Ihre Geschäftslogik von der View-Logik zu trennen. Wenn nicht einschließlich wie ich vorgeschlagen, können Sie möglicherweise zu anderen Seiten mit Hilfe von header() umleiten, bevor Sie sogar zu Rendering und Ansichten.

Wenn Sie Ajax verwenden, um einen Benutzer einzufügen, dann gibt Ihnen ein POST zum Controller wieder die Informationen, die Sie auf der Clientseite benötigen, um zu entscheiden, was Sie tun möchten (z. B. Inhalt manipulieren, einen Teil des Seite usw.).

Dies kann nur eine Meinung sein, aber die Trennung von Abfragecode aus Sichtcode ist der erste Schritt, um dieses Problem richtig gelöst zu bekommen.

Verwandte Themen