Wo Informationen über Array-Felder in $ _REQUEST erhalten?

Ich habe gerade begonnen, PHP zu lernen und Dinge mit WordPress zu tun, und ich bin ein wenig verwirrt über Informationen in Codex. Es wurde mir gesagt, dass der Codex alle Informationen erhalten hat, die ich benötigt habe, aber ich habe mich nicht daran gehalten.

Welche Array-Felder befinden sich in $_REQUEST in WordPress? Kann im Codex nicht gefunden werden.

ZB: Leute benutzen $my_contact = $_REQUEST['contact'];
Woher wissen sie, dass $_REQUEST das Feld 'contact' hat?

Gibt es einen Workflow, um Informationen zu Variablen zu finden, die im Codex nicht beschrieben sind? Sollte ich das gesamte Array ausdrucken, um zu sehen, welche Felder drin sind?

Google hilft mir nicht .. über $ _REQUEST.

Solutions Collecting From Web of "Wo Informationen über Array-Felder in $ _REQUEST erhalten?"

Dies ist hauptsächlich reines PHP, aber es hat WordPress Twist.

PHP hat eine Anzahl superglobaler Variablen , die Informationen enthalten, die für die aktuelle Anfrage relevant sind. Aus diesen:

  • $_GET enthält Informationen von URL (HTTP GET Anfrage)
  • $_POST Informationen aus der Formularübertragung (HTTP POST-Anfrage)
  • $_COOKIES über Cookies gesetzt
  • und $_REQUEST ist eine Kombination der oben genannten (gemäß der Dokumentation $_COOKIES kann häufig konfiguriert werden, um für bessere Sicherheit zu überspringen)

WP erzwingt jedoch seine eigene Logik – während des wp_magic_quotes() verarbeitet wp_magic_quotes() Variablen, um magische Anführungszeichen zu emulieren und erzwingt $_REQUEST um eine Kombination von $_GET und $_POST zu enthalten, unabhängig von der PHP-Konfiguration.

Also in der WordPress-Umgebung wird es GET- und / oder POST-Anfragedaten enthalten. Welche Daten genau das sind, hängt ganz davon ab, auf welcher Seite Sie gerade sind und was darauf passiert.

Nur eine Anmerkung zu $_REQUEST : Wann immer du das in einem Code siehst, weißt du, dass es von einem Anfänger geschrieben wurde. Wie @Rarst erklärte, handelt es sich um eine Kombination mehrerer Quellen. Aber warum sollte jemand Daten verarbeiten wollen, die per POST gesendet werden sollen, wenn sie tatsächlich per GET gesendet werden?

Akzeptieren Sie keine Daten aus einem Eingabestream, die Sie zuvor nicht deklariert haben. Verwenden Sie $_GET wenn Sie GET und $_POST möchten, wenn Sie POST möchten. Nichts anderes.

Um auf POSTed-Daten ohne WordPress-Intervention zuzugreifen, verwenden Sie den Eingabe-Stream-Wrapper php://input .
Also, anstatt …

 // already changed by WordPress when you get it $data = $_POST; 

… benutzen …

 // Doesn't work with 'enctype="multipart/form-data"' $data = file_get_contents( 'php://input' ); 

Und vergessen Sie nicht die Datenvalidierung .

Sie haben erwähnt, dass Sie das Array ausdrucken, damit Sie es bereits wissen. Sie können alle Elemente eines Arrays in PHP sehen, indem Sie print_r($_REQUEST); . Dies würde Ihnen die genauen Informationen geben, auf die jede Seite von $ _REQUEST zugreifen kann.

Obwohl hier der Vorbehalt besteht, dass auf jeder Seite verschiedene Schlüssel gesetzt werden können. Es kann auch hilfreich sein, dies in eine temporäre Protokolldatei zu schreiben, abhängig davon, ob Sie sich in Produktion befinden. Sie möchten nicht, dass Ihre Besucher diese Ausgabe sehen.

Ich brauchte es nur für den Test. Hat, wie Sie empfohlen haben, alle Felder in eine Datei geschrieben und den Haken ‘comment_post’ verwendet, um sicherzustellen, dass $ _REQUEST Daten enthält, nachdem ein Kommentar gepostet wurde.

 function rj_comment() { // sprint_r as print_r function sprint_r($var) { ob_start(); print_r($var); $output=ob_get_contents(); ob_end_clean(); return $output; } global $_REQUEST; $stringData = sprint_r($_REQUEST); $myFile = "c:/s_request_fiels.txt"; #file name $fh = fopen($myFile, 'w') or die("can't open file"); fwrite($fh, $stringData); fclose($fh); }; add_action ('comment_post','rj_comment');