Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1724 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  Question sur la concaténation de variables

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Question sur la concaténation de variables

n°1823061
kiki
Posté le 07-12-2008 à 00:42:48  profilanswer
 

Bonjour à tous, en tant que novice je viens solliciter vos lumières, pour un truc tout con mais que je n'arrive pas à régler.
 
J'ai un formulaire, qui pour certains éléments, contient plusieurs réponses possibles (genre pour un membre, au champ "pays visité" il peut écrire dans un champ 'France', dans l'autre "Angleterre" etc...
 
Je souhaite mettre ces données ensuite dans ma bd MySQL, de manière propre. J'ai mis plusieurs champs dispo pour ça, il faut donc que mon script détecte si le champ a été rempli, ajoute chaque valeur retournée dans une seule variable et l'injecte dans la bd. Voici ce que j'ai fait pour le moment :
 
Code de la page :  
 

Code :
  1. <form method='POST' action='test1.php'>
  2. <input type="text" name="pays"/>
  3. <input type="text" name="pays1"/>
  4. <input type="text" name="pays2"/><br/>
  5. <input type="text" name="pays3"/>
  6. <input type="text" name="pays4"/>
  7. <input type="text" name="pays5"/><br/><br/>
  8. <input type="submit" name="submit" class="button" value="Enregistrer" /></form>


 
puis code du script :
 

Code :
  1. if(isset($_POST['pays']))
  2. {
  3. $pays = $_POST['pays'] ;
  4. }
  5. if (isset($_POST['pays1']))
  6. {
  7. $pays1 = $_POST['pays1'] ;
  8. }
  9. if (isset($_POST['pays2']))
  10. {
  11. $pays2 = $_POST['pays2'] ;
  12. }
  13. if (isset($_POST['pays3']))
  14. {
  15. $pays3 = $_POST['pays3'] ;
  16. }
  17. if (isset($_POST['pays4']))
  18. {
  19. $pays4 = $_POST['pays4'] ;
  20. }
  21. if (isset($_POST['pays5']))
  22. {
  23. $pays5 = $_POST['pays5'] ;
  24. }


 
 
Ma problématique est à ce moment là de rassembler en une seule variable les données rapportées par tous les $pays pour ensuite l'injecter en bd. J'ai bien pensé à faire quelque chose en concaténation type $pays_total = "$pays1.', '.$pays2" etc... mais ça va me foutre systématiquement des espaces alors que je n'en veux qu'entre 2 variables qui existent. Quelqu'un aurait il une solution à me proposer ?

mood
Publicité
Posté le 07-12-2008 à 00:42:48  profilanswer
 

n°1823066
bricocoman
j'aime les modos
Posté le 07-12-2008 à 01:26:13  profilanswer
 

bcp plus simple comme ça

 

ton formulaire

 
Code :
  1. <form method='POST' action='test1.php'>
  2. <input type="text" name="pays[]"/>
  3. <input type="text" name="pays[]"/>
  4. <input type="text" name="pays[]"/><br/>
  5. <input type="text" name="pays[]"/>
  6. <input type="text" name="pays[]"/>
  7. <input type="text" name="pays[]"/><br/><br/>
  8. <input type="submit" name="submit" class="button" value="Enregistrer" /></form>
 

ton script de récupération (ajouter des vérifications sur les données)

 
Code :
  1. <?php
  2. if(isset($_POST['pays']))
  3.    {
  4.      for ($i=0; $i<count($_POST['pays']); $i++)
  5.              {
  6.           if(!empty($_POST['pays'][$i])) $output[] =  $_POST['pays'][$i];
  7.              }
  8.    $pays_concat = implode(",", $output);
  9.    }
  10. ?>

Message cité 1 fois
Message édité par bricocoman le 07-12-2008 à 01:28:54
n°1823067
kiki
Posté le 07-12-2008 à 01:35:40  profilanswer
 

En effet ça parait beaucoup plus simple, je soupçonnais une manière bien plus "propre" de faire cela, et en effet ton script fait exactement ce que je souhaitais :jap:
 
