Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD > PHP & MySQL
PHP & MySQL Forum d'entraide sur les fonctions MySQL avec PHP. Avant de poster -> FAQ MySQL, Cours MySQL et Sources MySQL. Pour les questions concernant le moteur MySQL plutôt que les fonctions PHP, merci d'utiliser le forum MySQL.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
Vieux 28/01/2010, 17h08   #1
Invité régulier
 
Inscription : janvier 2008
Messages : 21
Détails du profil
Informations forums :
Inscription : janvier 2008
Messages : 21
Points : 5
Points : 5
Par défaut Problème de récupération de données

Bonjour, je vous expose mon problème. J'ai un formulaire avec des checkbox qui récupère le nom des fichier sur un ftp en valeur. Avec les checkbox j'ai aussi plusieurs select qui récupère des éléments de ma bdd, plus un champ texte.

voici un screen pour mieux comprendre:



donc j'enregistre les données de se formulaire via un méthode POST et avec une requête insert, tout marche pour le mieux pour le moment, sauf que lors de mes tests je me suis rendu compte que si je coche une checkbox en plein milieu de mon tableau en laissant des checkbox vide au dessus, alors l'insertion de se fait pas correctement dans la bdd., puis que seulement le nom du fichier y est inséré.

Je pense que cela vient du fait que le rang du tableau n'est pas retrouvé pour les autres informations, alors comment faire?

voici mon code d'insertion dans la bdd

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
 
 
if(isset($_POST['id_fichiers']) && isset($_POST['envoyerup'])) 	
 
{
 
   for ($i = 0; $i < count($_POST['id_fichiers']); $i++)
	{
	mysql_query("INSERT INTO upload_fiche(nom_up_fiche, fk_type_fiche, fk_fiche, url_up_fiche) VALUES ('".$_POST['nom_up_fiche'][$i]."','".$_POST['type_fiche'][$i]."','".$_POST['nom_fiche'][$i]."','".$_POST['id_fichiers'][$i]."')"); 	
 
        }
 
}
Merci pour votre aide.
jounax est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/01/2010, 19h51   #2
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 14 929
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 14 929
Points : 16 381
Points : 16 381
Pour parcourir un tableau, il faut utiliser foreach().

Aller de 0 à x, ca ne marche que si le tableau est parfaitement indexé numériquement, ce qui n'est pas ton cas lorsque les cases ne sont pas toutes cochées.
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/01/2010, 19h17   #3
Invité régulier
 
Inscription : janvier 2008
Messages : 21
Détails du profil
Informations forums :
Inscription : janvier 2008
Messages : 21
Points : 5
Points : 5
Bonsoir, alors je pense avoir suivie ton idée, mais malheureusement cela n'a pas résolu mon problème.

Seul id_fichiers est enregistré dans la bdd dans le cas ou une checkbox est laissé vide avant celle sélectionné.

Je vous donne un morceau de mon code, on ne sait jamais.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
 
<?php
if(isset($_POST['id_fichiers']) && isset($_POST['envoyerup'])) 	
 
{
       foreach($_POST['id_fichiers'] as $key => $contenu)
	{
	mysql_query("INSERT INTO upload_fiche(nom_up_fiche, fk_type_fiche, fk_fiche, url_up_fiche) VALUES ('".$_POST['nom_up_fiche'][$key]."','".$_POST['type_fiche'][$key]."','".$_POST['nom_fiche'][$key]."','$contenu')"); 
			echo '<p>Votre enregistrement s\'est d&eacute;roul&eacute; avec succes!<br />';
	 }
}
 
?>
 
