Concaténer des variables au compte goutte

Résolu/Fermé
MoYoX Messages postés 127 Date d'inscription jeudi 4 juin 2009 Statut Membre Dernière intervention 21 mars 2014 - 10 juin 2009 à 12:02
pyschopathe Messages postés 1974 Date d'inscription dimanche 2 mars 2008 Statut Membre Dernière intervention 22 mars 2010 - 10 juin 2009 à 14:40
Bonjour, tout d'abord désolé pour le titre qui n'est pas très explicite, mais la limitation de taille est assez handicapante !

Je vous expose mon problème.

J'ai une boucle comme celle-ci:
$ch=$_POST['ch'];
for($i=0;$i<=($ch*15);$i++)
{
$form=$_POST['champ'.$i];
}


En fait, je récupère les variables d'un tableau "dynamique" de 15 colonnes (le nombre de ses lignes n'est pas fixe et $ch représente ce nombre de lignes). Ces variables sont récupérées une par une grâce à la boucle.
J'aimerais savoir comment est-il possible de regrouper ces variables par "paquets" de 15 et ainsi pouvoir les envoyer à la base de données via une requête mysql.

Par exemple, je reçois dans une boucle ces variables:
boucle1:
$variable1
boucle2:
$variable2
...
boucle15:
$variable15

Il faudrait en quelques sortes les "sauvegarder" pour pour pouvoir faire cette requête:

$query=("INSERT INTO matable (col1, col2, col3, col4, col5, col6, col7, col8, col9, col10, col11, col12, col13, col14, col15) VALUES('".$variable1."',
		 '".$variable2."',
		 '".$variable3."',
		 '".$variable4."',
		 '".$variable5."',
		 '".$variable6."',
		 '".$variable7."',
		 '".$variable8."',
		 '".$variable9."',
		 '".$variable10."',
		 '".$variable11."',
		 '".$variable12."',
		 '".$variable13."',
		 '".$variable14."',
		 '".$variable15."',
		 '','','')");

Cette requête se trouverait dans une boucle se répétant autant que le tableau a de ligne.

Je n'ai malheureusement aucune idée de comment pouvoir faire ces paquets !

D'avance merci !

Momo
A voir également:

5 réponses

pyschopathe Messages postés 1974 Date d'inscription dimanche 2 mars 2008 Statut Membre Dernière intervention 22 mars 2010 135
10 juin 2009 à 12:30
Ce n'est pas compliqué : tu veux faire autant de requêtes que tu as de lignes ? Tu commences par faire une boucle for sur ce nombre de lignes. Pour chaque ligne, tu récupères chaque champ (grâce à une autre boucle) et tu l'ajoutes à ta requête. Voici le code :
for ( $i=0 ; $i<$ch ; ++$i ) {
  $query = 'INSERT INTO matable (col1, col2, col3, col4, col5, col6, col7, col8, col9, col10, col11, col12, col13, col14, col15) VALUES(';
  for ( $j=15*$i ; $j<15*($i+1) ; ++$j ) {
    if ( $j != 15*$i ) $query .= ','; // on ajoute une virgule si nécessaire
    $curvar = $_POST['champ'.$j];
    $query .= "'$curvar'";
  }
  $query .= ');';
}
0
MoYoX Messages postés 127 Date d'inscription jeudi 4 juin 2009 Statut Membre Dernière intervention 21 mars 2014 3
10 juin 2009 à 13:45
Merci beaucoup pour ce code, néanmoins un problème subsiste.
J'avoue avoir du mal à piger toutes les ficelles de ce code donc je vais te montrer exactement ce qu'il fait et ce que je veux faire:

Je précise qu'il s'agit de pouvoir saisir des informations concernant des wagons féroviaires (histoire qu'on sache de quoi on parle ici)


Voici mon tableau original: ________
Combien de wagons voulez vous ajouter ? |____4___|


______________________________________________________________________
| | | | | | | |
|_5555_|_________|_______|__________|________|______________|__________|
| | | | | | | |
|_6666_|_________|_______|__________|________|______________|__________|
| | | | | | | |
|_7777_|_________|_______|__________|________|______________|__________|
| | | | | | | |
|_8888_|_________|_______|__________|________|______________|__________|
|Envoyer|

Donc, j'ai un premier champ qui permet d'ajouter des lignes au tableau.
Le tableau dispose de 15 colonnes (mais ça c'était déjà compris).

Lorsque je clique sur "Envoyer", grâce à ton code, la requête est la suivante:
INSERT INTO regionnaux (num_wagon, num1, num2, type, carac_wagon, attache, utilisateur, lieu, point_attach, date_dernier_aff, com_util, proch_vt, proch_rev, obs, tri_etabli,trans_vt,trans_rev,trans_aff) VALUES('77777777','','','','','','','','','','','','','','','','','');


En fait, c'est comme si ton code ne permettait d'importer dans la base de données que l'avant dernière ligne.
Comme je n'ai pas tout saisi à ton code, je n'ai pas réussi à le dépanner.

Peux-tu m'aider à nouveau s'il te plait ?

D'avance merci,

Momo
0
pyschopathe Messages postés 1974 Date d'inscription dimanche 2 mars 2008 Statut Membre Dernière intervention 22 mars 2010 135
10 juin 2009 à 14:02
Désolé, j'aurais dû commenter le code :
// on boucle sur les lignes du tableau
for ( $i=0 ; $i<$ch ; ++$i ) {
  // on construit la partie fixe de la requête
  $query = 'INSERT INTO matable (col1, col2, col3, col4, col5, col6, col7, col8, col9, col10, col11, col12, col13, col14, col15) VALUES(';
  // on boucle sur les champs
  for ( $j=15*$i ; $j<15*($i+1) ; ++$j ) {
    if ( $j != 15*$i ) $query .= ','; // on ajoute une virgule si nécessaire
    // on récupère la valeur du champ courant dans une variable pour plus de commodité
    $curvar = $_POST['champ'.$j]; // l'erreur vient probablement d'ici
    // on ajoute le champ à la requête
    $query .= "'$curvar'";
  }
  // on termine la requête
  $query .= ');';
}
Le problème vient à mon avis du champ en gras. D'où est-ce que tu récupères les différents champs à insérer, j'ai dû mal comprendre...
0
MoYoX Messages postés 127 Date d'inscription jeudi 4 juin 2009 Statut Membre Dernière intervention 21 mars 2014 3
10 juin 2009 à 14:10
Rebonjour !

En fait, le code semble fonctionner, j'ai juste ajouté à la fin:

....
......
$curvar = $_POST['champ'.$j];
    $query .= "'$curvar'";
  }
  $query .= ',\'\',\'\',\'\');';
  mysql_query($query,$link) or die ("Impossible d'ajouter le wagon");
}


Mais maintenant, lorsque mon tableau est de la forme:
5555
6666
7777
8888

Il m'importe dans la base de données ceci:

8888
5555
6666
7777
8888

Donc, le premier "8888" n'a pas sa place car il est identique au dernier !

Enfin déjà merci pour ce code qui fonctionne à peu près chez moi malgré mon manque de compréhension !
0
pyschopathe Messages postés 1974 Date d'inscription dimanche 2 mars 2008 Statut Membre Dernière intervention 22 mars 2010 135
10 juin 2009 à 14:40
Oui, j'avais oublié de lancer la requête >_< !

Par contre, pourquoi rajoutes-tu "$query .= ',\'\',\'\',\'\');';" puisque dans ton VALUES, tu ne spécifies que les quinze champs à ajouter ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
MoYoX Messages postés 127 Date d'inscription jeudi 4 juin 2009 Statut Membre Dernière intervention 21 mars 2014 3
10 juin 2009 à 14:31
Rerebonjour,

En fait il n'y a aucune erreur dans le code !

En effet, j'avais oublié de supprimer un "mysql_query" à la fin de mon code.

Tout baigne, je te remercier beaucoup pour cette portion de code !

Momo
0