2017-09-27 3 views
0

À ma connaissance Input::post(); sans paramètres retourne un tableau contenant toutes les données à partir d'un poste spécifique ..Comment itérez-vous les données Input :: post()?

Je suis en train de faire ce $all_input = Input::post();

Mais je suis itérer à travers le réseau de type Java (est que la façon dont vous même le faire?)

for ($i=0; $i<count($all_input); $i++) 
    { 
     if (strpos($all_input[$i], 'something') == true) // ERROR... 

mais l'application se bloque avec l'erreur Undefined offset: 0 que je crois signifie que l'indice n'a pas été trouvé?

J'ai aussi essayé d'ajouter ce en vain:

if (!isset($all_input)) 
    { 
     return; 
    } 

Si oui, comment pouvez-vous accéder aux données à itérer eux? Je sais qu'il contient des données parce que je peux les voir quand j'appuie sur le bouton pendant le débogage sur le navigateur si je supprime ce code.

Si vous ne l'avez pas déjà le découvrir que je viens de développeur Java et je viens de commencer à apprendre php donc garder avec moi s'il vous plaît ...

+1

Votre '$ all_input' est probablement un tableau associatif, et vous essayez d'accéder à l'index 0 dans if, qui n'existe probablement pas. 'var_dump ($ all_input)' - pour vérifier quelles données vous avez là – ArtOsi

Répondre

1

Selon ceci: https://fuelphp.com/docs/classes/input.html#/method_postInput::post(); retournera $_POST qui est un tableau assoc. Voici le code source, car la documentation de fuelphp ne le couvre pas exactement.

/** 
* Fetch an item from the POST array 
* 
* @param string $index The index key 
* @param mixed $default The default value 
* @return string|array 
*/ 
public static function post($index = null, $default = null) 
{ 
    return (func_num_args() === 0) ? $_POST : \Arr::get($_POST, $index, $default); 
} 

Vous devez consulter vos noms d'entrée, donc si vous avez dans ce cas, une entrée que vous appelez « nom », vous devez consulter $all_input['name']. Vous pouvez obtenir vos clés en utilisant la fonction array_keys(). Il est également préférable d'utiliser foreach dans cette situation. Comme:

foreach($all_input as $key => $value) { 
    echo 'Input key: ' . $key . ' value: ' . $value; 
} 

Si vous avez quitté le $key => vous obtiendrez seulement la valeur, vous pouvez gauche, si vous ne l'utilisez pas à l'intérieur du foreach.

Si vous ne souhaitez pas utiliser foreach Pour certaines raisons: recommander

$all_input = Input::post(); 
$keys = array_keys($all_input); 
for ($i = 0; $i < count($keys); $i++) { 
    if (strpos($all_input[$keys[$i]], 'something') == true) { 
     // Do your stuff here. 
    } 
} 

Mais je reste foreach si possible, il y a moins de frais généraux et un code plus propre.

+0

C'est la première fois que j'entends parler de tableaux assoc. Intéressant. Si je connais les paramètres à transmettre, disons 'Input :: post ('key')' mais le $ _POST renvoie beaucoup de variables seront-ils tous stockés dans 'array ['key'] [0] = $ value' etc? –

+0

Pourquoi dans le monde citez-vous les docs CodeIgniter si OP a tagué la question avec FuelPHP?La syntaxe est exactement la même que celle de FuelPHP, oui - tout comme les principes qui la sous-tendent - mais cela peut être déroutant pour un débutant comme OP. – patricksweeney

+0

@patricksweeney ouais ... c'est vrai, donc j'ai inclus le code source et le code source, car il ne dit pas exactement la documentation ... – golddragon007

0

Cela ne fonctionnera pas parce que vous avez affaire à un objet (Entrée) pas un tableau.

Je recommande d'utiliser une boucle foreach une boucle for. Pour vérifier le contenu/la structure de l'objet d'entrée, vous pouvez également faire un dd() pour voir l'objet d'entrée dans son intégralité.

Fondamentalement,

$input = Input::post(); 

foreach($input as $i) { 

    echo $i; //this is a property of the Input Object. if you have arrays or other objects store inside of it, you may need to go deeper into the oject either with a foreach loop again or by calling the property directly ($i->property) 

};