<form action="" method="post" enctype="multipart/form-data" >
<?php
$folder = "./admin/fichiers/";
$dossier = opendir("./admin/fichiers/");	
$i=0;
while ($Fichier = readdir($dossier))
{	
 if($Fichier!='.' and $Fichier!='..' and $Fichier!=NULL)
 {
?>		
 
<table><tr <?php if(($i%2)==0){echo' style="background-color:#c7defb"'; }else {echo' style="background-color:#e3eefc"';} ?> >
<?php echo'<td><select name="nom_fiche[]" class="mid">';
$resultat=mysql_query("select num_fiche, nom_fiche from fiche order by num_fiche asc");
$ligne=mysql_fetch_assoc($resultat);
echo'<option value="indiquez votre classe"selected="selected">- Fiches -</option>';
	if($ligne)  // affichage des employés dans une listebox.
	{
	echo '<option value="'.$ligne["num_fiche"].'">'.$ligne["nom_fiche"].'</option>';
	$ligne=mysql_fetch_assoc($resultat);
		while($ligne)
		{	  
		echo '<option value="'.$ligne["num_fiche"].'">'.$ligne["nom_fiche"].'</option>';
		$ligne=mysql_fetch_assoc($resultat);
		}
	}	
echo '</select>';
 
 
echo'<select name="type_fiche[]" class="mid">';
$resultat=mysql_query("select id_T_fiche, nom_T_fiche from type_fiche order by id_T_fiche asc");
$ligne=mysql_fetch_assoc($resultat);
echo'<option value="indiquez votre classe"selected="selected">- Type de document -</option>';
	if($ligne)  // affichage des employés dans une listebox.
	{
 
	echo '<option value="'.$ligne["id_T_fiche"].'">'.$ligne["nom_T_fiche"].'</option>';
	$ligne=mysql_fetch_assoc($resultat);
		while($ligne)
		{	  
 
		echo '<option value="'.$ligne["id_T_fiche"].'">'.$ligne["nom_T_fiche"].'</option>';
		$ligne=mysql_fetch_assoc($resultat);
		}
	}	
echo '</select>';
 
echo '<input type="text" name="nom_up_fiche[]" value="Nom du fichier" size="15" />';
echo"<input type='checkbox' name='id_fichiers[]' value='$Fichier' /></td><td align='left'><a href=\"$folder/$Fichier \" title=$Fichier>Fichier *</a>";	
echo"";
				$filename= $Fichier;
 $extension=strrchr($filename,'.');
 
 $extension=substr($extension,-3,3) ;     
 
			if( $extension == 'doc')
			{ echo'<img src="./admin/icon_doc/doc_word.png">'; }
 
 
			if( $extension == 'txt')
			{ echo'<img src="./admin/icon_doc/doc_txt.png">'; }
 
 
			if( $extension == 'csv')
			{ echo'<img src="./admin/icon_doc/doc_excel.png">'; }
 
 
			if( $extension == 'jpg' or $extension == 'jpeg' or $extension == 'gif' or $extension == 'png' or $extension == 'bmp')
			{ echo'<img src="./admin/icon_doc/doc_img.png">'; }
 
 
			if( $extension == 'pdf')
			{ echo'<img src="./admin/icon_doc/doc_pdf.png">'; }
			echo"</td></tr></table>";
	}	
	$i++;
}
 
closedir($dossier);
 
       echo'<input type="reset" name= "supprimer_up" class="bouton" value ="Effacer"/>' ;   
       echo'<input type="submit" name="envoyerup" class="bouton" value="Envoyer"/></form>';
 
 
}
jounax est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/01/2010, 19h23   #4
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 14 929
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 14 929
Points : 16 381
Points : 16 381
Tu as controlé comment se presentait ton $_POST ?
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/01/2010, 20h29   #5
Invité régulier
 
Inscription : janvier 2008
Messages : 21
Détails du profil
Informations forums :
Inscription : janvier 2008
Messages : 21
Points : 5
Points : 5
Je ne sais pas si j'ai bien compris ta question mais en faisant un echo sur le $_POST j'obtiens le message suivant ArrayEnvoyer pour toutes mes lignes.

Sinon lorsque je fais un envoi de :



J'obtiens ça en bdd



Donc pour les 3 dernières checkbox cochés il ne récupère que le value par défaut.
jounax est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/01/2010, 23h43   #6
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 14 929
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 14 929
Points : 16 381
Points : 16 381
Pour le test il faut faire print_r et non echo

Je ne vois pas le lien entre tes deux copies d'écran.
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/01/2010, 00h05   #7
Invité régulier
 
Inscription : janvier 2008
Messages : 21
Détails du profil
Informations forums :
Inscription : janvier 2008
Messages : 21
Points : 5
Points : 5
erf désolé

alors pour le print_r voici ce que j'obtiens:

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
Array ( [0] => bebe_blanc2.jpg [1] => bebe_noir.jpg [2] => bebe_violet.jpg [3] => Classeur1.csv [4] => pdf_Circulaire_DRT_200410.pdf ) ArrayEnvoyer
 
Votre enregistrement s'est déroulé avec succes!
Array ( [0] => bebe_blanc2.jpg [1] => bebe_noir.jpg [2] => bebe_violet.jpg [3] => Classeur1.csv [4] => pdf_Circulaire_DRT_200410.pdf ) ArrayEnvoyer
 
Votre enregistrement s'est déroulé avec succes!
Array ( [0] => bebe_blanc2.jpg [1] => bebe_noir.jpg [2] => bebe_violet.jpg [3] => Classeur1.csv [4] => pdf_Circulaire_DRT_200410.pdf ) ArrayEnvoyer
 
Votre enregistrement s'est déroulé avec succes!
Array ( [0] => bebe_blanc2.jpg [1] => bebe_noir.jpg [2] => bebe_violet.jpg [3] => Classeur1.csv [4] => pdf_Circulaire_DRT_200410.pdf ) ArrayEnvoyer
 
Votre enregistrement s'est déroulé avec succes!
Array ( [0] => bebe_blanc2.jpg [1] => bebe_noir.jpg [2] => bebe_violet.jpg [3] => Classeur1.csv [4] => pdf_Circulaire_DRT_200410.pdf ) ArrayEnvoye
Voici ce que j'envoie sur mon formulaire:

[IMG=http://img43.imageshack.us/img43/5306/testgv.jpg][/IMG]

Même lien au cas ou :



Et voila ce que je reçois en bdd :

[IMG=http://img43.imageshack.us/img43/2029/test2kn.jpg][/IMG]

Même lien au cas ou :



Encore merci pour ta patience.
jounax est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/01/2010, 00h10   #8
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 14 929
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 14 929
Points : 16 381
Points : 16 381
C'est un print_r($_POST) qu'il faut faire.
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/01/2010, 00h25   #9
Invité régulier
 
Inscription : janvier 2008
Messages : 21
Détails du profil
Informations forums :
Inscription : janvier 2008
Messages : 21
Points : 5
Points : 5
oula pas mal de chose


Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 
 
Array ( [nom_fiche] => Array ( [0] => 53 [1] => 52 [2] => indiquez une fiche [3] => indiquez une fiche [4] => indiquez une fiche [5] => indiquez une fiche [6] => 52 [7] => 53 [8] => 53 [9] => indiquez une fiche ) [type_fiche] => Array ( [0] => 2 [1] => 6 [2] => indiquez un type de document [3] => indiquez un type de document [4] => indiquez un type de document [5] => indiquez un type de document [6] => 3 [7] => 12 [8] => 6 [9] => indiquez un type de document ) [nom_up_fiche] => Array ( [0] => test1 [1] => test2 [2] => Nom du fichier [3] => Nom du fichier [4] => Nom du fichier [5] => Nom du fichier [6] => test3 [7] => test4 [8] => test5 [9] => Nom du fichier ) [id_fichiers] => Array ( [0] => bebe_blanc2.jpg [1] => bebe_noir.jpg [2] => bebe_violet.jpg [3] => Classeur1.csv [4] => pdf_Circulaire_DRT_200410.pdf ) [envoyerup] => Envoyer ) ArrayEnvoyer
 
Votre enregistrement s'est déroulé avec succes!
Array ( [nom_fiche] => Array ( [0] => 53 [1] => 52 [2] => indiquez une fiche [3] => indiquez une fiche [4] => indiquez une fiche [5] => indiquez une fiche [6] => 52 [7] => 53 [8] => 53 [9] => indiquez une fiche ) [type_fiche] => Array ( [0] => 2 [1] => 6 [2] => indiquez un type de document [3] => indiquez un type de document [4] => indiquez un type de document [5] => indiquez un type de document [6] => 3 [7] => 12 [8] => 6 [9] => indiquez un type de document ) [nom_up_fiche] => Array ( [0] => test1 [1] => test2 [2] => Nom du fichier [3] => Nom du fichier [4] => Nom du fichier [5] => Nom du fichier [6] => test3 [7] => test4 [8] => test5 [9] => Nom du fichier ) [id_fichiers] => Array ( [0] => bebe_blanc2.jpg [1] => bebe_noir.jpg [2] => bebe_violet.jpg [3] => Classeur1.csv [4] => pdf_Circulaire_DRT_200410.pdf ) [envoyerup] => Envoyer ) ArrayEnvoyer
 
Votre enregistrement s'est déroulé avec succes!
Array ( [nom_fiche] => Array ( [0] => 53 [1] => 52 [2] => indiquez une fiche [3] => indiquez une fiche [4] => indiquez une fiche [5] => indiquez une fiche [6] => 52 [7] => 53 [8] => 53 [9] => indiquez une fiche ) [type_fiche] => Array ( [0] => 2 [1] => 6 [2] => indiquez un type de document [3] => indiquez un type de document [4] => indiquez un type de document [5] => indiquez un type de document [6] => 3 [7] => 12 [8] => 6 [9] => indiquez un type de document ) [nom_up_fiche] => Array ( [0] => test1 [1] => test2 [2] => Nom du fichier [3] => Nom du fichier [4] => Nom du fichier [5] => Nom du fichier [6] => test3 [7] => test4 [8] => test5 [9] => Nom du fichier ) [id_fichiers] => Array ( [0] => bebe_blanc2.jpg [1] => bebe_noir.jpg [2] => bebe_violet.jpg [3] => Classeur1.csv [4] => pdf_Circulaire_DRT_200410.pdf ) [envoyerup] => Envoyer ) ArrayEnvoyer
 
Votre enregistrement s'est déroulé avec succes!
Array ( [nom_fiche] => Array ( [0] => 53 [1] => 52 [2] => indiquez une fiche [3] => indiquez une fiche [4] => indiquez une fiche [5] => indiquez une fiche [6] => 52 [7] => 53 [8] => 53 [9] => indiquez une fiche ) [type_fiche] => Array ( [0] => 2 [1] => 6 [2] => indiquez un type de document [3] => indiquez un type de document [4] => indiquez un type de document [5] => indiquez un type de document [6] => 3 [7] => 12 [8] => 6 [9] => indiquez un type de document ) [nom_up_fiche] => Array ( [0] => test1 [1] => test2 [2] => Nom du fichier [3] => Nom du fichier [4] => Nom du fichier [5] => Nom du fichier [6] => test3 [7] => test4 [8] => test5 [9] => Nom du fichier ) [id_fichiers] => Array ( [0] => bebe_blanc2.jpg [1] => bebe_noir.jpg [2] => bebe_violet.jpg [3] => Classeur1.csv [4] => pdf_Circulaire_DRT_200410.pdf ) [envoyerup] => Envoyer ) ArrayEnvoyer
 
Votre enregistrement s'est déroulé avec succes!
Array ( [nom_fiche] => Array ( [0] => 53 [1] => 52 [2] => indiquez une fiche [3] => indiquez une fiche [4] => indiquez une fiche [5] => indiquez une fiche [6] => 52 [7] => 53 [8] => 53 [9] => indiquez une fiche ) [type_fiche] => Array ( [0] => 2 [1] => 6 [2] => indiquez un type de document [3] => indiquez un type de document [4] => indiquez un type de document [5] => indiquez un type de document [6] => 3 [7] => 12 [8] => 6 [9] => indiquez un type de document ) [nom_up_fiche] => Array ( [0] => test1 [1] => test2 [2] => Nom du fichier [3] => Nom du fichier [4] => Nom du fichier [5] => Nom du fichier [6] => test3 [7] => test4 [8] => test5 [9] => Nom du fichier ) [id_fichiers] => Array ( [0] => bebe_blanc2.jpg [1] => bebe_noir.jpg [2] => bebe_violet.jpg [3] => Classeur1.csv [4] => pdf_Circulaire_DRT_200410.pdf ) [envoyerup] => Envoyer ) ArrayEnvoyer
jounax est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/01/2010, 11h08   #10
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 14 929
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 14 929
Points : 16 381
Points : 16 381
Bon reprenons sérieusement
1 - il faut forcer l'index de tes tableaux, sinon les checkbox sont decalées par rapport aux autres champs.
2 - revoir la façon dont tu ecris tes fetch
3 - il ne faut pas faire les requêtes a chaque tour de boucle : actuellement si tu as 100 fichiers, tu vas interroger à chaque fois la base pour avoir la même liste déroulante ; tu peux même avoir une fonction pour faire tes listes, ca economise du code et il devient plus lisible

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
 
// fonction pour écrire les listes, réutilisable partout
function array_to_select($tableau, $name, $default) {
  $output = '<select name="' . $name . '" class="mid">';
  $output .= '<option value="" selected="selected">' . $default . '</option>';
  foreach ($tableau as $value=>$label) {
	$output .= '<option value="'.$value.'">'.$label.'</option>';
  }
 return $output;
}
// récupération des fiches
$resultat=mysql_query("select num_fiche, nom_fiche from fiche order by num_fiche asc");
while ($row = mysql_fetch_assoc($resultat)) {
   $tblFiche[$row['num_fiche']] = $row['num_fiche'];
}
$select_fiche = array_to_select($tblFiche, "nom_fiche[$i]", "- Fiches -");
 
// récupération des types
$resultat=mysql_query("select id_T_fiche, nom_T_fiche from type_fiche order by id_T_fiche asc");
while ($row = mysql_fetch_assoc($resultat)) {
   $tblTypeFiche[$row['id_T_fiche']] = $row['nom_T_fiche'];
}
$select_type = array_to_select($tblTypefiche, "type_fiche[$i]", "- Type de document -");
 
$i = 0;
while ($Fichier = readdir($dossier))
{	
 if($Fichier!='.' and $Fichier!='..' and $Fichier!=NULL)
 {
 
$background-color = ($i%2 ==0) ? "#c7defb" : "#e3eefc";
echo '<table>
<tr style="background-color:' . $background-color . '" >';
echo '<td>' . $select_fiche . '<td>';
echo '<td>' . $select_type . '<td>';
 
echo '<input type="text" name="nom_up_fiche[' . $i . ']" value="Nom du fichier" size="15" />';
echo '<input type="checkbox" name="id_fichiers[' . $i .']' value="' . $Fichier . '"/></td>
<td align="left"><a href="'. $folder . '/' . $Fichier . '" title="' $Fichier .'>Fichier *</a>';	
......
......
$i++;
}
En segmentant bien ton code sur ses différentes missions, il est plus facile a analyser et debuguer.
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/01/2010, 14h15   #11
Invité régulier
 
Inscription : janvier 2008
Messages : 21
Détails du profil
Informations forums :
Inscription : janvier 2008
Messages : 21
Points : 5
Points : 5
Merci pour ton aide sabotage, et pour la rapidité de tes réponses, tu m'a vraiment bien aidé, mon problème est résolu.

merci amicalement Jounax.
jounax est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +1. Il est actuellement 21h19.


 
 
 
 
Partenaires

Hébergement Web