Probleme pour envoyer une image [Résolu]

maxland Messages postés 22 Statut Membre -  
maxland Messages postés 22 Statut Membre -
Bonsoir tout le monde,

voila ca fait deja 2 jours (48h hein je code jour et nuit lol) que je bloque sur un bout de code.

en fait c'est un simple envoi d'image par php grace a un formulaire html, je l'ai mis sur une autre page et tout fonctionne tres bien mais je copie, colle et adapte ce code a la nouvelle page, ca marche plus.

plus precisement le $_FILES ne contient jamais de données, je pensais que ca venait des differentes verifications que je fais sur le fichier mais le code bug dès le premier appel de la variable $_FILES['photo']['name'].

normalement mon code est fait pour envoyer plusieurs photos d'un coup donc il y a une boucle "for" pour traiter les donnéees, j'ai essayé en enlevant la boucle, en la laissant, j'ai testé avec le code le plus simple possible sans verifications mais rien ne marche ...

je vous met d'abord le code php, puis un morceau du formulaire, je precise que le tout est dans la meme page (gestion-dl.php) :

<?php  
         
if(isset($_POST['ajoutDL'])) 
{ 
// requete album 

$reqTYPE = mysql_query("SELECT * FROM albump WHERE ALBUM_CODE='".$_POST['typecode3']."' "); 

$resultTYPE = mysql_fetch_row($reqTYPE); 
           
// parametres 

$extensions = array('png', 'gif', 'jpg', 'jpeg', 'JPG', 'PNG', 'JPEG', 'GIF'); 
          $taille_max = 1000000; 
          // test/création du dossier de destination 
          $destination_dossier = 'dl/photos/'.$resultTYPE['TYPE_LABEL'].'/'; 

if(!is_dir('../'.$destination_dossier)) 
          
{ 
mkdir('../'.$destination_dossier, 0777); 
} 
          // vérifications 

for ($i = 0; $i < count($_FILES['photo']['name']); $i++) 
{ 
          $i2 = $i+1; 
           
if($_FILES['photo']['name'][$i]) 
{ 
if($_FILES['photo']['name'] and !in_array( substr(strrchr($_FILES['photo']['name'][$i], '.'), 1), $extensions ) )        { 
echo '<meta http-equiv="refresh" content="3; url=gestion-dl.php" /><font color="red">La photo doit être de type png, gif ou jpg ! </font><br /><br />';   
} 
elseif( file_exists($_FILES['photo']['tmp_name'][$i]) and filesize($_FILES['photo']['tmp_name'][$i]) > $taille_max) 
{ 
echo '<meta http-equiv="refresh" content="3; url=gestion-dl.php" /><font color="red">Votre fichier doit faire moins de 1Mo ! </font><br /><br />'; 
} 

// si aucune erreur 

if(!isset($erreur) and !empty($_FILES['photo']['name'][$i])) 
{ 
$dest_fichier = basename($_FILES['photo']['name'][$i]); 

// formatage nom fichier 

// enlever les accents 

$dest_fichier = strtr($dest_fichier,  
'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ',  
'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy'); 
          // remplacer les caracteres autres que lettres, chiffres et point par _ 

$dest_fichier = preg_replace('/([^.a-z0-9]+)/i', '_', $dest_fichier); 
          // copie du fichier 
          $chemin_img=$destination_dossier.$dest_fichier; 
           
if(!file_exists('../'.$chemin_img)) 
{  
move_uploaded_file($_FILES['photo']['tmp_name'][$i], '../'.$destination_dossier.$dest_fichier.''); 

//$titre = addslashes($_POST['']); 
          echo '<meta http-equiv="refresh" content="3; url=gestion-dl.php" /><font color="green">Ajout(s) réussi(s) !</font>'; 

//mysql_query("INSERT INTO dl () VALUES () "); 
} 
else echo '<meta http-equiv="refresh" content="3; url=gestion-dl.php" /><font color="red">La photo n°'.$i2.' existe déjà </font><br /><br />'; 
}    
} 
} 
} 
else echo 'Ajouter des photos'; 
?>


voila pour la partie php, en haut de la page gestion-dl.php donc, et là c'est un bout du formulaire plus bas dans la meme page :

<form method="post" action="gestion-dl.php" enctype="multipart/form-data"> 
<!--Limiter la taille des fichiers à 1Mo --> 
<input type="hidden" name="MAX_FILE_SIZE" value="1000000" />  
<table align="center"> 
<tr> 

<td>Choisir un type de DL : </td> 
<td><select name="typecode3"> 

<?php 
$reqTYPE3 = mysql_query('SELECT * FROM typedl ORDER BY TYPE_LABEL'); 
while ($donneesT= mysql_fetch_array($reqTYPE3))  
{ 
echo'<option value="'.$donneesT['TYPE_CODE'].'">'.$donneesT['TYPE_LABEL'].'</option>'; 
}         
?></select> 
</td> 
</tr> 

<tr> 
<td align="right"><label for="photo">Photo : </label></td> 
<td><input type="file" name="photo[]" /></td> 
</tr> 

<tr> 
<td colspan="2" align="center"><br /><input class="bouton" type="submit" name="ajoutDL" value="Ajouter le DL" onclick="return (confirm('Ce téléchargement sera ajouté, continuer ?'));" /> 
</td> 
</tr> 
</table> 
</form>


pour expliquer tout ca brievement, je voudrait ajouter une photo en meme temps que des données dans une bdd, en fait ce serait un album mp3, avec sa jaquette, en téléchargement.

donc je choisis le type de téléchargement ("album" pour de la musique) dans la liste déroulante qui est bien chargée grace a la requete $reqTYPE, j'entre les infos (artistes, titre de l'album etc ... je les ai pas mis ca sert a rien) puis je choisis une jaquette si elle est dispo et enfin j'envoi le tout a la fois sur le serveur (création du dossier -> upload de la photo dedans) et dans la base (avec la requete "insert" dans la table dl)

le probleme c'est que $_FILES est vide, ou plutot n'existe pas ("undefined index : photo") quand je valide le formulaire et je ne comprends pas pourquoi ...



si quelqu'un a la solution ou un code simple pour envoyer une seule photo (le mien c'est pour plusieurs et j'ai du mal l'adapter) merci d'avance !

1 réponse

maxland Messages postés 22 Statut Membre
 
merci de vos nombreuses reponses lol on dirait que je pose tout le temps des colles sur ce forum j'ai jamais de (bonnes) réponses ...

enfin bref, l'erreur venait du code html en fait, plus exactement des formulaires.

j'ai 6 formulaires sur la meme page et il se trouve qu'il n'y avait qu'un seul formulaire fermé (</form>), celui de l'envoi de photo.

bon tout est reglé maintenant, et encore merci (à moi hein) :)
0