Aide sur les variables($) variables(adj)

Aide sur les variables($) variables(adj) - PHP - Programmation

Marsh Posté le 14-10-2005 à 11:06:33    

Salut,
 
 
[b]Pb:Afin de nettoyer mon code, j'essayes désespérement de réaliser des variables variables.
Utilisation: C'est pour un formulaire qui contient plusieurs champs de même nature que je veux sauvegarder dans une Base.
NB: j'arrive à le faire en tapant pour chaque <input type=text name=reponse_a>,reponse_b,c,d...etc. ma requête SQL mais je voudrais générer les noms des INPUT afin de tout mettre dans une boucle en 15 lignes de code au lieu de tout marquer puisque tout se ressemble
 
Voilà mon code:

Code :
  1. //genère les noms des variables a,b,c,d...à partir du code ASCII
  2. //ici pour simplifier, seulement une variable
  3. for($i=97;$i<98;$i++)
  4.     {
  5.     //pour simplifier: admettons que mon  <INPUT type=text name=reponse_a>, renvoie ce texte:
  6.     $reponse_a="test";
  7.     //le code ASCII pour la lettre 'a'
  8.     $a="&#$i";
  9.     //je crée ma variable $b en fonction de $a
  10.    $b='$reponse_'.$a.'';
  11.    
  12.     //Requête SQL
  13.     //Sauvegarde dans la base                                                                                                                                                                                                     
  14.    $sauver_reponse="INSERT INTO a000_questions (ID,ID_THEME,ID_AGEGROUP,ID_SEMESTER,ID_MAIN_QUESTION,ORDER_NUM,WORDING,POINTS,ID_QUESTION_TYPE,PROP_NUM,ASK_NUM,MALUS_POINTS,AUTHOR,NOTES,DATE) VALUES ('','','','','','','$b','','','','','','','','')";
  15.    
  16.     //affichage de la requête (pour regarder ce qu'il se passe)
  17.     $out.="$sauver_reponse <BR> ";
  18.     //exécution de la requête
  19.    $result = mysql_query($sauver_reponse) or die(mysql_error());
  20.     }
  21. echo $out;


 
à l'affichage de la requête on pense que tout va bien:
(ID,ID_THEME,ID_AGEGROUP,ID_SEMESTER,ID_MAIN_QUESTION,ORDER_NUM,WORDING,POINTS,ID_QUESTION_TYPE,PROP_NUM,ASK_NUM,MALUS_POINTS,AUTHOR,NOTES,DATE) VALUES ('','','','','','','$reponse_a','','','','','','','','')
 
seulement dans la base de donnée le code enregistre: "reponse_&#97" au lieu de "test"
 
Question: Comment faire pour enregistrer la valeur du champ au lieu du nom de la variable?
L'aide de php précise l'utilisation d'accolades mais les combinaisons que j'ai essayé ne donnent rien, les noms de variables disparaissent même!
De l'aide SVP.


Message édité par protoss_tth le 14-10-2005 à 11:14:28
Reply

Marsh Posté le 14-10-2005 à 11:06:33   

Reply

Marsh Posté le 14-10-2005 à 11:11:55    

