PHP holt alle Get-Parameter. Externe Variablen (Variablen außerhalb von PHP). Übergeben von Variablen an PHP mithilfe der POST-Methode

Die erste Methode zum Ausführen einer PHP-POST-Anfrage ist die Verwendung von file_get_contents . Die zweite Methode verwendet fread in Kombination mit einigen anderen Funktionen. Beide Optionen verwenden die Funktion stream_context_create, um die erforderlichen Anforderungsheaderfelder auszufüllen.

Code-Erklärung

Die Variable $sPD enthält die zu übertragenden Daten. Es muss im HTTP-Anforderungszeichenfolgenformat vorliegen, daher müssen einige Sonderzeichen codiert werden.

Sowohl in der Funktion file_get_contents als auch in der Funktion fread haben wir zwei neue Parameter. Der erste ist use_include_path . Da wir eine HTTP-Anfrage stellen, ist diese in beiden Beispielen falsch. Wenn die Funktion auf true gesetzt ist, um eine lokale Ressource zu lesen, sucht sie unter include_path nach der Datei.

Der zweite Parameter ist context, der mit dem Rückgabewert von stream_context_create gefüllt wird, der den Wert des $aHTTP-Arrays annimmt.

Verwenden von file_get_contents, um POST-Anfragen zu stellen

Um eine POST-Anfrage mit file_get_contents in PHP zu senden, müssen Sie stream_context_create verwenden, um die Header-Felder manuell auszufüllen und anzugeben, welcher „Wrapper“ verwendet werden soll – in diesem Fall HTTP:

$sURL = "http://brugbart.com/Examples/http-post.php"; // POST-URL $sPD = "name=Jacob&bench=150"; // POST-Daten $aHTTP = array("http" => // Wrapper, der verwendet wird array("method" => "POST", // Anforderungsmethode // Anforderungsheader werden unter "header" => "Content" gesetzt - Typ: application/x-www-form-urlencoded", "content" => $sPD)); $context = stream_context_create($aHTTP); $contents = file_get_contents($sURL, false, $context); echo $contents;

Fread verwenden, um POST-Anfragen zu stellen

Sie können die fread-Funktion verwenden, um POST-Anfragen zu stellen. Im folgenden Beispiel wird stream_context_create verwendet, um die erforderlichen HTTP-Anforderungsheader zu erstellen:

$sURL = "http://brugbart.com/Examples/http-post.php"; // POST-URL $sPD = "name=Jacob&bench=150"; // POST-Daten $aHTTP = array("http" => // Wrapper, der verwendet wird array("method" => "POST", // Anforderungsmethode // Anforderungsheader werden unter "header" => "Content" gesetzt - Typ: application/x-www-form-urlencoded", "content" => $sPD)); $context = stream_context_create($aHTTP); $handle = fopen($sURL, "r", false, $context); $contents = ""; while (!feof($handle)) ( $contents .= fread($handle, 8192); ) fclose($handle); echo $contents;

GET-Anfragen mit PHP stellen

Wir konzentrieren uns nun auf die Verwendung von fread und file_get_contents zum Herunterladen von Inhalten aus dem Internet über HTTP und HTTPS. Um die in diesem Artikel beschriebenen Methoden verwenden zu können, müssen Sie die Option fopen wrappers aktivieren. Dazu müssen Sie den Parameter „allow_url_fopen“ in der Datei „php.ini“ auf „Ein“ setzen.

Das Ausführen von POST- und GET-Anfragen in PHP wird verwendet, um sich bei Websites anzumelden, Webseiteninhalte abzurufen oder nach neuen Versionen von Anwendungen zu suchen. Wir behandeln, wie Sie einfache HTTP-Anfragen stellen.

Verwenden von Fread zum Herunterladen oder Empfangen von Dateien über das Internet

Denken Sie daran, dass das Lesen von Webseiten auf den zugänglichen Teil des Pakets beschränkt ist. Sie müssen also die Funktion stream_get_contents (ähnlich file_get_contents ) oder eine While-Schleife verwenden, um den Inhalt in kleineren Blöcken zu lesen, bis das Ende der Datei erreicht ist:

In diesem Fall der Verarbeitung einer PHP-POST-Anfrage entspricht das letzte Argument der fread-Funktion der Fragmentgröße. In der Regel sollte er nicht größer als 8192 (8*1024) sein.

von get(9)

Was ist eine „weniger Code“-Methode, um Parameter aus einer URL-Abfragezeichenfolge abzurufen, die so formatiert ist?

www.mysite.com/category/subcategory?myqueryhash

Die Ausgabe sollte sein: myqueryhash

Ich weiß darüber Bescheid:

www.mysite.com/category/subcategory?q=myquery

Antworten

Dieser Code und die Notation stammen nicht von mir. Evan K löst einen gleichnamigen mehrwertigen Job mit einer benutzerdefinierten Funktion auf;) entnommen aus:

