web-dev-qa-db-fra.com

Où trouver des informations sur les champs de tableaux dans $ _REQUEST?

Je viens juste de commencer à apprendre PHP et à faire des choses avec WordPress et je suis un peu confus quant aux informations contenues dans le Codex. On m'a dit que le Codex avait toutes les informations dont j'avais besoin, mais je me suis retrouvé coincé avec.

Quels champs de tableau sont dans $_REQUEST dans WordPress? Vous ne le trouvez pas dans le Codex.

Exemple: les gens utilisent $my_contact = $_REQUEST['contact'];
Comment savent-ils que $_REQUEST a 'contact' champ?

Existe-t-il un processus permettant de rechercher des informations sur des variables non décrites dans le Codex? Dois-je imprimer tous les tableaux pour voir quels champs sont à l'intérieur?

Google ne m'aide pas .. à propos de $ _REQUEST.

6
Rafal

Il s’agit principalement de PHP pur, mais il possède une torsion WordPress.

PHP a un nombre de superglobal variables , qui contient des informations pertinentes pour la requête en cours. Parmi ceux-ci:

  • $_GET contient les informations de l'URL (demande HTTP GET)
  • $_POST informations de soumission du formulaire (demande HTTP POST)
  • $_COOKIES à propos des cookies
  • et $_REQUEST est une combinaison des éléments ci-dessus (selon la documentation, $_COOKIES peut être configuré de manière à ignorer pour plus de sécurité)

Cependant, WP applique sa propre logique - pendant le processus de chargement wp_magic_quotes() traite les variables à émuler guillemets magiques setting et impose $_REQUEST afin qu'il contienne la combinaison de $_GET et $_POST, quoi que soit PHP configuration dit.

Donc, dans un environnement WordPress, il contiendra les données de requête GET et/ou POST. Les données exactes dépendront entièrement de la page sur laquelle vous vous trouvez et de ce qui se passe dessus.

10
Rarst

Juste une remarque à propos de $_REQUEST: chaque fois que vous voyez ceci dans un code, vous savez qu'il est écrit par un débutant. Comme @Rarst l'a expliqué, il s'agit d'une combinaison de plusieurs sources. Mais pourquoi devrait-on traiter des données qui devraient être envoyées par POST seulement s’ils sont effectivement envoyés par GET?

N'acceptez pas de données d'un flux d'entrée que vous n'avez pas déclaré auparavant. Utilisez $_GET si vous voulez obtenir GET et $_POST si vous voulez POST. Rien d'autre.

Pour accéder aux données POSTed sans l’intervention de WordPress, utilisez l’encapsuleur de flux en entrée php://input .
Alors, au lieu de…

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

… utilisation …

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

Et n'oubliez pas validation des données .

4
fuxia

Vous avez mentionné l'impression à partir du tableau, de sorte que vous savez peut-être déjà comment procéder. Vous pouvez voir tous les éléments d'un tableau dans PHP en exécutant print_r($_REQUEST);. Cela vous donnerait les informations exactes auxquelles chaque page a accès depuis $ _REQUEST.

Toutefois, il convient de noter que chaque page peut avoir un jeu de clés différent. En outre, il peut être intéressant d’écrire ceci dans un fichier journal temporaire, selon que vous êtes en production ou non. Vous ne voudriez pas que vos visiteurs voient cette sortie.

1
Styler

J'en avais besoin juste pour le test. Comme vous l'avez conseillé, tous les fichiers ont été écrits dans un fichier, utilisé avec le commentaire 'commentaire _post' pour s'assurer que $ _REQUEST dispose des données juste après la publication d'un commentaire.

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');
0
Rafal

Pour répondre à cette question suivante:

Comment savent-ils que $ _REQUEST a le champ 'contact'?

Ma réponse est la suivante:

Ils savent parce qu'ils ont écrit ce champ de saisie caché à l'intérieur du <form> (comme premier champ de saisie) comme ci-dessous:

<input type="hidden" name="contact" value="advanced">

Ils peuvent également activer leur modèle de recherche personnalisé au lieu de la valeur par défaut search.php en écrivant le code suivant dans functions.php

<?php
function wpse_load_custom_search_template(){
    if( isset($_REQUEST['contact']) == 'advanced' ) {
        require('advanced-search-result.php');
        die();
    }
}
add_action('init','wpse_load_custom_search_template');
?>

J'espère que cela vous aidera à comprendre comment ils savent quel champ $_REQUEST contient.

0
Subhasish Nath