[Résolu]récupération d'image à chaque sortie de la boucle

WRInaute discret
Bonjour,
j'ai 3 input type file, j'ai fait une boucle for pour la récupération des 3 input type file, mais je n'arrive pas à récupérer à chaque sortie de la boucle la valeur (soit image soit pas d'image donc img_up = default) de la variable $img_up ,voila mon code qui n'est pas top top :
autre question: dois-je faire le move_uploaded_file dans la boucle ou en dehors c'està dire lors de l'insert.

Code:
for($i=1;$i<=3;$i++){
$nomFichier = $_FILES["photo$i"]["name"];
if($nomFichier != "" ){ // si il y a des photos
		
		//code de l'erreur si jamais il y en a une:
		$codeErreur= $_FILES["photo$i"]["error"];
		switch ($codeErreur){
			case 0 : $message="<p>Pas d'erreur</p>"; break;
			case 1 : $message="<p>La photo dépasse la taille max. définie sur le serveur (php.ini)</p>"; break;
			case 2 : $message="<p>La photo dépasse la taille max. définie dans le formulaire</p>"; break;
			case 3 : $message="<p>La photo n'a été que partiellement chargée</p>"; break;
			case 4 : $message="<p>La photo n'a pas pu être téléchargée</p>"; break;
			case 5 : $message="<p>Il n'existe pas de dossier temporaire, tel que défini par le serveur (php.ini)</p>"; break;
			case 6 : $message="<p>Impossible d'écrire dans le dossier : vérifiez les droits</p>"; break;
			default : $message="<p>Erreur inconnue</p>"; break;
		}
					
		if($codeErreur == 0){ // s'il n'y a pas d'erreur
					
			//nom temporaire sur le serveur:
			$nomTemporaire = $_FILES["photo$i"]["tmp_name"];
													
			//on rajoute dans son nom le timestamp du moment pour le différencier de la première 
			//comme cela on est sûr de ne pas avoir 2 images avec le même nom
			$nomFichier= date("Y_m_d_H_i_s")."_".$nomFichier;
						
			//L'image va etre envoyée dans le repertoire d'image				
			$img_up = "/photo/".$nomFichier ;//chemin qui mène au dossier qui va contenir les fichiers upload
			//Déplace des images du dossier temporaire vers le répertoire d'image
			move_uploaded_file($nomTemporaire, $img_up);				
		 }//fin if $codeErreurN
	
}else{ // s'il n'y a pas de photo
			$img_up = "DEFAULT";
}
}//fin for
				
/*$sql_nophoto="INSERT INTO tb_test VALUES ('$url','$commune','$num_dep','$cp',DEFAULT,DEFAULT,DEFAULT,DEFAULT,'$commentaire','')";
mysql_query($sql_nophoto);
header("Location:test_envoi.php");*/
echo $num_dep." ".$cp." ".$nom." ".$email." ".$commune." ".$url." ".$commentaire." ".$img_up;
 
WRInaute discret
le code html ? le formulaire tu veux dire ou tout ? allé hop tout,
mais moi je voulais juste savoir comment récupérer à chaque boucle la valeur de img_up....
Code:
<?php
	require_once('inc/connexion_base.inc.php'); // connexion à la base de données
	include_once('inc/tete.inc.php'); // affichage du bandeau de la page
	include "inc/fonctions.inc.php"; //fichier comprenant des fonctions 
		
	if(isset($_POST['region'])){// premier passage
		$idr =$_POST['region'];
	}
	
	$message="";
if(isset($_POST['envoyer'])){

	if(!isset($_POST["commune"]) && !isset($_POST['departement'])){

		$message="Veuillez remplir les champs obligatoires";
		$cp="";
		$nom="";
		$email="";
		$commune="";
		$url="";
		$commentaire="";

	}else{
		// second passage
		// récupération des variables
		$cp=$_POST["cp"];
		$nom=$_POST["nom"];
		$email=$_POST["email"];
		$commune=$_POST["commune"];
		$url=$_POST["url"];
		$commentaire=$_POST["commentaire"];
		$num_dep=$_POST["departement"];
						
		for($i=1;$i<=3;$i++){
			$nomFichier = $_FILES["photo$i"]["name"];
			if($nomFichier != "" ){ // si il y a des photos
		
				//code de l'erreur si jamais il y en a une:
				$codeErreur= $_FILES["photo$i"]["error"];
				switch ($codeErreur){
					case 0 : $message="<p>Pas d'erreur</p>"; break;
					case 1 : $message="<p>La photo dépasse la taille max. définie sur le serveur (php.ini)</p>"; break;
					case 2 : $message="<p>La photo dépasse la taille max. définie dans le formulaire</p>"; break;
					case 3 : $message="<p>La photo n'a été que partiellement chargée</p>"; break;
					case 4 : $message="<p>La photo n'a pas pu être téléchargée</p>"; break;
					case 5 : $message="<p>Il n'existe pas de dossier temporaire, tel que défini par le serveur (php.ini)</p>"; break;
					case 6 : $message="<p>Impossible d'écrire dans le dossier : vérifiez les droits</p>"; break;
					default : $message="<p>Erreur inconnue</p>"; break;
				}
					
				if($codeErreur == 0){ // s'il n'y a pas d'erreur
					
					//nom temporaire sur le serveur:
					$nomTemporaire = $_FILES["photo$i"]["tmp_name"];
													
					//on rajoute dans son nom le timestamp du moment pour le différencier de la première 
					//comme cela on est sûr de ne pas avoir 2 images avec le même nom
					$nomFichier= date("Y_m_d_H_i_s")."_".$nomFichier;
						
					//L'image va etre envoyée dans le repertoire d'image				
					$img_up = "C:/Documents and Settings/akara/Bureau/recherche/test__mairies/photo/".$nomFichier ;//chemin qui mène au dossier qui va contenir les fichiers upload
					//Déplace des images du dossier temporaire vers le répertoire d'image
					move_uploaded_file($nomTemporaire, $img_up);				
			    }//fin if $codeErreurN
	
		   }else{ // s'il n'y a pas de photo
					$img_up = "DEFAULT";
		   }
	  }//fin for
				// on appelle la fonction pour vérifier l'unicité de l'url de la commune & du mail !
				//verif_unicite($url,$commune,$email);
				/*$sql_nophoto="INSERT INTO tb_test VALUES ('$url','$commune','$num_dep','$cp',DEFAULT,DEFAULT,DEFAULT,DEFAULT,'$commentaire','')";
				mysql_query($sql_nophoto);
				header("Location:test_envoi.php");*/
		echo $num_dep." ".$cp." ".$nom." ".$email." ".$commune." ".$url." ".$commentaire." ".$img_up;
	}//fin second if else
}//fin premier if isset($_POST['envoyer'])

	$sql1 = "SELECT id_reg, nom FROM tb_region ORDER BY nom";
    $rech_regions = mysql_query($sql1);
    $code_region = array();
    $region = array();
    /* On active un compteur pour les régions */
    $nb_regions = 0;
        while($ligne = mysql_fetch_assoc($rech_regions))
        {
            array_push($code_region, $ligne['id_reg']); //array_push(tableau,element): rajoute à la fin du tableau les elements $ligne['id_reg']
            array_push($region, $ligne['nom']);

            /* On incrémente le compteur */
            $nb_regions++;
        }
    ?>
		<p><a href="index.html">accueil</a> > Ajout Mairie </p>
		
		<?php				 
			 		echo "<p>".$message."</p>";				
		?>
		<form action="photo_test.php" method="post" id="chgdept" enctype="multipart/form-data">
			<fieldset style="border: 3px double #333399">
			<legend>Veuillez nous transmettre les éléments nous permettant de référencer gratuitement votre mairie</legend>
			<br />
			<span class="obligatoire"> (*) Champs obligatoires</span>
			<table align="center">
				  <tr> 
					<td width="200" align="right">S&eacute;lectionn&eacute; la r&eacute;gion&nbsp; <span class="obligatoire">*</span>  </td>
					<td width="234" align="left">
						<select name="region" onchange="document.forms['chgdept'].submit();">
			  				<option value="-1">- - - Choisissez une région - - -</option>
							<?php
								for($i = 0; $i < $nb_regions; $i++)
								{
							?>
					 		 <option value="<?php echo($code_region[$i]); ?>"<?php echo((isset($idr) && $idr == $code_region[$i])?" selected=\"selected\"":null); ?>><?php echo stripslashes($region[$i]); ?></option>
							<?php
							}
							?>
					</select>
					
					</td>
				 </tr>
				<?php
			  mysql_free_result($rech_regions); //libère toute la mémoire et les ressources utilisées par la ressource de résultat $rech_regions.
				
				/* On commence par vérifier si on a envoyé un numéro de région et le cas échéant s'il est différent de -1 */			
				if(isset($idr) && $idr != -1)
				{
						/* Cération de la requête pour avoir les départements de cette région */
						$sql2 = "SELECT num_dep, nom FROM tb_departement WHERE id_reg =".$idr." ORDER BY nom";
						 $rech_dept = mysql_query($sql2);
						/* Un petit compteur pour les départements */
						$nd = 0;
						/* On crée deux tableaux pour les numéros et les noms des départements */
						$code_dept = array();
						$nom_dept = array();
						/* On va mettre les numéros et noms des départements dans les deux tableaux */
						while($ligne_dept = mysql_fetch_assoc($rech_dept))
						{
							array_push($code_dept, $ligne_dept['num_dep']);
							array_push($nom_dept, $ligne_dept['nom']);
							$nd++;
						}
						/* Maintenant on peut construire la liste déroulante */
						?>
				<tr> 
					<td width="200"  align="right">S&eacute;lectionn&eacute; le d&eacute;partement&nbsp; <span class="obligatoire">*</span></td>
					<td width="234" align="left">
							<select name="departement">
										<?php  
										for($d = 0; $d<$nd; $d++)
										{
											?>
							  <option value="<?php echo($code_dept[$d]); ?>"<?php echo((isset($dept_selectionne) && $dept_selectionne == $code_dept[$d])?" selected=\"selected\"":null); ?>><?php echo stripslashes($nom_dept[$d]." (". $code_dept[$d] .")"); ?></option>
											<?php
										}
							?>
							</select>
							<?php
									mysql_free_result($rech_dept); //libère toute la mémoire et les ressources utilisées par la ressource de résultat $rech_dept.
					}//fin if
							?>
					</td>
				  </tr>	
				  <tr> 
					<td width="200"  align="right">Site Internet de votre Mairie&nbsp; <span class="obligatoire">*</span></td>
					<td width="234" align="left"><input size="40" type="text" value="http://" name="url" ></td>
				  </tr>
				  <tr> 
					<td width="200" align="right">Ville&nbsp; <span class="obligatoire">*</span> </td>
					<td width="234" align="left"><input type="text" name="commune"></td>
				  </tr>
				  <tr> 
					<td width="200"  align="right">Code Postal&nbsp; <span class="obligatoire">*</span></td>
					<td width="234" align="left"><input type="text" name="cp"></td>
				  </tr>
				  <tr> 
					<td width="200"  align="right">Nom&nbsp; <span class="obligatoire">*</span></td>
					<td width="234"><input type="text" name="nom"></td>
				  </tr>
				<tr> 
					<td width="200"  align="right">Email&nbsp; <span class="obligatoire">*</span></td>
					<td width="234" align="left"><input type="text" name="email"></td>
				  </tr>
				  <tr>
				<td align="right">Photo (max. 300 ko)</td>
					<td><input type="hidden" name="MAX_FILE_SIZE" value="302400" />
						<input type="file" name="photo1" /></td>
				</tr>
				<td align="right">Photo (max. 300 ko)</td>
					<td><input type="hidden" name="MAX_FILE_SIZE" value="302400" />
						<input type="file" name="photo2" /></td>
				</tr>
				<td align="right">Photo (max. 300 ko)</td>
					<td><input type="hidden" name="MAX_FILE_SIZE" value="302400" />
						<input type="file" name="photo3" /></td>
				</tr>
				  <tr> 
					<td colspan="2"></td>
				  </tr>
				  <tr> 
					<td valign="top" width="200" align="right">Message </td>
					<td valign="top" align="left">
					  <textarea name="commentaire" cols="15" rows="4" style="width:240px;height:150px"></textarea></td>
				  </tr>
				  <tr>
					  <td>&nbsp;</td>
					  <td align="center"><input type="submit" class="bouton" name="envoyer" value="Envoyer" /></td>
				  </tr>
		</table>
	</form>
 </fieldset>