Das obige Beispiel gibt Folgendes aus:

Hallo Hannes!

Wenn Sie die gesamte Abfragezeichenfolge erhalten möchten:

$_SERVER["QUERY_STRING"]

Wenn Sie außerdem nach dem aktuellen Dateinamen zusammen mit der Abfragezeichenfolge suchen, benötigen Sie lediglich Folgendes

Basisname($_SERVER["REQUEST_URI"])

Dadurch erhalten Sie Informationen wie im folgenden Beispiel

file.php? arg1 = Wert & arg2 = Wert

Und wenn Sie auch den vollständigen Pfad zur Datei benötigen, beginnend im Stammverzeichnis, z. B. /folder/folder2/file.php?arg1=val&arg2=val, dann entfernen Sie einfach die Funktion basename() und verwenden Sie einfach Overlay

$_SERVER["REQUEST_URI"]

Danke @K. Shahzad Dies ist hilfreich, wenn Sie die Abfragezeichenfolge ohne Umschreibungszusätze umschreiben möchten. Nehmen wir an, Sie schreiben /test/? um. X = y in index.php? Q = test & x = y und Sie möchten die Abfragezeichenfolge erhalten.

Funktion get_query_string())( $arr = explosion("?",$_SERVER["REQUEST_URI"]); if (count($arr) == 2)( return ""; )else( return "?".end( $ arr)."
"; ) ) $query_string = get_query_string();

Der PHP-Weg, dies zu tun, besteht darin, die Funktion parse_url zu verwenden, die eine URL analysiert und ihre Komponenten zurückgibt. Einschließlich der Abfragezeichenfolge.

$url = "www.mysite.com/category/subcategory?myqueryhash"; echo parse_url($url, PHP_URL_QUERY); # Ausgabe „myqueryhash“

Hier ist meine Funktion zum Wiederherstellen von Teilen der REFERRER-Abfragezeichenfolge.

Wenn die aufrufende Seite bereits eine eigene Abfragezeichenfolge hatte und Sie zu dieser Seite zurückkehren müssen und einige, nicht alle, dieser $_GET-Variablen senden möchten (z. B. Seitennummer).

Beispiel: Die Referrer-Abfragezeichenfolge lautete?foo=1&bar=2&baz=3. Der Aufruf von refererQueryString("foo" , "baz") gibt foo=1&baz=3" zurück:

Funktion refererQueryString(/* var args */) ( //Leere Zeichenfolge zurückgeben, wenn kein Referrer oder keine $_GET-Variablen im Referrer verfügbar sind: if (!isset($_SERVER["HTTP_REFERER"]) || empty($_SERVER["HTTP_REFERER " "]) || empty(parse_url($_SERVER["HTTP_REFERER"], PHP_URL_QUERY))) ( return ""; ) // URL-Abfrage des Referrs abrufen (so etwas wie "threadID=7&page=8") $refererQueryString = parse_url ( urldecode($_SERVER["HTTP_REFERER"]), PHP_URL_QUERY); //Welche Werte möchten Sie extrahieren? (Sie haben ihre Namen als Variablen übergeben.) $args = func_get_args(); //Holen Sie sich „“-Strings of referer" s URL: $pairs = explosion("&",$refererQueryString); //String, den Sie später zurückgeben: $return = ""; //Abgerufene Strings analysieren und nach den interessierenden suchen: foreach ($pairs as $pair ) ( $keyVal = explosion("=",$pair); $key = &$keyVal; $val = urlencode($keyVal); //Wenn Sie den Namen als arg übergeben haben, fügen Sie das aktuelle Paar an die Rückgabezeichenfolge an : if( in_array($key,$args)) ( $return .= "&". $key . "=" .$val; ) ) //Hier sind Ihre zurückgegebenen „key=value“-Paare zusammengeklebt mit „&“ ": return ltrim($return,"&"); ) //Wenn Ihr Referrer „page.php?foo=1&bar=2&baz=3“ war //und Sie header() zurück zu „page.php?foo=1&baz=3“ //(kein „bar“, nur foo und baz), dann apply: header("Location: page.php?".refererQueryString("foo","baz"));

Der Microsoft-Support gibt an: „Die maximale URL-Länge beträgt 2083 Zeichen im Internet Explorer.“

IE hat schon länger Probleme mit URLs. Firefox scheint mit mehr als 4.000 Zeichen gut zu funktionieren.

Bei der Webprogrammierung handelt es sich größtenteils nur um die Verarbeitung verschiedener vom Benutzer eingegebener Daten, also um die Verarbeitung von HTML-Formularen.
Es gibt wahrscheinlich keine andere Sprache wie PHP, die Ihnen die Verarbeitung und Analyse so viel einfacher machen würde, d. h. Variablen, die von (vom Browser des Benutzers) stammen. Tatsache ist, dass alle notwendigen Funktionen in die PHP-Sprache integriert sind, sodass Sie nicht einmal über die Funktionen des HTTP-Protokolls nachdenken und darüber nachdenken müssen, wie Sie POST-Formulare senden und empfangen oder sogar Dateien herunterladen. Die PHP-Entwickler haben für alles gesorgt.

Auf den Mechanismus des HTTP-Protokolls, das für die Übermittlung von Daten vom Browser zum Server und zurück verantwortlich ist, gehen wir hier nicht im Detail ein; diesem PHP und HTTP ist ein spezieller Abschnitt gewidmet. Auch die Prinzipien der Arbeit mit HTML-Formularen werden ausführlich besprochen.

Jetzt werden wir diese Mechanismen nur aus angewandter Sicht betrachten, ohne uns mit der Theorie zu befassen.

Um Daten von Nutzern zu erhalten, benötigen wir eine interaktive Interaktion mit ihnen.

Versuchen wir nun, ein Skript zu schreiben, das einen Benutzernamen als Parameter akzeptiert und Folgendes ausgibt:

"Hallo, !".

Schauen wir uns zunächst den einfachsten Weg an, einen Namen an ein Skript zu übergeben – die direkte Eingabe in die URL nach dem ? - zum Beispiel im Format name=name . Hier ist ein Beispiel:

http://localhost/script.php?name=name

Unser Skript muss den Namensparameter erkennen. Vereinfacht ausgedrückt muss das Skript (Skript) den Namensparameter in Form der Namensvariablen akzeptieren und dann die Zeichenfolge „Hallo,!“ im Browser des Benutzers anzeigen. Sie können es so machen:

Wir schreiben ein Skript, das den Namensparameter übernimmt, das Ergebnis im Browser des Benutzers anzeigt und es dann unter dem Namen script.php speichert:

In unserem Beispiel haben wir die vordefinierte Variable $_GET["name"] verwendet, um den Namensparameter zu "empfangen". Wenn wir nun den Parameter name=Sasha über eine GET-Anfrage übergeben, erhalten wir das folgende Ergebnis:

Hallo Sascha!

Versuchen wir nun, den Namensparameter nicht aus der Browser-Abfragezeichenfolge, sondern über ein HTML-Formular zu übergeben. Wir erstellen ein HTML-Dokument mit folgendem Inhalt:


Name:

Speichern wir nun dieses HTML-Dokument auf unserem Testserver (localhost) unter dem Namen send.html im selben Verzeichnis, in dem wir bereits das Skript script.php gespeichert haben.

Jetzt starten wir das HTML-Dokument im Browser:

http://localhost/send.html

Geben Sie den Namen in das Feld ein und klicken Sie auf die Schaltfläche „GO!“. Das Formular übergibt den Namensparameter über eine GET-Anfrage an unser Skript script.php. Wenn Sie alles richtig gemacht haben und Ihr Webserver normal funktioniert, sehen Sie den von Ihnen eingegebenen Namen im Formularfeld! In der Adressleiste des Browsers sehen Sie den Pfad und den von Ihnen übergebenen Namensparameter.

Jetzt müssen wir verstehen, wie wir viele Parameter übergeben können, zunächst mindestens zwei.

Wir benötigen also das Skript, um Folgendes auszugeben:

„Hallo! Du bist alt!“

Das heißt, wir müssen dem Skript zwei Parameter übergeben: Name und Alter.

Jetzt schreiben wir eine script.php, die zwei Parameter benötigt: Name und Alter, sowie ein HTML-Dokument mit einem Formular, das diese beiden Parameter an unser neues Skript übergibt:

Und hier ist das HTML-Dokument send.html, mit dem wir die Namens- und Altersparameter an unser Skript übergeben:



Gib deinen Namen ein:

Alter eingeben:



Nun nimmt unser Skript zwei Parameter namens und Alter und zeigt das Ergebnis im Browser im Format an: „Hallo,! Bist du alt!“

Achten Sie auf die Adressleiste des Browsers, nachdem Sie die Parameter an das Skript übergeben haben. Sie sieht etwa so aus (ohne kyrillische URL-Kodierung):

http://localhost/script.php?name=Sasha&age=23

Abhängig von Ihren Interpretereinstellungen gibt es mehrere Möglichkeiten, auf Daten aus Ihren HTML-Formularen zuzugreifen. Hier sind einige Beispiele:

//Im Formular senden wir mit der get-Methode den Wert 1 über ein verstecktes Feld. Senden Sie eine Anfrage

get.php-Datei

PHP-Anfragebeitrag

Die PHP-Post-Anfrage wird ebenfalls über ein Formular gesendet, nur das Attribut im Formular-Tag lautet method="post" . Und wir erhalten die Daten in der angegebenen Datei aus dem Post-Array $_POST["search"] und geben sofort ein Beispiel.

Aufgabe: Senden Sie Daten von index.php mit der POST-Methode an den Server in der Datei get.php und empfangen Sie sie zurück. Wenn das Datensendefeld leer ist, zeigen Sie eine Meldung über das leere Feld an. Beginnen wir die Lösung mit index.php

Suchanfrage

Füllen Sie das Anfragefeld aus

Eingegebene Abfrage:

Anfrage senden

get.php-Datei

AJAX-Array-Übergabe

Lassen Sie uns die gleiche Aufgabe mit Ajax erledigen. Eigentlich ist Ajax eine mit Javascript verwandte Technologie, aber im Rahmen des Hinweises zur Datenübertragung zum Server werden wir auch auf diese Technologie eingehen. Natürlich ist Ajax ein Thema für einen separaten Artikel. Während des Anfragevorgangs zeigen wir auch ein GIF der Ladeanzeige an. Wir haben auch zwei Dateien index.php und get.php. Index.php-Datei. Vergessen Sie nicht, JQuery zu verbinden. Bitte beachten Sie, dass Sie dem Box-Block den Stil display: none zuweisen müssen, um das GIF beim ersten Laden der Seite auszublenden

$(document).ready(function())( //wir fügen ein Ereignis an die Schaltfläche „Senden“ an $(".submit").click(function())( $.ajax(( //wie wir den Datentyp übertragen : „GET“, //wo wir die URL übergeben: „get.php“, //welche Daten wir übergeben data: (Flag: 1), //Ereignis vor dem Senden von Ajax beforeSend: function())( //ein GIF anzeigen $(".box").show( ); ), //Ereignis nach Erhalt einer Antwort, //Array in Daten abrufen Erfolg: function(data)( //gif ausblenden $(".box").hide (); var html = ""; //f- i JSON.parse übersetzt JSON-Daten in ein Objekt var dt=JSON.parse(data); for (var i = 0; i

Die get.php-Datei. Wir empfangen Daten vom Get-Array in die Datei und übergeben das Array von PHP an Javascript. Um ein Array an PHP an JS zu übergeben, muss es in das JSON-Format konvertiert werden. Dazu verwenden wir die PHP-Funktion json_encode. Nach der Neucodierung wird JSON über PHP-Mittel gesendet, insbesondere durch den Aufruf von Echo.

Ich habe eine URL-Struktur mit einer Abfragezeichenfolge und einem Parameter namens Position.

Http://computerhelpwanted.com/jobs/?occupation=administrator&position=network+administrator

Ich habe auch ein Formularauswahl-Dropdown mit dem Formularauswahlnamen position .

Wählen Sie die Position „Administrator“. Wählen Sie die Position „Netzwerkadministrator“.

Wenn der Benutzer eine Auswahl trifft, sendet er die Parameterwerte an das Aktionsattribut mit select name="position" als Parameter, der in der Abfragezeichenfolge verwendet werden soll.

Meine Frage ist, wie ich getrennt von den Abfragezeichenfolgenwerten auf die Formularauswahlwerte zugreifen kann.

Ich verwende die _GET-Methode, um einen Wert aus einem Abfragezeichenfolgenparameter aufzurufen.

$position = isset($_GET["position"]) ? ($_GET["position"]) : "";

Offensichtlich erhält dies seinen Wert von der URL-Struktur, nicht vom Formularelement. Oder vielleicht ist es das, ich bin mir nicht sicher. Aber beim Testen bin ich anscheinend zu dem Schluss gekommen, dass es über die URL und nicht über das Formular abgerufen wird.

Wie kann ich beim Vergleich in meinem PHP auf den Auswahlwert des Formulars zugreifen?

Aktualisieren

Ich habe ein Problem mit der im Header angegebenen kanonischen URL.

So soll es sein

Der einzige Unterschied besteht im - und + in der Abfragezeichenfolge.

Nicht alle meine Abfragezeichenfolgen haben +. Manche haben -. Aber ich zeige Inhalte auf beiden URLs an, unabhängig davon, ob sie ein - oder + haben. So oder so erhalten beide URLs den gleichen Seiteninhalt.

Da das Canonical aber dynamisch aus der URI und nicht aus dem Wert des Formularelements erstellt wird, gibt es auf beiden Inhaltsseiten 2 unterschiedliche Canonical-Zeichen.

Mit _Get('value') wird der Wert aus der Abfragezeichenfolge statt aus dem Formularelement abgerufen. Ich weiß das, weil der Formularelementwert ein Leerzeichen zwischen Netzwerkadministrator enthält, das urlencodiert wird, wenn das Formular als Netzwerk+Administrator gesendet wird. Wenn ich also mit dem Formularelementwert vergleichen kann, kann ich den richtigen kanonischen Wert festlegen.