le contenu de la variable $b est $reponse_a  
donc la valeur de $reponse_a est dans $$b  ( honnetement, je trouve ca moche, mais c'est legal )  
 
tu peux aussi faire $b = ${"reponse_".$a} auquel cas $b = test


---------------

Reply

Marsh Posté le 14-10-2005 à 11:23:51    

donc si j'ai bien compris tu veux connaitre la valeur de la variable (comme d'hab) mais aussi le nom de la variable (i.e. le nom de l'input du formulaire) ?
Comme php peux générer automatiquement un tableau en fonction des paramètres postés
pourquoi tu fais pas un truc du genre :

Code :
  1. <input type="hidden" name="reponses[0][name]" value="reponse0">
  2. <input type="text" name="reponses[0][value]">
  3. <input type="hidden" name="reponses[1][name]" value="reponse1">
  4. <input type="text" name="reponses[1][value]">

auquel cas tu auras un tableau  

Code :
  1. print_r($_POST['reponses']);
  2. /*
  3. Array (
  4.   [0] => Array (
  5.       [name] => reponse0
  6.       [value] => foo
  7.   )
  8.   [1] => Array (
  9.       [name] => reponse1
  10.       [value] => bar
  11.   )
  12. )
  13. */


 
edit : mouais, ou plus simple

Code :
  1. <input type="text" name="reponses[reponse1]">


auquel cas tu auras un tableau  

Code :
  1. Array (
  2.   [reponse1] => foo
  3. )


Message édité par shakpana le 14-10-2005 à 11:29:04
Reply

Marsh Posté le 14-10-2005 à 11:53:48    

flo850: oui c'est dans cette direction que je recherche la solution.
seulement $b ne me livre rien...
j'ai essayé aussi en remplaçant également $a="&#$i;"; par  $a=${"&#".$i.";"};
rien ne s'affiche ni à l'ecran ni dans la base.
 
shakpana: je connais le nom de la variable puisque je la crée, sa valeur également puisque je la tape dans le champ. Je veux l'enregistrer dans la base de données au moyen d'une boucle qui me génèrera les noms de variables sans taper pour chaque réponse mes requêtes SQL.
la modification de la déclaration de mes champs pour avoir un array serait peut-être une solution mais je voudrais faire ca avec proprement avec des variables.

Reply

Marsh Posté le 14-10-2005 à 11:57:40    

tu as fait afficher $$b  ? ( ie le contenu de la variable representée par $b ) ?
 
edit : et la solution de shakpana me semble plus propre et plus lisible


Message édité par flo850 le 14-10-2005 à 11:58:22

---------------

Reply

Marsh Posté le 14-10-2005 à 12:14:08    

oui, avec $$b il m'affiche "$" et avec $b rien du tout

Reply

Marsh Posté le 14-10-2005 à 12:43:29    

Ouais bon quitte à travailler avec des Array autant le faire avec $http_post_vars['reponse_a'] je vais voir ce que ca donne
EDIT:
voilà j'ai changé l'approche et j'essaye d'une autre façon:

Code :
  1. <?php
  2. $out .="<FORM action=\"" .$_SERVER['PHP_SELF']. "\" method=\"POST\" enctype=\"text/html\" >
  3.                                             <TABLE border=\"1\">
  4.                                                 <TR><TD>a.</TD><TD valign=\"top\"><!-- reponse_a --> <input type=\"text\" name=\"reponse_a\" size=\"20\" value=\"" .$_POST['reponse_a']. "\"/></TD></TR>
  5.                                                 <INPUT TYPE=\"Submit\" Name=\"sauver\" value=\"sauver\"/>
  6.                                             </TABLE>
  7.     </FORM>";
  8. //en cliquant sur le bouton
  9. if(isset($_REQUEST["sauver"]))
  10. {
  11. for($fin='a'; $fin<'b'; $fin++)
  12. {
  13. //affiche ce qui est enregistré dans le champ 'reponse_'.$fin, en l'occurence le champ "reponse_a"
  14. echo "-- <BR>";
  15. echo $http_vars['reponse_'.$fin];
  16. echo "-- <BR>";
  17. //requete SQL
  18. $reponse_sauver="INSERT INTO a000_questions (ID,ID_THEME,ID_AGEGROUP,ID_SEMESTER,ID_MAIN_QUESTION,ORDER_NUM,WORDING,POINTS,ID_QUESTION_TYPE,PROP_NUM,ASK_NUM,MALUS_POINTS,AUTHOR,NOTES,DATE) VALUES ('','','','','','','".$http_post_vars['reponse_'.$fin]."','','','','','','','','')";
  19. $out.="$reponse_sauver <BR> ";
  20. $result = mysql_query($reponse_sauver) or die(mysql_error());
  21. }
  22. }
  23. echo $out;
  24. ?>


 
Déjà ca m'aiderais énormemément si quelqu'un arrivait à faire marcher cette ligne afin d'afficher la valeur du champ à l'ecran:

Code :
  1. for($fin='a'; $fin<'b'; $fin++)
  2. {
  3. echo $http_vars['reponse_'.$fin];
  4. }


 
Tous posts bienvenus. merci.

Message cité 2 fois
Message édité par protoss_tth le 14-10-2005 à 14:08:28
Reply

Marsh Posté le 14-10-2005 à 14:24:14    

protoss_tth a écrit :

la modification de la déclaration de mes champs pour avoir un array serait peut-être une solution mais je voudrais faire ca avec proprement avec des variables.


mouais, enfin en quoi n'est-ce pas propre ???
après tout, c'est ton code ...

protoss_tth a écrit :


Ouais bon quitte à travailler avec des Array autant le faire avec $http_post_vars['reponse_a'] je vais voir ce que ca donne


[:pingouino]

Reply

Marsh Posté le 14-10-2005 à 14:47:36    

protoss_tth a écrit :


Déjà ca m'aiderais énormemément si quelqu'un arrivait à faire marcher cette ligne afin d'afficher la valeur du champ à l'ecran:

Code :
  1. for($fin='a'; $fin<'b'; $fin++)
  2. {
  3. echo $http_vars['reponse_'.$fin];
  4. }




 
 
foreach($_POST as $cle => $valeur ){
    if(strpos($cle,"eponse_" ) == 1)
         echo "$cle => $valeur<br>";
}
 
et c'est pas tres joli


---------------

Reply

Marsh Posté le 17-10-2005 à 12:45:15    

Citation :

[:pingouino]


les champs d'un formulaire sont stockés dans un array lorsqu'ils sont envoyés, et accessibles au moyen de $http_post_vars['nom du champ'], il est donc inutile de définir un array pour chaque nom de champs...
 
le probleme c'est que je n'arrive pas à executer cette commande en générant les noms de champs (rappel:qui ne diffèrent que par la dernière lettre a,b,c,d...etc..).
 
Cela m'aurait permis d'enregistrer tous les champs dans la base de données en 5 lignes au moyen d'une seule boucle contenant ma requête SQL, qui se serait "auto-générée". Mais bon, si ça veut pas... c'est pas dramatique.
 
En tous cas merci à vous deux pour vos propositions.


Message édité par protoss_tth le 17-10-2005 à 12:47:51
Reply

Marsh Posté le 17-10-2005 à 12:45:15   

Reply

Marsh Posté le 17-10-2005 à 13:21:39    

Déjà c'est plus $HTTP_POST_VARS mais $_POST.
 
Et c'est quoi ce $http_vars là ? [:mlc]

Reply

Marsh Posté le 18-10-2005 à 19:38:31    

protoss_tth a écrit :

Déjà ca m'aiderais énormemément si quelqu'un arrivait à faire marcher cette ligne afin d'afficher la valeur du champ à l'ecran:

Code :
  1. for($fin='a'; $fin<'b'; $fin++)
  2. {
  3. echo $http_vars['reponse_'.$fin];
  4. }


 
Tous posts bienvenus. merci.


 
Tu peux utiliser les fonctions ord et chr :
 

Code :
  1. for($code_ascii = ord('a'); $code_ascii < ord('z'); $code_ascii++) {
  2.   echo $_POST['reponse_' . chr($code_ascii)];
  3. }

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed