2010-11-11 12 views
0

J'ai travaillé sur l'écriture d'une fonction qui récupère les valeurs POST d'une soumission de formulaire donnée, les place dans un tableau, boucle dans le tableau en utilisant trim, addslashes, etcetera renvoie cette valeur à une variable où elle peut ensuite être passé à une base de données.Rendre les valeurs POST dynamiques dans une boucle pour les stocker en tant que matrice?

Maintenant l'obstacle que j'ai avec atm est d'obtenir toutes les données d'entrée, de zone de texte, de sélection d'élément dans un tableau lors de la soumission du formulaire. Code je suit

$fields = array($_POST['1'], $_POST['2']); 

    $i = 0; 
    foreach ($fields as $field) { 
     $i++; 
     ${'field'.$i } = trim(addslashes(strip_tags($field))); 
     echo "POST field info #". $i ."&nbsp;-&nbsp;". ${'field'.$i }."<br />"; 
    } 

Comme vous pouvez le voir tout est bien ici Baring que les noms de valeur POST sont encore en cours dans roulés statiquement, ce que j'ai besoin est un moyen d'obtenir que les données POST introduites dans une boucle dynamique appelle le nom du POST à ​​l'aide d'une variable d'incrément, puis affiche toutes ces données dans le même tableau. Code J'ai essayé ci-dessous.

for ($ii=0;$ii++;) { 
    foreach($_POST['$ii'] as $field) { 
     $fields = array($field); 
    } 
} 

    $i = 0; 
    foreach ($fields as $field) { 
     $i++; 
     ${'field'.$i } = trim(addslashes(strip_tags($field))); 
     echo "POST field info #". $i ."&nbsp;-&nbsp;". ${'field'.$i }."<br />"; 
    } 

Maintenant, je sais que cela ne marchera pas, mais je sens que je suis relativement proche, donc je me demande si une personne intelligente peut me aider à trier la dernière partie à? Je vais malheureusement dormir maintenant et ne pas regarder ce poste pendant au moins 9 heures, excuses.

Merci d'avance.

Dan.

Répondre

0

Vous devez assigner des valeurs à $ _POST [1] et $ _POST [2] pour commencer, je l'ai fait pour vous mais normalement ils seraient remplis à partir d'un formulaire que je suppose? Je ne sais pas pourquoi vous voulez faire ce genre de chose: $ {'field'. $ Key}, mais j'ai laissé cette partie telle quelle, car je suppose que vous devez avoir une raison.

Quoi qu'il en soit, j'ai un peu modifié votre code, voir ci-dessous.

$_POST['1'] = '<h1>variable 1</h1>'; 
$_POST['2'] = '<h2>variable 2</h2>'; 

foreach($_POST as $key => $value){ 
    ${'field'.$key} = trim(addslashes(strip_tags($value))); 
    echo "POST field info #". $key ." = ". ${'field'.$key}."<br />"; 
} 

Les sorties de code ci-dessus:
POST champ d'information n ° 1 = Variable 1
POST informations sur le terrain # 2 = variable 2

Sur une note de côté, en utilisant les noms de champs tels que '1' et '2' n'est pas très bon. Essayez d'utiliser quelque chose de plus descriptif, mais comme je l'ai dit plus haut, je suppose que vous avez une raison de le faire.


MISE À JOUR: Vous pouvez toujours obtenir ce travail pour toute forme même si vous utilisez des noms spécifiques pour les éléments de formulaire. J'ai ajouté quelques lignes ci-dessous comme exemple pour vous.

$_POST['email'] = '[email protected]'; 
$_POST['password'] = 'hgbks78db'; 
$_POST['name'] = ''; 

foreach($_POST as $key => $value){ 
    if($value==''){ 
     echo 'POST field "'.$key . '" is empty<br />'; 
     /* I added the name of the field that is empty to an error array 
     so you have a way of storing all blank fields */ 
     $a_error[] = $key; 
    } 
    else{ 
     echo 'POST field "'.$key . '" is not empty<br />'; 
    } 
} 
+0

Merci Drew pour votre réponse, je vais essayer ce soir après le travail. Votre correcte les éléments de formulaire sont nommés dans le formulaire comme d'habitude, maintenant la raison pour laquelle j'opte pour les noms d'éléments génériques est que la fonction de validation de formulaire fonctionnera pour n'importe quelle forme sur un site en toute circonstance. J'ai un site prévu qui aura une population de 15 formes et de les valider tous personnellement avec des noms d'éléments spécifiques, à savoir "email" ou "mot de passe" prendrait beaucoup de lignes de code. Ma mission est d'optimiser ceci :) – zealisreal

+0

Salut Drew, votre code a bien fonctionné pour ce que vous avez posté, mon seul souci est que l'utilisation de $ _POST générique signifie que la valeur de l'élément submit est également publiée dans le cadre de cette boucle $ _POST, savez-vous comment je serais en mesure de contourner le tableau $ _POST indexant cette valeur? – zealisreal

+0

Ignorer cela, j'ai trouvé la réponse, je viens de désactiver le $ _POST ['form'] avant la boucle. – zealisreal

2
$arrayOfPostValues = $_POST; // it already is an array 
$arrayOfPostValues = array_map('strip_tags', $arrayOfPostValues); 
$arrayOfPostValues = array_map('trim', $arrayOfPostValues); 

Ou, si vous avez vraiment, vraiment envie d'utiliser une boucle:

foreach ($arrayOfPostValues as &$value) { 
    $value = trim(striptags($value)); 
} 

Je conseille absolument contre l'utilisation de addslashes, il sert très peu d'utilité. Utilisez mysql_real_escape_string ou prepared statements à la place.

Je conseille également de ne pas casser les valeurs de la matrice en variables séparées, cela ne peut que causer des problèmes. Si vous voulez vraiment le faire, il y a la fonction extract, qui fait exactement cela. Mais, encore une fois, ne le faites pas. Les tableaux sont le moyen idéal pour gérer ce type de données.

+0

Merci pour la réponse deceze, je vais avoir un aller à ce soir, voir comment il se trouve pour moi, ne vous inquiétez pas j'utiliser mysql_real_escape_string normalement, mais pour le test, je ne suis pas se connecter à un db atm si l'aide que ne ferait que vomir une erreur. – zealisreal