Formular für das Adelsregister in PHP. PHP-Skripte zur Verarbeitung von HTML-Formularen. Beispiel Nr. 1 Einfachstes HTML-Formular

Zuletzt geändert am 23. Juli 2019 von Vincy.

Die Benutzerregistrierung oder -anmeldung ist ein wesentlicher Bestandteil vieler Webanwendungen und es ist entscheidend, dass sie richtig durchgeführt wird, um den Erfolg der Anwendung zu gewährleisten. Es ist der Ausgangspunkt für die Interaktion des Benutzers mit Ihrer Anwendung.

Es sollte mit bester Benutzeroberfläche/UX so einfach wie möglich sein. Die Implementierung der Benutzerregistrierungsfunktion mit PHP ist eine einfache Aufgabe und ich werde Sie in diesem Artikel anhand von Beispielen durch die Schritte führen.

Was ist innen? Wie funktioniert dieses Beispiel für die PHP-Benutzerregistrierung?

Dieser Beispielcode kann in drei Teile unterteilt werden.

  • Abrufen von Benutzerinformationen über ein HTML-Formular.
  • Validierung der vom Benutzer übermittelten Informationen beim Absenden des Formulars.
  • Datenbankverwaltung zum Speichern registrierter Benutzer in der Datenbank nach der Validierung.
  • Der dritte Schritt wird ausgeführt, nachdem sichergestellt wurde, dass der Benutzer nicht bereits hinzugefügt wurde. Diese Dateneindeutigkeitsvalidierung wird auf der Grundlage der von ihnen eingegebenen E-Mail-Adresse und ihres Benutzernamens durchgeführt.

    Bei der Registrierung erfassen wir im Allgemeinen Benutzerinformationen, die bereit sind, sich für unsere Anwendung zu registrieren. Einige davon sind obligatorisch, andere optional.

    Daher kann diese Funktionalität auch einen Validierungsteil umfassen, um die Nichtleerheit und das Format der Benutzerdaten sicherzustellen. Die Validierung kann entweder clientseitig oder serverseitig erfolgen.

    Eine serverseitige Validierung ist immer besser. Sie können es auch auf der Client-Seite verwenden, um die Benutzerfreundlichkeit zu erhöhen. Die Bereitstellung auf der Serverseite ist jedoch nicht optional und eine Mindestanforderung.

    Dateistruktur

    HTML-Formular, um dem Benutzer die Registrierung zu ermöglichen

    In diesem Beispiel enthält das Registrierungsformular die Felder Benutzername, Name (Anzeigename), Passwort und E-Mail. Es verfügt außerdem über das Feld „Passwort bestätigen“, damit der Benutzer sein Passwort zur Bestätigung erneut eingeben kann. Diese beiden Passwörter werden später bei einem verglichen.

    Durch das Absenden dieses Formulars wird vom Benutzer erwartet, dass er den Allgemeinen Geschäftsbedingungen zustimmt. Daher wird vor der Schaltfläche „Registrieren“ ein Kontrollkästchenfeld hinzugefügt, um dies sicherzustellen.

    PHP-Benutzerregistrierungsformular. Anmelden. Benutzername

    CONFIG.PHP-Datei

    less/reg/?mode=auth">Anmelden

  • Diese Datei dbconnect.php müssen mit Formularhandlern verbunden werden.

    Beachten Sie die Variable $address_site, hier habe ich den Namen meiner Testseite angegeben, an der ich arbeiten werde. Bitte geben Sie den Namen Ihrer Website entsprechend an.

    Site-Struktur

    Schauen wir uns nun die HTML-Struktur unserer Website an.

    Wir werden die Kopf- und Fußzeile der Website in separate Dateien verschieben. header.php Und footer.php. Wir werden sie auf allen Seiten einbinden. Nämlich auf der Hauptseite (Datei index.php), zur Seite mit dem Anmeldeformular (Datei form_register.php) und auf die Seite mit dem Autorisierungsformular (Datei form_auth.php).

    Blockieren Sie mit unseren Links, Anmeldung Und Genehmigung, fügen Sie sie dem Site-Header hinzu, damit sie auf allen Seiten angezeigt werden. Ein Link führt zur Seite mit dem Registrierungsformular (Datei form_register.php) und die andere auf die Seite mit dem Autorisierungsformular (Datei form_auth.php).

    Inhalt der Datei header.php:

    Name unserer Website

    Im Ergebnis sieht unsere Hauptseite so aus:


    Natürlich kann Ihre Seite auch eine völlig andere Struktur haben, aber das ist für uns jetzt nicht wichtig. Hauptsache, es gibt Links (Buttons) zur Registrierung und Autorisierung.

    Kommen wir nun zum Anmeldeformular. Wie Sie bereits wissen, haben wir es in den Akten form_register.php.

    Gehen Sie zur Datenbank (in phpMyAdmin) und öffnen Sie die Tabellenstruktur Benutzer und schauen Sie sich an, welche Felder wir brauchen. Das bedeutet, dass wir Felder zur Eingabe des Vor- und Nachnamens, ein Feld zur Eingabe der Postadresse (E-Mail) und ein Feld zur Eingabe des Passworts benötigen. Und aus Sicherheitsgründen werden wir ein Feld zur Eingabe eines Captchas hinzufügen.

    Auf dem Server können infolge der Verarbeitung des Registrierungsformulars verschiedene Fehler auftreten, aufgrund derer sich der Benutzer nicht registrieren kann. Damit der Benutzer versteht, warum die Registrierung fehlschlägt, ist es daher erforderlich, Meldungen zu diesen Fehlern anzuzeigen.

    Fügen Sie vor der Anzeige des Formulars einen Block hinzu, um Fehlermeldungen aus der Sitzung anzuzeigen.

    Und noch etwas: Wenn der Benutzer bereits autorisiert ist und aus Neugier direkt zur Registrierungsseite gelangt, indem er in die Adressleiste des Browsers schreibt site_address/form_register.php, dann zeigen wir in diesem Fall anstelle des Registrierungsformulars eine Kopfzeile an, die besagt, dass er bereits registriert ist.

    Im Allgemeinen der Dateicode form_register.php wir haben das:

    Du bist bereits registriert

    Im Browser sieht die Seite mit dem Anmeldeformular so aus:


    Mithilfe des erforderlichen Attributs haben wir alle Felder zu Pflichtfeldern gemacht.

    Achten Sie auf den Code des Registrierungsformulars, in dem das Captcha angezeigt wird:


    Wir haben den Pfad zur Datei im Wert des src-Attributs für das Bild angegeben captcha.php, wodurch dieses Captcha generiert wird.

    Schauen wir uns den Dateicode an captcha.php:

    Der Code ist gut kommentiert, daher werde ich mich nur auf einen Punkt konzentrieren.

    Innerhalb einer Funktion imageTtfText(), wird der Pfad zur Schriftart angegeben verdana.ttf. Damit das Captcha ordnungsgemäß funktioniert, müssen wir einen Ordner erstellen Schriftarten, und platzieren Sie die Schriftartdatei dort verdana.ttf. Sie können es im Internet finden und herunterladen oder mit den Materialien dieses Artikels aus dem Archiv entnehmen.

    Wir sind mit der HTML-Struktur fertig, es ist Zeit, weiterzumachen.

    Überprüfung der E-Mail-Gültigkeit mit jQuery

    Jedes Formular muss die Gültigkeit der eingegebenen Daten überprüfen, sowohl auf der Clientseite (mit JavaScript, jQuery) als auch auf der Serverseite.

    Besonderes Augenmerk müssen wir auf das E-Mail-Feld legen. Es ist sehr wichtig, dass die eingegebene Postanschrift gültig ist.

    Für dieses Eingabefeld legen wir den E-Mail-Typ (type="email") fest, dieser warnt uns leicht vor falschen Formaten. Dies reicht jedoch nicht aus, denn über den Code-Inspektor, den uns der Browser zur Verfügung stellt, können wir den Attributwert problemlos ändern Typ Mit Email An Text, und das war's, unser Scheck ist nicht mehr gültig.


    Und in diesem Fall müssen wir eine zuverlässigere Prüfung durchführen. Dazu verwenden wir die jQuery-Bibliothek von JavaScript.

    Um die jQuery-Bibliothek zu verbinden, in der Datei header.php zwischen Tags , vor dem schließenden Tag , fügen Sie diese Zeile hinzu:

    Unmittelbar nach dieser Zeile fügen wir den E-Mail-Validierungscode hinzu. Hier fügen wir einen Code hinzu, um die Länge des eingegebenen Passworts zu überprüfen. Die Länge muss mindestens 6 Zeichen betragen.

    Mithilfe dieses Skripts überprüfen wir die eingegebene E-Mail-Adresse auf Gültigkeit. Wenn der Benutzer eine falsche E-Mail-Adresse eingegeben hat, zeigen wir eine entsprechende Fehlermeldung an und deaktivieren die Schaltfläche zum Absenden des Formulars. Wenn alles in Ordnung ist, beheben wir den Fehler und aktivieren den Formular-Senden-Button.

    Damit sind wir mit der Formularvalidierung auf Kundenseite fertig. Jetzt können wir es an den Server senden, wo wir auch ein paar Prüfungen durchführen und Daten zur Datenbank hinzufügen.

    Benutzer Registration

    Wir senden das Formular zur Bearbeitung an die Datei registrieren.php, über die POST-Methode. Der Name dieser Handlerdatei wird im Attributwert angegeben Aktion. Und die Sendemethode wird im Attributwert angegeben Methode.

    Öffnen Sie diese Datei registrieren.php Und das erste, was wir tun müssen, ist, eine Sitzungsstartfunktion zu schreiben und die zuvor erstellte Datei zu verbinden dbconnect.php(In dieser Datei haben wir eine Verbindung zur Datenbank hergestellt). Lassen Sie uns außerdem sofort die Zellen deklarieren Fehlermeldungen Und success_messages im globalen Sitzungsarray. IN error_messages Wir erfassen alle Fehlermeldungen, die während der Formularverarbeitung auftreten, und in succes_messages, wir werden freudige Botschaften aufzeichnen.

    Bevor wir fortfahren, müssen wir prüfen, ob das Formular überhaupt übermittelt wurde. Ein Angreifer kann sich den Attributwert ansehen Aktion aus dem Formular und finden Sie heraus, welche Datei dieses Formular verarbeitet. Und vielleicht kommt ihm die Idee, direkt zu dieser Datei zu gelangen, indem er die folgende Adresse in die Adressleiste des Browsers eingibt: http://site_address/register.php

    Daher müssen wir im globalen POST-Array nach einer Zelle suchen, deren Name mit dem Namen unserer Schaltfläche „Registrieren“ aus dem Formular übereinstimmt. Dadurch prüfen wir, ob der Button „Registrieren“ angeklickt wurde oder nicht.

    Versucht ein Angreifer direkt auf diese Datei zuzugreifen, erhält er eine Fehlermeldung. Ich möchte Sie daran erinnern, dass die Variable $address_site den Namen der Site enthält und in der Datei deklariert wurde dbconnect.php.

    Der Captcha-Wert in der Sitzung wurde bei der Generierung in der Datei hinzugefügt captcha.php. Zur Erinnerung zeige ich Ihnen diesen Code aus der Datei noch einmal captcha.php, wobei der Captcha-Wert zur Sitzung hinzugefügt wird:

    Fahren wir nun mit der Verifizierung selbst fort. Im Ordner registrieren.php, innerhalb des if-Blocks, wo wir prüfen, ob auf die Schaltfläche „Registrieren“ geklickt wurde, bzw. wo der Kommentar „ angegeben ist“ // (1) Platz für den nächsten Codeabschnitt"wir schreiben:

    //Überprüfen Sie das empfangene Captcha //Entfernen Sie die Leerzeichen am Anfang und Ende der Zeile $captcha = trim($_POST["captcha"]); if(isset($_POST["captcha"]) && !empty($captcha))( //Vergleiche den empfangenen Wert mit dem Wert aus der Sitzung. if(($_SESSION["rand"] != $captcha) && ($_SESSION ["rand"] != ""))( // Wenn das Captcha nicht korrekt ist, kehren wir den Benutzer zur Registrierungsseite zurück und zeigen ihm dort eine Fehlermeldung an, dass er das falsche Captcha eingegeben hat . $error_message = "

    Fehler! Sie haben das falsche Captcha eingegeben

    "; // Fehlermeldung in der Sitzung speichern. $_SESSION["error_messages"] = $error_message; // Den Benutzer zur Registrierungsseite zurückbringen header("HTTP/1.1 301 Moved Permanently"); header("Location: " .$address_site ."/form_register.php"); //Stoppen Sie das Skript exit(); ) // (2) Platz für den nächsten Codeabschnitt )else( //Wenn das Captcha nicht übergeben wird oder leer ist, beenden Sie den Vorgang ("

    Fehler! Es gibt keinen Verifizierungscode, also einen Captcha-Code. Sie können zur Hauptseite gehen.

    "); }

    Als nächstes müssen wir die empfangenen Daten vom POST-Array verarbeiten. Zunächst müssen wir den Inhalt des globalen POST-Arrays prüfen, also ob es dort Zellen gibt, deren Namen mit den Namen der Eingabefelder aus unserem Formular übereinstimmen.

    Wenn die Zelle vorhanden ist, schneiden wir die Leerzeichen am Anfang und Ende der Zeile dieser Zelle ab. Andernfalls leiten wir den Benutzer zurück auf die Seite mit dem Registrierungsformular.

    Als nächstes, nachdem wir die Leerzeichen gekürzt haben, fügen wir die Zeile zur Variablen hinzu und prüfen, ob diese Variable leer ist. Wenn sie nicht leer ist, fahren wir fort, andernfalls leiten wir den Benutzer zurück auf die Seite mit dem Registrierungsformular.

    Fügen Sie diesen Code an der angegebenen Stelle ein. // (2) Platz für den nächsten Codeabschnitt".

    /* Überprüfen Sie, ob vom Formular gesendete Daten im globalen Array $_POST vorhanden sind, und packen Sie die übermittelten Daten in reguläre Variablen.*/ if(isset($_POST["first_name"]))( //Leerzeichen vom Anfang abschneiden und Ende der Zeichenfolge $first_name = trim($_POST["first_name"]); //Überprüfen Sie die Variable auf Leere if(!empty($first_name))( // Konvertieren Sie zur Sicherheit Sonderzeichen in HTML-Entitäten $first_name = htmlspecialchars($first_name, ENT_QUOTES) ; )else( // Fehlermeldung in der Sitzung speichern. $_SESSION["error_messages"] .= "

    Gib deinen Namen ein

    Das Namensfeld fehlt

    "; //Den Benutzer zur Registrierungsseite zurückbringen header("HTTP/1.1 301 Moved Permanently"); header("Location: ".$address_site."/form_register.php"); //Das Skript stoppen exit(); ) if( isset($_POST["last_name"]))( // Leerzeichen am Anfang und Ende der Zeile abschneiden $last_name = trim($_POST["last_name"]); if(!empty($last_name)) ( // Aus Sicherheitsgründen Sonderzeichen in HTML-Entitäten umwandeln $last_name = htmlspecialchars($last_name, ENT_QUOTES); )else( // Fehlermeldung in der Sitzung speichern. $_SESSION["error_messages"] .= "

    Bitte geben Sie ihren Nachnamen ein

    "; //Den Benutzer zur Registrierungsseite zurückbringen header("HTTP/1.1 301 Moved Permanently"); header("Location: ".$address_site."/form_register.php"); //Das Skript stoppen exit(); ) )else ( // Fehlermeldung in der Sitzung speichern. $_SESSION["error_messages"] .= "

    Das Feld „Nachname“ fehlt

    "; //Den Benutzer zur Registrierungsseite zurückbringen header("HTTP/1.1 301 Moved Permanently"); header("Location: ".$address_site."/form_register.php"); //Das Skript stoppen exit(); ) if( isset($_POST["email"]))( //Leerzeichen am Anfang und Ende der Zeile kürzen $email = trim($_POST["email"]); if(!empty($email)) ( $email = htmlspecialchars ($email, ENT_QUOTES); // (3) Codespeicherort zum Überprüfen des Formats der E-Mail-Adresse und ihrer Eindeutigkeit )else( // Speichern Sie die Fehlermeldung in der Sitzung. $_SESSION["error_messages"] .= "

    Geben sie ihre E-Mail Adresse ein

    "; //Den Benutzer zur Registrierungsseite zurückbringen header("HTTP/1.1 301 Moved Permanently"); header("Location: ".$address_site."/form_register.php"); //Das Skript stoppen exit(); ) )else ( // Fehlermeldung in der Sitzung speichern. $_SESSION["error_messages"] .= "

    "; //Den Benutzer zur Registrierungsseite zurückbringen header("HTTP/1.1 301 Moved Permanently"); header("Location: ".$address_site."/form_register.php"); //Das Skript stoppen exit(); ) if( isset($_POST["password"]))( // Leerzeichen am Anfang und Ende der Zeichenfolge kürzen $password = trim($_POST["password"]); if(!empty($password)) ( $password = htmlspecialchars ($password, ENT_QUOTES); //Das Passwort verschlüsseln $password = md5($password."top_secret"); )else( // Fehlermeldung in der Sitzung speichern. $_SESSION["error_messages"] .= "

    Geben Sie Ihr Passwort ein

    "; //Den Benutzer zur Registrierungsseite zurückbringen header("HTTP/1.1 301 Moved Permanently"); header("Location: ".$address_site."/form_register.php"); //Das Skript stoppen exit(); ) )else ( // Fehlermeldung in der Sitzung speichern. $_SESSION["error_messages"] .= "

    "; //Den Benutzer zur Registrierungsseite zurückbringen header("HTTP/1.1 301 Moved Permanently"); header("Location: ".$address_site."/form_register.php"); //Das Skript stoppen exit(); ) // (4) Platz für den Code zum Hinzufügen eines Benutzers zur Datenbank

    Von besonderer Bedeutung ist das Feld Email. Wir müssen das Format der empfangenen Postanschrift und ihre Einzigartigkeit in der Datenbank überprüfen. Das heißt, gibt es einen Benutzer mit derselben E-Mail-Adresse, der bereits registriert ist?

    Am angegebenen Ort“ // (3) Code-Standort zur Überprüfung des Formats der Postanschrift und ihrer Eindeutigkeit" Fügen Sie den folgenden Code hinzu:

    //Überprüfen Sie das Format der empfangenen E-Mail-Adresse mithilfe eines regulären Ausdrucks $reg_email = "/^**@(+(*+)*\.)++/i"; //Wenn das Format der empfangenen E-Mail-Adresse nicht mit dem regulären Ausdruck übereinstimmt if(!preg_match($reg_email, $email))( // Fehlermeldung in der Sitzung speichern. $_SESSION["error_messages"] .= "

    Sie haben eine falsche E-Mail-Adresse eingegeben

    "; //Den Benutzer zur Registrierungsseite zurückbringen header("HTTP/1.1 301 Moved Permanently"); header("Location: ".$address_site."/form_register.php"); //Das Skript stoppen exit(); ) // Wir prüfen, ob eine solche Adresse bereits in der Datenbank vorhanden ist. $result_query = $mysqli->query("SELECT `email` FROM `users` WHERE `email`="".$email."""); / /Wenn die Anzahl der empfangenen Daten genau eine Zeile beträgt, bedeutet dies, dass der Benutzer mit dieser E-Mail-Adresse bereits registriert ist if($result_query->num_rows == 1)( //Wenn das erhaltene Ergebnis nicht falsch ist if(($row = $result_query->fetch_assoc()) != false) ( // Fehlermeldung in der Sitzung speichern. $_SESSION["error_messages"] .= "

    Ein Benutzer mit dieser E-Mail-Adresse ist bereits registriert

    "; //Den Benutzer zur Registrierungsseite zurückbringen header("HTTP/1.1 301 Moved Permanently"); header("Location: ".$address_site."/form_register.php"); )else( // Fehlermeldung speichern zur Sitzung . $_SESSION["error_messages"] .= "

    Fehler bei der Datenbankabfrage

    "; //Den Benutzer zur Registrierungsseite zurückbringen header("HTTP/1.1 301 Moved Permanently"); header("Location: ".$address_site."/form_register.php"); ) /* Schließen der Auswahl */ $ result_query->close(); //Stoppen Sie das Skript exit(); ) /* Schließen der Auswahl */ $result_query->close();

    Nachdem wir alle Prüfungen abgeschlossen haben, ist es an der Zeit, den Benutzer zur Datenbank hinzuzufügen. Am angegebenen Ort“ // (4) Platz für den Code zum Hinzufügen eines Benutzers zur Datenbank" Fügen Sie den folgenden Code hinzu:

    //Abfrage zum Hinzufügen eines Benutzers zur Datenbank $result_query_insert = $mysqli->query("INSERT INTO `users` (first_name, last_name, email, password) VALUES ("".$first_name."", "".$last_name ." ", "".$email.", "".$password."")"); if(!$result_query_insert)( // Fehlermeldung in der Sitzung speichern. $_SESSION["error_messages"] .= "

    Fehler bei der Anfrage zum Hinzufügen eines Benutzers zur Datenbank

    "; //Den Benutzer zur Registrierungsseite zurückbringen header("HTTP/1.1 301 Moved Permanently"); header("Location: ".$address_site."/form_register.php"); //Das Skript stoppen exit(); )else( $_SESSION["success_messages"] = "

    Registrierung erfolgreich abgeschlossen!!!
    Jetzt können Sie sich mit Ihrem Benutzernamen und Passwort anmelden.

    "; //Sende den Benutzer zur Autorisierungsseite header("HTTP/1.1 301 Moved Permanently"); header("Location: ".$address_site."/form_auth.php"); ) /* Abschließen der Anfrage */ $ result_query_insert->close(); //Verbindung zur Datenbank schließen $mysqli->close();

    Wenn bei der Anfrage zum Hinzufügen eines Benutzers zur Datenbank ein Fehler aufgetreten ist, fügen wir der Sitzung eine Nachricht über diesen Fehler hinzu und leiten den Benutzer zur Registrierungsseite zurück.

    Andernfalls, wenn alles gut gelaufen ist, fügen wir der Sitzung auch eine Nachricht hinzu, aber dieses Mal ist es angenehmer, nämlich dass wir dem Benutzer mitteilen, dass die Registrierung erfolgreich war. Und wir leiten es auf die Seite mit dem Autorisierungsformular weiter.

    Das Skript zur Überprüfung des E-Mail-Adressformats und der Passwortlänge befindet sich in der Datei header.php, daher gilt es auch für Felder aus diesem Formular.

    Die Sitzung wird auch in der Datei gestartet header.php, also in der Datei form_auth.php Es ist nicht erforderlich, eine Sitzung zu starten, da sonst eine Fehlermeldung angezeigt wird.


    Wie bereits erwähnt, funktioniert hier auch das Skript zur Überprüfung des E-Mail-Adressformats und der Passwortlänge. Wenn der Benutzer daher eine falsche E-Mail-Adresse oder ein falsches Kurzpasswort eingibt, erhält er sofort eine Fehlermeldung. Ein Knopf betreten wird inaktiv.

    Nach Behebung der Fehler erscheint die Schaltfläche betreten wird aktiv und der Benutzer kann das Formular an den Server senden, wo es verarbeitet wird.

    Benutzerautorisierung

    Wert zuschreiben Aktion Für das Berechtigungshandicap ist eine Datei angegeben auth.php, bedeutet dies, dass das Formular in dieser Datei verarbeitet wird.

    Öffnen Sie also die Datei auth.php und schreiben Sie Code, um das Autorisierungsformular zu verarbeiten. Als Erstes müssen Sie eine Sitzung starten und die Datei verbinden dbconnect.php um eine Verbindung zur Datenbank herzustellen.

    Wenn Sie auf der Website auf den Exit-Link klicken, werden wir zu einer Datei weitergeleitet logout.php, wobei wir einfach die Zellen mit der E-Mail-Adresse und dem Passwort aus der Sitzung zerstören. Danach kehren wir den Nutzer zurück zu der Seite, auf der der Link angeklickt wurde Ausfahrt.

    Dateicode logout.php:

    Das ist alles. Jetzt wissen Sie, wie Sie Benutzerregistrierungs- und Autorisierungsformulare auf Ihrer Website implementieren und verarbeiten. Diese Formulare sind auf fast jeder Website zu finden, daher sollte jeder Programmierer wissen, wie man sie erstellt.

    Wir haben auch gelernt, wie man Eingabedaten validiert, sowohl auf der Clientseite (im Browser, mit JavaScript, jQuery) als auch auf der Serverseite (mit PHP). Wir haben auch gelernt, wie man ein Verfahren zum Verlassen der Website implementiert.

    Alle Skripte wurden getestet und funktionieren. Sie können das Archiv mit den Dateien dieser kleinen Site über diesen Link herunterladen.

    In Zukunft werde ich einen Artikel schreiben, in dem ich beschreiben werde. Und ich habe auch vor, einen Artikel zu schreiben, in dem ich es erklären werde (ohne die Seite neu zu laden). Um über die Veröffentlichung neuer Artikel auf dem Laufenden zu bleiben, können Sie meine Website abonnieren.

    Wenn Sie Fragen haben, wenden Sie sich bitte an mich. Wenn Ihnen im Artikel ein Fehler auffällt, teilen Sie mir dies bitte mit.

    Unterrichtsplan (Teil 5):

  • Erstellen einer HTML-Struktur für das Autorisierungsformular
  • Wir verarbeiten die erhaltenen Daten
  • Wir zeigen die Begrüßung des Benutzers im Site-Header an
  • Hat Ihnen der Artikel gefallen?

    Guten Tag! Jetzt werden wir versuchen, die einfachste Registrierung auf der Website mit PHP + MySQL zu implementieren. Dazu muss Apache auf Ihrem Computer installiert sein. Das Funktionsprinzip unseres Skripts ist unten dargestellt.

    1. Beginnen wir mit der Erstellung einer Benutzertabelle in der Datenbank. Es enthält Benutzerdaten (Login und Passwort). Gehen wir zu phpmyadmin (wenn Sie eine Datenbank auf Ihrem PC erstellen). http://localhost/phpmyadmin/). Wir erstellen eine Tabelle „users“ mit drei Feldern.

    Ich erstelle es in der MySQL-Datenbank, Sie können es in einer anderen Datenbank erstellen. Als nächstes stellen Sie die Werte wie in der Abbildung ein:

    2. Eine Verbindung zu dieser Tabelle ist erforderlich. Lassen Sie uns eine bd.php-Datei erstellen. Sein Inhalt:

    In meinem Fall sieht es so aus:

    Speichern Sie bd.php.
    Großartig! Wir haben eine Tabelle in der Datenbank und eine Verbindung dazu. Jetzt können Sie mit der Erstellung einer Seite beginnen, auf der Benutzer ihre Daten hinterlassen.

    3. Erstellen Sie eine reg.php-Datei mit dem Inhalt (alle Kommentare darin):



    Anmeldung


    Anmeldung


    Dein Login:




    Ihr Passwort:








    4. Erstellen Sie eine Datei, die Daten in die Datenbank eingibt und den Benutzer speichert. save_user.php (Kommentare darin):

    5. Jetzt können sich unsere Benutzer registrieren! Als nächstes müssen Sie eine „Tür“ erstellen, durch die bereits registrierte Benutzer die Site betreten können. index.php (Kommentare darin):




    Hauptseite


    Hauptseite


    Dein Login:


    Ihr Passwort:






    Registrieren



    OK, jetzt ist alles vorbei! Die Lektion mag langweilig sein, aber sehr nützlich. Hier wird nur die Idee der Registrierung gezeigt, dann können Sie sie verbessern: Sicherheit, Design, Datenfelder hinzufügen, Avatare laden, sich von Ihrem Konto abmelden (dazu einfach Variablen aus der Sitzung mit der Unset-Funktion zerstören) und bald. Viel Glück!

    Ich habe alles überprüft, es funktioniert einwandfrei!

    Formulare sind ein wesentlicher Bestandteil jeder Webanwendung. Wir verwenden sie zur Autorisierung und Registrierung eines neuen Benutzers, auf der Feedback-Seite, beim Veröffentlichen eines Kommentars und für viele andere Aufgaben. Sie zu erstellen und dann zu validieren, kann jedoch ein frustrierender Prozess sein – und hier kommt Laravel ins Spiel, das uns einige nette Klassen für die intuitive Arbeit mit Formularen und ihren Daten bietet.

    Formulare in Laravel erstellen

    Das Erstellen von Formularen in Laravel ist überraschend einfach. Meistens hindert Sie nichts daran, Standard-HTML-Tags zu verwenden, aber Laravel kann Ihnen das Leben erheblich erleichtern. Nehmen wir an, die PHP-Formularklasse verfügt über eine PHP-Methode label(), mit der Sie mithilfe der entsprechenden (automatisch generierten) IDs Beschriftungen mit Formularfeldern verknüpfen können. Lassen Sie uns als Beispiel ein einfaches Formular erstellen:

    PHP Registrieren!



    ?>

    Alles ist offensichtlich, nicht wahr? Wir öffnen das Formular POST-request auf der Registerroute, erstellen Sie mehrere Beschriftungen und Eingabefelder, fügen Sie einen CSRF-Schlüssel hinzu und schließen Sie dann das Formular. Wenn wir brauchen sicherer Weg(mit HTTPS), dann ersetzen wir den PHP Form :: open ()-Aufruf durch einen PHP Form :: open_secure ()-Aufruf, und wenn wir ein Formular zum Hochladen von Dateien erstellen müssen, wird PHP Form :: open_for_files () nützlich sein .

    Sie haben wahrscheinlich einige PHP Input::old()-Aufrufe bemerkt – wir werden darüber sprechen, aber denken Sie zunächst daran, dass sie da sind.

    Die Form-Klasse enthält viele Methoden zum einfachen Erstellen von Formularen – Sie können sie in der Dokumentation nachlesen.

    Cross-Site-Request-Forgery (CSRF)

    Ich werde nicht näher auf CSRF eingehen – Jeff Atwood hat einen sehr klaren Artikel darüber geschrieben, was es ist und wie man es vermeidet.

    Die Form::token()-Methode erstellt eine zufällige Zeichenfolge, speichert sie in den Sitzungsdaten (was bedeutet, dass Sie die Unterstützung dafür in application/config/session.php aktivieren müssen) und zeigt sie als verstecktes Formularfeld an. Bei der Verarbeitung einer Formularanfrage, die einen CSRF-Schlüssel verwendet, können wir mithilfe des integrierten CSRF-Filters überprüfen, ob die Anfrage von niemandem manipuliert wurde und ob sie tatsächlich vom Benutzer stammt.

    So sieht der Filtercode aus (Datei application/routes.php):

    PHP Route::filter("csrf", function() (
    if (Request :: forged ()) return Response :: error ( "500" );
    });

    Wir können es nach Bedarf anpassen, aber für diesen Artikel reicht ein Standard-Handler aus.

    PHP Route :: post ("register" , array("before" => "csrf" , function () (
    // Neue Benutzerregistrierung.
    }));

    Das ist alles, was wir brauchen, um den CSRF-Filter zu aktivieren – stellen Sie einfach sicher, dass er in der Vorher-Liste enthalten ist.

    Validierung der eingegebenen Daten

    Nachdem wir nun sichergestellt haben, dass die eingehende Anfrage vertrauenswürdig ist, müssen wir die Daten überprüfen, die der Benutzer in das Formular eingegeben hat. Kehren wir zu unserer Registerroute zurück, fügen dort ein Häkchen hinzu und dann erkläre ich, was was ist.

    Mehrere Personen haben darauf hingewiesen, dass die Validierung nicht im Controller erfolgen sollte. Normalerweise ist es am besten, dies in einem Modell zu tun – mein nächster Artikel, Erweiterte Eingabevalidierung in Laravel, beschreibt genau diese Art der Lösung des Problems.

    PHP // Datei application/routes.php.

    Route :: post ("register" , array("before" => "csrf" , function () (
    $rules = array(
    "username" => array("required" , "unique:users,username" ),
    "email" => array("required" , "email" , "unique:users,email" ),
    "password" => array("required" , "min:7" )
    );

    $validation = Validator::make(Input::all(), $rules);

    If ($validation -> schlägt fehl ()) (
    // Überprüfung fehlgeschlagen.
    return Redirect::to("register")->with_input()->with_errors($validation);
    }

    // Die Daten wurden überprüft – wir können einen neuen Benutzer erstellen.
    }));

  • Wir definieren eine Reihe von Regeln - Schlüssel entsprechen den Namen der Formulareingabefelder, Werte- die Regeln, die sie einhalten müssen. In unserem Fall muss das Feld „Benutzername“ ausgefüllt (erforderlich) und eindeutig (unique) sein.
  • Erstellen Sie ein PHP-Validator-Objekt – erster Parameter Es akzeptiert Daten zur Überprüfung (in unserem Fall Formulardaten, die über empfangen wurden). POST), zweite- einige Regeln.
  • Anschließend führen wir eine Überprüfung durch. Wenn diese fehlschlägt, leiten wir den Benutzer zurück zur Registrierungsroute (mit ERHALTEN) mit alten Eingabe- und Fehlermeldungen.
  • Wenn alle Felder korrekt ausgefüllt sind, registrieren wir ein neues Konto, autorisieren den Benutzer oder machen etwas anderes.
  • Die Abfolge der Aktionen, die wir hier ausführen, wird als PRG-Muster (Post/Redirect/Get) bezeichnet – es ist eine hervorragende Möglichkeit, doppelte Formularübermittlungen zu verhindern.

    Schauen wir uns nun die Regeln an, die wir oben definiert haben.

    Erforderlich – gibt an, dass das Feld ausgefüllt werden muss – mit anderen Worten, es muss einen Wert haben.

    einzigartig – das ist etwas komplizierter. Diese Regel benötigt 3 Parameter, von denen 2 weggelassen werden können. Der erste Parameter ist der Name der Tabelle, in der der Wert auf Eindeutigkeit überprüft werden soll; der zweite ist der Name des Feldes in der Tabelle, wenn er nicht mit dem Namen des Feldes im Formular übereinstimmt (in diesem Fall kann er übersprungen werden); Der dritte und letzte Parameter ist der Wert ( Ausweis) für den Primärschlüssel.

    Angenommen, wir aktualisieren ein bestehendes Benutzerprofil – wir möchten auch, dass seine E-Mail-Adresse eindeutig ist, aber wenn er beschließt, seine Adresse nicht zu ändern, sollten wir nicht sagen, dass die eingegebene E-Mail-Adresse bereits vergeben ist – von ihm. Dazu übergeben wir die Benutzer-ID – Laravel schließt den entsprechenden Eintrag von der Verifizierung aus.

    PHP $rules = array(
    "email" => array("required" , "email" , "unique:users,email," . $user -> id )
    );

    E-Mail – prüft, ob der eingegebene Wert eingehalten wird Sieht aus als ob an die korrekte E-Mail-Adresse, überprüft diese jedoch nicht Existenz.

    min – legt die minimal zulässige Länge des Werts dieses Felds fest.

    Eine vollständige Liste der verfügbaren Regeln finden Sie in der Dokumentation.

    Fehleranzeige

    Die PHP-Eigenschaft $validation ->errors enthält dasselbe Messages-Objekt mit allen in den Eingabedaten gefundenen Fehlern. Laravel erkennt, dass eine Weiterleitung durchgeführt wurde mit Fehlern und bindet dieses Objekt automatisch an Vorlage. Du wirst bald verstehen, was ich meine.

    Erinnern Sie sich an die PHP Input::old()-Aufrufe in ? Wenn wir eine Anfrage weiterleiten mit Eingabe Sie geben die Werte zurück, die der Benutzer zuvor in das Formular eingegeben hat. Wenn ich also sage, dass mein Name „Jason“ ist, die Registrierung aber nicht erfolgt ist, bleibt „Jason“ eingetragen, auch nachdem ich zurück zum Formular weitergeleitet werde. Großartig!

    Kennwortfelder verfügen zunächst nicht über einen Standardwert, Sie können diesen jedoch explizit über festlegen Attributarray:

    PHP echo Form :: Passwort ("Passwort" , Array("Wert" => Eingabe :: alt ("Passwort" )));

    Kehren wir zu unserem Formular zurück. Wie Sie sich erinnern, haben wir eine $errors-Variable – ein PHP-Messages-Objekt. Machen wir unser Formular benutzerfreundlicher, indem wir Fehler anzeigen, wenn es falsch ausgefüllt wurde:

    PHP Registrieren!

    Echo Form::open("register" , "POST" );

    echo Form::label ("username" , "Username" ) . Form::text("username" , Input::old("username" ));

    if ($errors -> has ("username")) (
    echo $errors -> first ("Benutzername" );
    }

    echo Form::label ("email" , "E-mail") . Form :: Text ( "email" , Input :: old ( "email" ));

    if ($errors -> has ("email")) (
    echo $errors -> first ("email" );
    }

    echo Form::label ("password" , "Password" ) . Form::password("password");

    if ($errors -> has ("password")) (
    echo $errors -> first ("password" );
    }

    echo Form::submit("Registrieren!");

    echo Form::token(). Form::close();

    ?>

    Meldungen werden nur angezeigt, wenn ein bestimmtes Feld Fehler enthält.

    Sie können die Nachricht in den gewünschten HTML-Code formatieren, indem Sie sie im zweiten Parameter übergeben:

    PHP echo $errors -> first ("username" , ":message" );

    Oder wenn Sie die erste Fehlermeldung für ein beliebiges Feld anzeigen möchten, nicht nur für den Benutzernamen :)); ?>

    PHP $errors -> all() gibt ein Array formatierter Nachrichten zurück, also verketten wir es zu einem String.

    Eigene Regeln und Fehler

    Oftmals müssen Sie eigene Regeln erstellen, um Eingaben zu validieren. Vor Laravel 3 erfolgte dies durch die Vererbung der Validator-Klasse und das Hinzufügen von Methoden zu ihr. Mit der Paketunterstützung war eine robustere Lösung erforderlich, um nicht viele Unterklassen zu erstellen. Laravel 3 ermöglicht Ihnen die Registrierung beliebiger Regeln mit PHP Validator::register():

    PHP // Dieser Code kann beispielsweise in application/start.php platziert werden:
    Validator :: register ("starts_with" , function ($attribute , $value , $parameters ) (
    return gets_with ($value, $parameters [ 0 ]);
    });

    In diesem einfachen Handler geben wir einfach „true“ zurück, wenn der Wert mit der angegebenen Zeichenfolge beginnt (als erster und einziger Parameter übergeben), andernfalls „false“. Einer der wenigen hier verwendeten globale Funktionen Laravel – PHP startet_with().

    Verwendung der neuen Regel:

    PHP $rules = array(
    "website" => array("required" , "starts_with:http://" )
    );

    Hier mussten wir das Feld als definieren obligatorisch("erforderlich") Darüber hinaus müssen wir der Datei application/sprache/en/validation.php eine Fehlermeldung hinzufügen:

    PHP „custom“ => array(
    "website_starts_with" => "Website muss mit http:// beginnen"
    )

    Oder Sie können dies tun, wenn Sie eine Validator-Instanz erstellen und diese an übergeben dritter Parameter:

    Also haben wir ein Formular erstellt, das sendet POST- eine Anfrage an unsere Route, wo die Eingabe vom Controller überprüft wird - der wiederum bei erkannten Fehlern den Client zurückschickt, die vorherige Eingabe speichert und die entsprechenden Meldungen anzeigt.



    Lesen Sie auch: