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 (permalink)
Invité régulier
 
Date d'inscription: janvier 2008
Messages: 13
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 :
 
 
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
Vieux 28/01/2010, 19h51   #2 (permalink)
Modérateur
 
Avatar de sabotage
 
Date d'inscription: juillet 2005
Messages: 9 977
Par défaut

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
Vieux 29/01/2010, 19h17   #3 (permalink)
Invité régulier
 
Date d'inscription: janvier 2008
Messages: 13
Par défaut

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 :
 
<?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
Vieux 29/01/2010, 19h23   #4 (permalink)
Modérateur
 
Avatar de sabotage
 
Date d'inscription: juillet 2005
Messages: 9 977
Par défaut

Tu as controlé comment se presentait ton $_POST ?
sabotage est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 29/01/2010, 20h29   #5 (permalink)
Invité régulier
 
Date d'inscription: janvier 2008
Messages: 13
Par défaut

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
Vieux 29/01/2010, 23h43   #6 (permalink)
Modérateur
 
Avatar de sabotage
 
Date d'inscription: juillet 2005
Messages: 9 977
Par défaut

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
Vieux 30/01/2010, 00h05   #7 (permalink)
Invité régulier
 
Date d'inscription: janvier 2008
Messages: 13
Par défaut

erf désolé

alors pour le print_r voici ce que j'obtiens:

Code :
 
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
Vieux 30/01/2010, 00h10   #8 (permalink)
Modérateur
 
Avatar de sabotage
 
Date d'inscription: juillet 2005
Messages: 9 977
Par défaut

C'est un print_r($_POST) qu'il faut faire.
sabotage est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 30/01/2010, 00h25   #9 (permalink)
Invité régulier
 
Date d'inscription: janvier 2008
Messages: 13
Par défaut

oula pas mal de chose


Code :
 
 
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
Vieux 30/01/2010, 11h08   #10 (permalink)
Modérateur
 
Avatar de sabotage
 
Date d'inscription: juillet 2005
Messages: 9 977
Par défaut

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 :
 
// 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
Vieux 30/01/2010, 14h15   #11 (permalink)
Invité régulier
 
Date d'inscription: janvier 2008
Messages: 13
Par défaut

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
NEWS PHPFAQ PHPCours PHPSources PHPLivres PHPScripts PHPOutils PHPComparatifsZend Framework

Réponse Proposer ce sujet en actualité

Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD > PHP & MySQL



Outils de la discussion

Règles de messages
Vous ne pouvez pas créer de nouvelles discussions
Vous ne pouvez pas envoyer des réponses
Vous ne pouvez pas envoyer des pièces jointes
Vous ne pouvez pas modifier vos messages

Les balises BB sont activées : oui
Les smileys sont activés : oui
La balise [IMG] est activée : oui
Le code HTML peut être employé : non
Trackbacks are non
Pingbacks are non
Refbacks are non



Fuseau horaire GMT +1. Il est actuellement 03h00.


Vos questions techniques : forum d'entraide PHP - Publiez vos articles, tutoriels et cours
et rejoignez-nous dans l'équipe de rédaction du club d'entraide des développeurs francophones
Nous contacter - Hébergement - Participez - Copyright © 2000-2010 www.developpez.com - Legal informations.