<?php
/* ***** fin de la page *******************/
	include_once('inc/pied.inc.php'); // affichage du pied de page
?>
 
WRInaute impliqué
bah si $img_up n'est pas défini et selon ton code c'est que tu es dans le cas ou $nomFichier != "" et $codeErreur != 0
que contient le variable $message ???
 
WRInaute discret
salut,
je comprend pas tros $img_up est défini dans le if, s'il y a des photos je fait un switch pour les erreurs si il ya $message=erreur sinon s'il n'y a pas d'erreur je fait les traitements pour l'image et je déclare $img qui est égale au répertoire+le_nom_du_fichier puis move_uploaded_file($nomTemporaire, $img_up); Mais s'il n'y a pas d'image je passe directement au else qui dit que $img_up="DEFAULT"....
Mon code n'a pas l'air correcte ?

et est ce que cela fonctionnerait si je faisait ceci :

$tab_img= array();
array_push($tab_img,$img_up);
& mettre ces deux lignes avant l'accolade fermée du for
 
WRInaute impliqué
oui il te faut un tableau mais je maintiens qu'il y a un cas qui passe entre les mailles du filet :)
 
WRInaute discret
:?
est ce que c'est le $i dans $_FILES["photo$i"]["name"];
sinon je vois pas où est la fuite... [/code]
 
WRInaute impliqué
il te manque ce cas non ? :

Code:
if($codeErreur == 0){ // s'il n'y a pas d'erreur
..................
}//fin if $codeErreurN 
else {
    $img_up="DEFAULT"
}
 
WRInaute discret
LOol je vois pas où tu veux en venir,
j'ai fait :
Code:
    if($codeErreur == 0){ // s'il n'y a pas d'erreur
    ..................
    }//fin if $codeErreurN
/*je n'ai pas fait de else car plus haut dans le switch j'ai $message donc si il y a une erreur je l'affiche dans le formulaire*/

}else {
    $img_up="DEFAULT"
}
 
WRInaute impliqué
reprenons alors :D et pour simplifier ton code
Code:
for($i=1;$i<=3;$i++){
         if($nomFichier != "" ) { 
               
            if($codeErreur == 0) { 
               $img_up = "C:/Documents and ";
             }
             else {
               $img_up = "au cas ou hein ;)";
             }
   
         }
         else{ 
               $img_up = "DEFAULT";
         }
}
echo $img_up
c'est bien çà non ?
 
WRInaute discret
oui oui c'est vrai merci mais est-ce vraiment obligé ?si oui ou non pourquoi lol
.mais cela ne résoud pas la récupération
quand j'ai fait
Code:
.....
 $tab_img = array();
array_push($tab_img,$img_up);   
 }//fin for
								
	$nombre = sizeof($tab_img);
	for ($i = 0; $i <$nombre; $i++)
	{
		echo $tab_img[$i]; // 
		echo "<br />"; 
	}
je ne récupère que la derniere valeur de $img_up, pourquoi ?
 
Discussions similaires
Haut