Informationsübertragung zwischen Webseiten
Wichtige Punkte dieses Kapitels
Warum verbreitet sich HTTP weiter?
GET-Parameter
Eine andere URL im GET-Stil
Umgang mit Formularvariablen
PHP-Super-Array
Dieses Kapitel ist einfach. Lernen Sie ein wenig etwas über den Datenaustausch zwischen Webseiten. Solche Informationen gelten nicht nur für PHP, sondern sind ein wichtiger Bestandteil des PHH/HTML- oder HTTP-Protokolls selbst.
HTTP ist zustandslos
Eines der wichtigsten Dinge, die Sie bei Webdiensten beachten sollten, ist, dass das HTTP-Protokoll selbst zustandslos ist. Wenn Sie eine poetische Seele haben, könnten Sie sagen, dass jede HTTP-Anfrage für sich allein ist, ohne Zuhause, wie ein völlig Unbekannter … Sie kennen das. Für die weniger Poetischen unter uns bedeutet dies, dass jede HTTP-Anfrage (jede Anfrage und jeder Seitentransfer) unabhängig von allen anderen Inhalten ist, keine Kenntnis von der Identität des Clients hat und kein Gedächtnis hat. Jede Anfrage generiert einen unabhängigen Prozess, schließt einen Dateidienst ab, eine scheinbar kleine, aber wichtige Aufgabe, und verschwindet dann automatisch (das klingt sehr rücksichtslos, vielleicht kann man es als „Rückkehr in einen verarbeitbaren Zustand“ bezeichnen).
Selbst wenn die Website mit einer sehr lockeren einseitigen Navigation gestaltet ist (Seite 1 führt zu Seite 2, Seite 2 führt zu Seite 3 usw.), weiß die PTTP-Unterstützung nie und kümmert sich nie darum, ob jemand Seite 2 durchsucht. Ab Seite 1. Daher können Sie auf Seite 1 keine Variablen festlegen, die über den HTML-Code selbst in die Seite importiert werden sollen. Sie können HTML verwenden, um ein Formular anzuzeigen und das Formular zum Eingeben einiger Informationen zu verwenden. Sofern Sie jedoch keine andere Methode verwenden, um die Informationen auf eine andere Seite oder ein anderes Programm zu übertragen, verschwinden die Variablen, sobald Sie zu einer anderen Seite wechseln.
Aus diesem Grund werden Formularverarbeitungstechnologien wie PHP importiert. PHP kann von einer Seite an eine andere übergebene Variablen abrufen und weiterverwenden. PHP-Funktionen sind bei dieser Art von Datenübertragungsfunktion sehr gut, was die Erledigung verschiedener Website-Aufgaben schneller und einfacher macht.
HTML-Formulare sind die nützlichste Methode auf einer Website, um einige Daten von einer Webseite weiterzugeben. Es gibt viele weitere dauerhafte Möglichkeiten, den Status über viele Webseiten hinweg aufrechtzuerhalten, wie z. B. Cookies und Sitzungen, die wir weiter unten besprechen werden Kapitel 1 Kapitel 27 stellt diese Funktionen vor. Dieses Kapitel konzentriert sich auf grundlegendere Techniken zum Übertragen von Informationen zwischen Webseiten, nämlich die Verwendung von HTTP sowie GET- und POST-Methoden zum dynamischen Generieren von Webseiten und Verarbeiten von Daten.
Wenn ASP-Programmierer das sehen, sagen sie vielleicht „PHP ist scheiße!“, weil die Sitzungsvariable, die sie in ASP verwendet haben, sehr magisch ist. Damit soll niemandes Blase platzen, aber Microsoft plant, Cookies zum Speichern von Sitzungsvariablen zu verwenden, aber das öffnet die Tür zu allen potenziellen Problemen.
GET-Parameter
Die GET-Methode behandelt Parameter als URI-Abfragezeichenfolge [Uniform Resource Indicator, konsistenter Ressourcenindikator; manche Leute sind eher daran gewöhnt, URI (Uniform Resource Indicator, konsistenter Ressourcen-Locator)] zu verwenden Teil einer Seite, der von einer Seite zur anderen weitergegeben wird. Bei Verwendung für die Formularverarbeitung hängt GET die Variablennamen und -werte an die im ACTION-Attribut angegebene URL an, wobei Fragezeichen (?) als Trennzeichen verwendet werden, und übermittelt den gesamten Inhalt an die Technologie, die die Verarbeitung bereitstellt (in diesem Fall Webserver).
Dies ist ein Beispiel für ein HTML-Formular, das die GET-Methode verwendet (speichern Sie die Datei in team_select.html):
< HTML >
<
< TITLE >Ein GET-Beispiel, Teil 1< /TITLE >
< /HEAD >
< ; FOPM ACTION = http://localhost/baseball.php METHOD = „GET“ >
< P >Root, root, root für :< BR >
< SELECT NAME = „Team“ SIZE=2 >
Wenn der Benutzer eine Auswahl trifft und auf die Schaltfläche „Senden“ klickt, fügt der Browser diese Elemente in der folgenden Reihenfolge ohne Leerzeichen dazwischen zusammen:
Nach dem Wort ACTION zeigt die in Anführungszeichen eingeschlossene URL (http://localhost/baseball.php)
Fragezeichen (?) an, dass die folgenden Zeichen die GET-Zeichenfolge
bilden
NAME-Variable, Gleichheitszeichen und passender VALUE (Team = Cubbies)
„&“-Symbol und das nächste Paar von „NAME = VALUE“ (Submit = Submit); solange der Server das abfragt Je nach Länge der Zeichenfolge können diese durch & getrennten Name-Wert-Kombinationen viele Male wiederholt werden.
Dadurch entsteht eine URL-Zeichenfolge wie diese:
(http://locahost/baseball .php ? Team = Cubbies&Submit = Select)
wobei die Zeichenfolge neu wird Die Anfrage wird an den Adressraum des Browsers gesendet. Nachdem das obige Formular übermittelt wurde, ruft das PHP-Skript (baseball.php), das das Formular verarbeitet, die GET-Variablen vom Ende der Anforderungszeichenfolge ab und führt entsprechende Vorgänge für diese Variablen aus. Im folgenden Beispiel werden zwei Werte verwendet wird in die Literalzeichenfolge eingefügt.
Der folgende Programmcode ist der von PHP verwendete Formularverarbeitungsteil:
< HTML >
< TITLE >Ein GET-Beispiel, Teil 2< /TITLE >
< >
BODY {font-size: 24pt;}
-- >
< /STYLE >
< /HEAD >
< KÖRPER >
< ?php echo $_GET['Team'];? >
< /BODY >
< /HTML >
Schließlich sollten Sie „Go, Cubbies“ in großen Buchstaben auf der Seite sehen.
Die GET-Methode bei der Formularverarbeitung hat einen viel größeren Vorteil als die POST-Methode: Sie erstellt eine wirklich neue und völlig andere URL-Abfragezeichenfolge. Auf diese Weise können Benutzer diese Seite mit einem Lesezeichen versehen (dieses zu sehen, kann die Moral stärken, wenn das Entwicklungsteam deprimiert ist). Ergebnisse, die aus einem Formular mithilfe der POST-Methode erhalten wurden, können nicht mit einem Lesezeichen versehen werden.
Nur weil Sie GET-Parameter verwenden können, um das zu erreichen, was Sie wollen, heißt das nicht, dass Sie dies auch tun sollten. Für die meisten Formularhandler sind die Mängel der GET-Methode so gravierend, dass dies in der ursprünglichen offiziellen HTML 4.0-Spezifikation nicht der Fall war Dafür, es zu nutzen. Zu diesen Mängeln gehören:
GET ist nicht für die Anmeldung (Anmeldung) geeignet, da der Benutzername und das Kennwort ausgeblendet und im Speicher des Client-Browsers als aufgerufene Seiten gespeichert werden und auch auf dem Bildschirm angezeigt werden. Vollständig sichtbar.
Jede GET-Übermittlung wird im Webserver-Protokoll aufgezeichnet, einschließlich des Datensatzes.
Da GET Daten Serverumgebungsvariablen zuordnet, ist die Länge der URL begrenzt. Sie können sich vorstellen, wie eine sehr lange URL aussieht, wenn Sie GET verwenden, aber in Wirklichkeit möchte niemand versuchen, mit dieser Methode einen HTML-Artikel mit dreihundert Wörtern zu liefern.
Die ursprüngliche HTML-Spezifikation beschränkte die Länge der Abfragezeichenfolge auf 255 Zeichen. Obwohl die Beschränkung auf 255 Zeichen später gelockert wurde, ist die Verwendung sehr langer Zeichenfolgen wirklich problematisch.
Nach vielen Debatten kehrte W3 immer noch dazu zurück, die GET-Methode bei der Formularverarbeitung zu verwenden, hauptsächlich aufgrund der Lesezeichenfunktion. Obwohl die GET-Methode immer noch die Standardauswahl für die Formularverarbeitung ist, empfehlen wir, sie nur dort zu verwenden, wo keine Nebenwirkungen auftreten. Wenn man die beiden Vor- und Nachteile zusammenfasst, sollte die am besten geeignete Verwendung für die Verwendung von GET zur Verarbeitung von Formularen eigentlich das „Suchfeld“ sein. Sofern Sie überhaupt keinen Grund haben, die GET-Methode in einem Nicht-Suchformular-Handler zu verwenden, verwenden Sie stattdessen die POST-Methode.
Eine bessere Verwendung von URLs im GET-Stil
Obwohl empfohlen wurde, die GET-Methode nicht für die Formularverarbeitung zu verwenden. Der damit verbundene URL-Stil ist jedoch immer noch sehr nützlich für die Website-Navigation, insbesondere für Websites mit dynamischer Werbung, wie z. B. Websites, die häufig mit PHP erstellt werden. Da die URL im variablen Format angehängt wird, eignet sie sich sehr gut für Vorlagen wie Grundlage. Content-Entwicklungssystem.
Wie im folgenden Beispiel gezeigt, gehen wir davon aus, dass Sie eine Website mit vielen Informationen über Solarautos betreiben und ein langes und konsistentes Format mit informationsreichen und verlockenden Seiten wie folgt gespeichert haben:
suspension_design.html
windtunnel_testing.html
friction_braking.html
Aber wenn die Größe der Website zunimmt, wird eine so einfache Archiv-Website-Struktur viel Zeit in Anspruch nehmen verwalten, da einige triviale Änderungen auf jeder Seite wiederholt werden müssen. Wenn die Struktur dieser Seiten sehr einfach ist, können Sie die Site mit PHP in ein vorlagenbasiertes System umwandeln.
Sie können sich dafür entscheiden, eine einzige Vorlage zu verwenden, um Textdateien für jedes Thema (einschließlich Informationen, Fotos, Meinungen usw.) zu trennen:
topic.php
suspension_design . inc
windtunnel_testing inc
friction_braking inc
Oder Sie entscheiden sich für eine größere, spezifischere Beispieldatei:
php inc
racing .php
race _strategy .
Eine einfache Vorlage könnte wie dieses Beispiel aussehen (da wir die erforderliche .inc-Textdatei nicht eingebunden haben, wird diese Datei nicht wirklich funktionieren):
< HTML >
< HEAD >
< TITLE > TYPE= „text/css“ >
< !-
BODY{font:verdana;font – size:12pt}
< TABLE BORDER = 0 CELLPADDING = 0 WIDTH = 100 % >
< YR >
< #4282B4“ ALIGN = CENTER VALIGN=TOP WIDTH=25% >
< P >
< B >Reibungsbremsung< /B < /A >
< BR >
< A HREF = "mechanical_syatems.php ?Name = Steering" < ;B >Lenkung
<< A HREF = „mechanical_systems .php ? Name = Suspension“ <
< A HREF = „mechanical_systems .php ? Name =tires“ >< B >Reifen und Räder< /B >
< BR >
< /TD >
<
< TD BGCOLOR = „#FFFFFF“ ALIGN = LEFT VALIGN=TOP WIDTH = 75% >
< ?php include(“$_GET['Name'].inc“ 🎜>
< /TABLE >
<
Bitte beachten Sie, dass der Browser beim Klicken auf den Link in der Navigationsleiste so verarbeitet wird, als ob er einen GET-Handler übermittelt hätte.
Für diese Lösung müssen Sie jedoch noch einen Teil des Programmcodes manuell ändern: um sicherzustellen, dass jede enthaltene Datei im richtigen HTML-Format vorliegt, und um die Navigationsleiste jedes Mal hinzuzufügen, wenn eine neue Seite hinzugefügt wird die Website Neue Verbindungen und andere ähnliche Inhalte. Grundsätzlich sollten Sie Form und Inhalt so weit wie möglich trennen. Sie können sich auch für die Verwendung einer Datenbank entscheiden. Bei Verwendung einer Datenbank würde die URL so aussehen:
(http://localhost/topic .php ?topicID = 2)
Sie würde auf ein PHP-Beispiel verweisen, das Datenbankaufrufe verarbeitet .-Version (die Verwendung numerischer Variablen anstelle von Wörtern beschleunigt die Abfrage der Datenbank). Wenn der Datenbank ein neues Thema hinzugefügt wird, fügt das System Links zur Navigationsleiste hinzu, sodass alle Webseiten ohne manuelle Arbeit generiert werden können (das Wort „alle“ ist hier etwas übertrieben, aber es spart Menschen und unnötige Arbeit). der Zeit).
POST-Parameter
POST ist derzeit eine relativ gute Formularverarbeitungsmethode, die sich besonders für Situationen eignet, die nicht auf einmal verwendet werden müssen (geben Sie einige Daten oder Funktionen für die Langzeitverarbeitung an), wie z wie beim Erstellen einer Datenbank Verarbeitung von Informationen hinzufügen. Wenn die Formulardaten an den Handler (in diesem Fall PHP) übergeben werden, werden sie in den Formularkörper eingefügt. Wenn die übermittelten Informationen unterschiedlich sind, werden keine Änderungen in der URL angezeigt.
Die POST-Methode hat die folgenden Vorteile:
◎ Sie ist sicherer als GET, da die Fehlermeldung in der URL-Abfragezeichenfolge, im Serverprotokoll oder auf dem Bildschirm (wenn Vorsichtsmaßnahmen getroffen werden, Zum Beispiel wird immer das Kennworteingabeformat von HTML verwendet, um das Kennwortfeld auszudrücken. Die vom Benutzer eingegebenen Informationen sind nicht sichtbar.
◎ Die Grenze für die Datenmenge, die übergeben werden kann, ist lockerer (bis zu 2.000 Tupel, nicht nur über 200 Zeichen).
POST hat jedoch auch einige Nachteile:
◎ Die Ergebnisse können nicht als Lesezeichen markiert werden.
◎ Diese Methode ist mit einigen Firewall-Einstellungen nicht kompatibel. Aus Sicherheitsgründen entfernt die Firewall bestimmte Formulardaten.
In diesem Buch verwenden wir konsequent die POST-Methode zum Verarbeiten von Formularen, insbesondere wenn wir die SQL-Syntax zum Schreiben in eine Datei oder INSERT verwenden, um Daten in das System einzugeben. Wir verwenden die GET-Methode nur in den Browsing- und Suchfeldern der Website. Mit anderen Worten, der Zeitpunkt der Verwendung besteht darin, Daten in den Datenspeicherort zu schreiben und die Webseite anzuzeigen POST-Methode.
GET- und POST-Methoden gleichzeitig verwenden
Wussten Sie schon? PHP ermöglicht die Verwendung von GET- und POST-Variablen auf derselben Seite. Sie können also gerne dynamische Formulare schreiben!
Aber das wirft sofort eine Frage auf: Was passiert, wenn in den GET- und POST-Arrays derselbe Variablenname verwendet wird (absichtlich oder aus anderen Gründen)? Wenn Sie die Anweisung „register_globals“ in Ihrer PHP-INI-Datei auf „on“ setzen, speichert PHP Variablen wie ENVIRONMENT, GET, POST, COOLIE und SERVER im Array $GLOBAL. Wenn ein Konflikt auftritt, basiert dieser auf dem, was Sie festgelegt haben wird gelöst, indem der Inhalt der Variablen in einer bestimmten Reihenfolge neu angeordnet wird, indem die Option „variable_order“ in Ihrer php.ini festgelegt wird. Letzteres ersetzt ersteres. Wenn Sie also den Standardwert „EGPCS“ verwenden, ersetzt POST GET und COOKIE ersetzt POST. Sie können die Reihenfolge der Ersetzung steuern, indem Sie die Reihenfolge der Buchstaben in dieser Datei entsprechend anpassen Es ist besser, register_globals auszuschalten und die neuen superglobalen Arrays von PHP zu verwenden, die wir in den folgenden Abschnitten behandeln werden.
Variablenhandhabung in PHP
PHP ist für die Datenübergabe sehr effizient, da sich die Entwickler für ein sehr praktisches, aber (theoretisch) etwas kompliziertes Design entschieden haben. Beim Senden eines Datensatzes mit der GET- oder POST-Methode gibt PHP automatisch und unsichtbar die Variablen auf der neuen Seite an. Bei den meisten anderen Programmiersprachen kann der Programmierer eine explizit angegebene Verarbeitung auf der Seite durchführen. Wenn die Spezifikation vergessen oder falsch geschrieben wird, werden die Informationen nicht an den Verarbeitungsagenten weitergeleitet. Im Vergleich dazu ist PHP schneller, einfacher und narrensicherer.
Aufgrund einer solchen automatischen Variablenspezifikation müssen Sie jedoch immer ein gutes NAME-Attribut für jedes INPUT-Steuerelement erhalten. Tatsächlich ist das NAME-Attribut für HTML auch ohne es funktionsfähig. Die Daten haben jedoch keine Funktion, da die NAME-Formularfeldattribute dieses HTML die Variablennamen des Formularhandlers sind.
Mit anderen Worten, die folgende Form:
< FORM ACTION = "< ?php echo $_SERVER['PHP_SELF']; ? >" METHOD = "POST" >
< INPUT TYPE="text" NAME="email" > ;
< INPUT TYPE="submit" NAME="Submit" VALUE="Send" >
< /FORM >
E-Mail-Textfeld wird Veranlassen Sie PHP, die Variable $_OPET['email'] (oder $HTTP_POST_VARS['email'], wenn Sie Array-Variablen im alten Stil verwenden, oder sogar $email, wenn Sie register_globals aktivieren) zu generieren, wenn das Formular gesendet wird, ähnlich Ja, Durch Klicken auf die Schaltfläche „Senden“ wird auf der nächsten Webseite die Variable „$_POST ['submit‘]“ generiert. Der Name, den Sie im HTML-Formular verwenden, wird zum variablen Formularfeld für Ihre PHP-Formularverarbeitung.
Eine weitere Sache, die Sie beim Generieren von HTML-Formularen beachten sollten: Wenn Sie möchten, dass das Formular vor dem Ausfüllen den Anfangstext anzeigt, müssen Sie das VALUE-Attribut festlegen. Dies ist besonders nützlich bei zwei Arten von Formularen: Formulare, die eingegeben werden Daten in eine Datenbank und Formulare, die mehr als einmal gesendet werden. Letzteres tritt häufig auf, wenn das Formular erneut angezeigt werden muss, wenn ein Eingabefehler auftritt. Beispielsweise wird ein zur Anmeldung verwendetes Formular erst dann in das Formular übernommen, wenn es verwendet wird. Eine gültige E-Mail-Adresse oder andere relevante Informationen können gesendet werden.
Zum Beispiel ist das folgende Formular (das als Rententabelle verwendet wird) so konzipiert, dass es mehrmals gesendet wird, während der Benutzer die Informationen ausfüllt. Jedes Mal, wenn Sie das Formular senden, werden die Informationen verwendet, die Sie beim vorherigen Mal eingegeben haben Die Ausschussmaterialien werden automatisch ausgefüllt. Bitte beachten Sie das VALUE-Attribut des Formularfelds im folgenden Programmbeispiel.
< HTML >
< HEAD >
< TITLE >Ein POST-Beispiel: Arbeitsblatt zur Altersvorsorge< /TIELE >
< STYLE TYPE = „text.css“ >
< :18pt; Farbe:rot🎜>
< /STYLE >
< php
//Dieser Test prüft zusammen mit dem Wert der Schaltfläche „Senden“ im Formular unten
//überprüft, ob das Formular zum ersten Mal gerendert wird
//(in diesem Fall wird nur der standardmäßige Jahresgewinn
//ausgefüllt angezeigt)
If (!IsSet($_POST[′Submit?])||$_POST [′Senden?]!=′Berechnen?){
$_POST['CurrentAge'] = "";
$_POST['RetieAge']= "";
$_POST['Contrib'] = "";
$Total = 7;
}else{
$AnnGain = $_POST['AnnGain'];
$Years = $_POST['RetireAge'] - $_POST['CurrentAge'];
$YearCount = 0;
$Total = $_POST['Countrib '];
While($YearCount<= $Years){
$Total = Round($Total *(1.0 + $AnnGain/100)+$_POST['Contrib']) ;
$YearCount = $YearCount+1;
}
? >
< BODY >
< BIV ALIGN = CENTER ID = Divl class = Rubrik >A Ruhestand – Sparrechner
< /DIV >
< > Geben Sie alle Werte ein (außer „Notgroschen“) und sehen Sie, wie viel Geld Sie in verschiedenen Szenarien für Ihren Ruhestand haben. Sie können die Werte beliebig oft ändern und das Formular erneut einreichen Geben Sie die beiden Variablen „Alter“ ein. Die Variable „Jahresrendite“ hat einen inflationsbereinigten Standardwert (7 % = 8 % Wachstum minus 1 % Inflation), den Sie ändern können, um Ihren größeren Optimismus oder Pessimismus widerzuspiegeln.< >
< FORM ACTIIN = „“ METHOD="POST" >
< P >Ihr Alter jetzt:< INPUT TYPE="text" SIZE= 5 NAME= "CurrentAge" VALUE = "" < < ?php echo $_POST['RetireAge'];? 〈 INPUT TYPE="text" SIZE=15 NAME="Contrib" VALUE= " < ?php echo $_POST[?Contrib?]; ? > " >
< P > : < INPUT TYPE==“text“SIZE=“AnnGain ”< php echo > >
< P >< INPUT TYPE=“submit“ NAME=“Submit“ VALUE=“Calculate“ > ;
< /FORM >
< /BODY >
< /HTML >
Abbildung 9-1 Zeigt die Ergebnisse des obigen Programms an.
Abbildung 9-1: Formular mit Methoden und VALUE-Attributen
Verbesserung von Formularen und Formularverarbeitung
Wie Sie im obigen Programm sehen können, handelt es sich normalerweise um HTML-Formulare und -Formulare Es ist einfacher, die Handler in dasselbe Programm zu integrieren. Beispielsweise wird auf Ihrer Anmeldeseite eine Fehlermeldung angezeigt. Wenn Sie den Formularhandler trennen, müssen Sie möglicherweise zusätzlich GET-Variablen umleiten Wenn Sie die Formularbedienung verbessern, können Sie die Anzeige einfacher steuern, ohne einen solchen Mechanismus zu verwenden.
Wenn Sie das Formular erweitern, sollte der Formularhandler erscheinen, bevor das Formular angezeigt wird. Einige Leute denken vielleicht, dass das Formular zuerst entworfen und dann der Handler umgekehrt werden sollte, aber wenn Sie der hier beschriebenen Vorgehensweise folgen, Sie werden die Logik verstehen, Sie müssen es Ihnen ermöglichen, zuerst die Variablen zu benennen und Auswahlen zu treffen, bevor Sie das Formular anzeigen. Dies ist nützlich, wenn Sie den Benutzer in manchen Fällen über die Funktion header() auf eine andere Webseite weiterleiten müssen , da diese Entscheidung getroffen werden muss, bevor eine HTML-Ausgabe im Browser angezeigt wird.
Das Obige ist der Inhalt des PHP-Lernhandbuchs – Kapitel 9. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website (www.php.cn)!