Je vais étudier son fonctionnement (je suis pas super à l'aise avec les for) pour mieux comprendre le truc.
 
Merci beaucoup en tout cas !!

n°1823069
kiki
Posté le 07-12-2008 à 02:01:13  profilanswer
 

Alors si je comprends bien :D
 
Tu créés une boucle à l'aide de la variable $i. Tant que $i est inférieur au nombre de fois ou le champs pays a été renseigné, tu rentres la valeur du tableau pays correspondant dans le tableau output, puis après tu demandes une concaténation du tableau output ?

n°1823105
skeye
Posté le 07-12-2008 à 11:22:25  profilanswer
 

bricocoman a écrit :


 

Code :
  1. <?php
  2. if(isset($_POST['pays']))
  3.    {
  4.      for ($i=0; $i<count($_POST['pays']); $i++)
  5.              {
  6.           if(!empty($_POST['pays'][$i])) $output[] =  $_POST['pays'][$i];
  7.              }
  8.    $pays_concat = implode(",", $output);
  9.    }
  10. ?>



 
Ce bout de code est super moche. Foreach.


---------------
Can't buy what I want because it's free -
n°1823113
bricocoman
j'aime les modos
Posté le 07-12-2008 à 11:55:04  profilanswer
 

la beauté est subjective [:anathema]

n°1823160
Profil sup​primé
Posté le 07-12-2008 à 13:45:26  answer
 

Code :
  1. <?php
  2. if(is_array($_POST['pays'])) {
  3.    foreach($_POST['pays'] as $pays) {
  4.        // $pays
  5.    }
  6. }
  7. ?>


 
c'est quand même bien plus pratique [:anathema]

n°1823261
bricocoman
j'aime les modos
Posté le 07-12-2008 à 18:10:03  profilanswer
 

je n'en disconviendrai pas :o

n°1823275
kiki
Posté le 07-12-2008 à 19:13:40  profilanswer
 


Je comprends bien ce code mais cela me renvoie une erreur en voulant formater les données :

 
Code :
  1. if(is_array($_POST['pays'])) {
  2.          foreach($_POST['pays'] as $pays) ;
  3.  $pays_concat = implode(",", $pays); 
  4.   }
 

Warning: implode() [function.implode]: Invalid arguments passed in C:\Programmes\Wamp\www\test\bd\test1.php on line 13 (la ligne de l'implode)

 


Si je fais un echo "$pays", ça me renvoie mes données enregistrées mais toutes à la suite sans espace, ce qui les rend inexploitables par la suite.


Message édité par kiki le 07-12-2008 à 19:16:40
n°1823284
kiki
Posté le 07-12-2008 à 19:26:36  profilanswer
 

Déja je comprends pas pourquoi ceci me renvoi des erreurs : Warning: implode() [function.implode]: Invalid arguments passed in C:\Programmes\Wamp\www\test\bd\test1.php on line 9
 

Code :
  1. foreach($_POST['pays'] as $pays)
  2. $pays_concat = implode("", $pays) ;
  3. echo "$pays_concat";


 

mood
Publicité
Posté le 07-12-2008 à 19:26:36  profilanswer
 

n°1823300
skeye
Posté le 07-12-2008 à 20:13:12  profilanswer
 

parce-que tu réfléchis pas à ce que tu fais et que tu copies/colles du code au pif?


---------------
Can't buy what I want because it's free -
n°1823302
kiki
Posté le 07-12-2008 à 20:17:47  profilanswer
 

J'y réfléchis, je me documente, je lis et j'essaye de comprendre, et ça fait quelques heures que j'essaye de résoudre ça, mais quand on débute tout n'est pas évident, et on tatonne forcément.

n°1823332
skeye
Posté le 07-12-2008 à 22:28:01  profilanswer
 

regarde dans la doc ce que font foreach et implode, et tu comprendras bien que ça n'a pas de sens de les utiliser comme ça...


---------------
Can't buy what I want because it's free -
n°1823358
kiki
Posté le 07-12-2008 à 23:52:38  profilanswer
 

Bon ok je pense avoir compris, j'ai réussi ce que je voulais en faisant ça :

Code :
  1. if(is_array($_POST['pays']))
  2. {
  3.    foreach($_POST['pays'] as $pays)
  4.    {
  5.  if ($pays!="" ) {
  6.  echo "$pays," ;
  7.        }
  8.    }
  9. }
 

Le seul "hic", c'est que ça me met forcément la virgule à la dernière entrée, genre : entrée1,entrée2,
Mais je pense pas que ce soit trop grave


Message édité par kiki le 07-12-2008 à 23:53:04
n°1823360
sielfried
Posté le 07-12-2008 à 23:57:02  profilanswer
 

http://fr.php.net/manual/fr/function.implode.php
 
T'as pas dû lire l'exemple 1 c'est pas possible...
 
$_POST['pays'] c'est ton tableau, y a strictement rien à faire.


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
n°1823362
kiki
Posté le 08-12-2008 à 00:01:48  profilanswer
 

j'ai testé en me basant sur ce modèle, ça me créé une chaine type "entrée1,entrée1,,,,, (autant de virgules que de champs de formulaires restant si on a mis une virgule en paramètre d'implode), il ne distingue pas si une donnée a été rentrée ou non dans le formulaire.


Message édité par kiki le 08-12-2008 à 00:03:08
n°1823363
sielfried
Posté le 08-12-2008 à 00:20:17  profilanswer
 

Soit tu fais un truc comme bricocoman (mais avec un foreach c'est plus joli), soit tu vires tous les éléments null de ton tableau avant avec un truc comme ça :
 

Code :
  1. function was_filled($var) {
  2.  return !empty($var);
  3. }
  4. $pays = array_filter($_POST['pays'], 'was_filled');


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
n°1823364
kiki
Posté le 08-12-2008 à 00:28:53  profilanswer
 

En effet, cela marche bien comme cela aussi avec l'implode par la suite.

 

Pourquoi tu dis que foreach est plus joli ? En terme de performances, mieux vaut un foreach qu'une boucle avec un count ?
En tout cas merci :jap:


Message édité par kiki le 08-12-2008 à 00:29:08
n°1823372
skeye
Posté le 08-12-2008 à 07:34:12  profilanswer
 

sielfried a écrit :

Soit tu fais un truc comme bricocoman (mais avec un foreach c'est plus joli), soit tu vires tous les éléments null de ton tableau avant avec un truc comme ça :
 

Code :
  1. function was_filled($var) {
  2.  return !empty($var);
  3. }
  4. $pays = array_filter($_POST['pays'], 'was_filled');



 
J'avais même pas tout lu...[:joce]
De toute manière si un champ n'est pas renseigné il n'est pas POSTé non?
Dans ce cas il suffit de vérifier l'existence de la variable et de faire un implode...:D


---------------
Can't buy what I want because it's free -

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  Question sur la concaténation de variables

 

Sujets relatifs
Question absolument stupideCréer un graphique avec des données sources variables
[Dephi] Question sur les touches de fonction.Questions sur le synchronized
variables à base d'un fichier en input[ Resolu ] Faille de sécuirté, comment gérer les variables ?
[Jquery] question drag and drop "sortable" et liensAffichage de variables
Petite question en Assembleur ARMConcatenation de fichiers excel de même format dans une base access
Plus de sujets relatifs à : Question sur la concaténation de variables


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR