Page 1 sur 1

Upload d'une image (Probleme avec le nom et l'extention)

Posté : 04 déc. 2008, 12:36
par Gogad
Bonjour,


Je souhaiterais "uploader" une image , mais ca ne fonctionne pas.
Je souhaiterais pouvoir uploader des images .jpg .JPG ou encore png.
Ce code fonctionne jusqu'a ce que je mette en place la variable pour le nom et l'extention.
Le fichier est bien uploade dans le dossier mais la BDD n'est pas correctement remplise :(

Alors j'ai mes trois champs :

<input type="text" name="name">
<input type="hidden" name="MAX_FILE_SIZE" value="7999999">
<input name="picture" type="file" size="60" />


Ensuite mon code :
<?php 
$path = "......../...../pipingcl/www/images/flyer/";
  $newname = $_POST["name"];
  
  if($_FILES["picture"]["size"] > 0)
  		{
		
  if($_FILES["picture"]["error"] == UPLOAD_ERR_OK)
  		{
  
  $ext = explode(".", $_FILES["picture"]["name"]);
  $extar = count($ext) - 1;
  $tmp_name = $_FILES["picture"]["tmp_name"];
  $name = $_FILES["picture"]["name"];
  if(move_uploaded_file($tmp_name, $path."$newname.".$ext[$extar]))
  
  		{
  
  chmod($path."$newname.".$ext[$extar], 0644);
  $ufile = $newname.".".$ext[$extar];
  $updateit = mysql_query("INSERT into XXXXX (image) VALUES ('$ufile')");
  ?>
Merci pour votre aide :)

(PS : Le MAX_FILE_SIZE = 7999999 car j'avais lu quelque part qu'avec PHP on etait limite a 8Mo)

Posté : 04 déc. 2008, 14:43
par stopher
Salut , peut être un probléme dans l'extension que tu récupéres ,

pour bien la récupérer perso je prefere les expressions réguliéres ...
$nomfichier="toto.png";

preg_match("/(.[a-zA-Z]{3,}$)/",$nomfichier,$array);
Tu peux récupérer l'extension dans $array[1]
echo $array[1];
//ce qui affiche " .png "
Si tu ne veux pas le point retire le de l'expression .

Maintenant ton probléme ne vient peut être pas de là ..
mais ca améliore la récupération de l'extension de ton fichier ..

Posté : 04 déc. 2008, 23:39
par edison1986
Salut

Voila comment je ferai :
<?php 
   $path = "../../pipingcl/www/images/flyer/";
   $newname = $_POST["name"];
  
   if($_FILES["picture"]["size"] > 0)
   {
      if($_FILES["picture"]["error"] == UPLOAD_ERR_OK)
      {
         $ext = explode(".", $_FILES["picture"]["name"]);
         $ext = array_pop($ext);

         $tmp_name = $_FILES["picture"]["tmp_name"];
         $name = $_FILES["picture"]["name"];

         if(move_uploaded_file($tmp_name, $path.$newname.".".$ext))
         {
            $ufile = $newname.".".$ext;
            $insert = "INSERT INTO nom_table (image) VALUES '".$ufile."'";
            
            [FIN DU CODE AVEC TA REQUETE SQL]
         }
      }
   }
?>
Voila je pense que comme cela sa devrai bien fonctionner après à toi d'adapter...

Posté : 05 déc. 2008, 00:06
par AB
Salut , peut être un probléme dans l'extension que tu récupéres ,

pour bien la récupérer perso je prefere les expressions réguliéres ...
$nomfichier="toto.png";

preg_match("/(.[a-zA-Z]{3,}$)/",$nomfichier,$array);
Tu peux récupérer l'extension dans $array[1]
echo $array[1];
//ce qui affiche " .png "
Si tu ne veux pas le point retire le de l'expression .

Maintenant ton probléme ne vient peut être pas de là ..
mais ca améliore la récupération de l'extension de ton fichier ..
Je traduis pour les débutants :
Cherche toute chaine de caractère, en fin de chaine -> $, constituée par au moins trois -> {3,} letrres de l'alphabet en minuscules ou majuscules -> [a-zA-Z].

Remarque : Puisque les parenthèses capturantes correspondent au masque complet on pourrait les supprimer et obtenir le résultat du masque complet dans $array[0]. D'ailleurs dans l'expression écrite plus haut on a $array[0] = $array[1]

On aura donc le même résultat en faisant
$nomfichier="toto.png";

preg_match("/[a-zA-Z]{3,}$/",$nomfichier,$array);
if (isset($array[0])) echo $array[0];

x

Posté : 05 déc. 2008, 09:28
par Gogad
Merci pour votre aide :)

J'ai fait un mix des infos que vous m'avez donne et ca a fonctionne pour une page...

J'ai voulu reproduire le meme schema pour une seconde page de mon site, mais ca plante.

J'ai l'erreur suivante :
Parse error: syntax error, unexpected T_ELSE in /....../www/admin/dj.php on line 349

J'ai vire le Else, check les } et les ) ainsi que les " ou ', rien a faire toujours la meme erreur...
Quand je compare avec la premiere page qui fonctionne, les else sont exactement a la meme place.

J'imagine que c'est une faute bete...

Voici le code :
<?php
}

//NEW ENTRY

else if(isset($_GET["new"]))

{

            //NO DATA SENT YET

            if(!isset($_POST["sent"]))

            {

                        ?>
                                   	     
               
                                   	   <form method="post" action="dj.php?new" enctype="multipart/form-data">
                        
						<p>&nbsp;</p>
						<p>&nbsp;</p>
						<table width="600" border="0" align="center" cellpadding="3" cellspacing="1" bgcolor="#003399">
						
						<tr><td colspan="2"><div align="center"><span class="taille24b">Ajouter une entr&eacute;e </span></div></td></tr>

                        <tr>
                          <td width="110"><span class="taille10b">Nom :</span></td>

                          <td width="475"><input name="field1" type="text" size="50"></td></tr>

                        <tr>
                          <td><p class="taille10b">Contenu :</p>
                          <p class="taille10">Pour revenir a la ligne taper<br />
                          <br /></p></td>

                                   <td><textarea name="field2" cols="50" rows="7"></textarea></td></tr>
								   
						<tr>
                          <td width="110"><span class="taille10b">Genre Musiquale :</span></td>

                          <td width="475"><input name="field3" type="text" size="50"></td></tr>
								   

                        <tr>
						  	<td colspan="2"><div align="center"><span class="r10b"><img src="Images/attention.png" width="48" height="48"><br>
  Renommez chaque image de fa&ccedil;on &aacute; ce quelle ne porte pas le m&ecirc;me nom<br>
						  	Evitez les espaces et les accents<br>
						  	Par exemple, vous pouvez mettre un underscore : </span><span class="taille10">_gold</span><span class="r10b"><br>
					  	  Patience, encore une fois, &ccedil;a peut prendre quelques minutes...</span></div></td>
						  <tr>
						  	<td width="80"><span class="r10b">Renommer  :</span></td>
							<td> <input type="text" name="name" size="40"> 
							  <span class="j10">Pas d'accent, ni d'espace !  </span></td>
						</tr>
						<tr>
                            <td width="80"><span class="taille10b">Image :<br />
                          </span></td>
                            <td width="505"><input type="hidden" name="MAX_FILE_SIZE" value="7999999">
											<input name="picture" type="file" size="60" />						  </td>
                        </tr>

                        <tr><td colspan=2><div align="center">
                          <input type="submit" name="submit" value="Envoyer">
                        </div></td></tr>
                        </table>

 

                        <input type="hidden" name="sent" value="sent">

                        </form>

 

                        <?php

            }

 

//DATA SENT

            else

            {
			
// ici debute le scrip pour charger une nouvelle image
$path = "...../www/images/dj/";
   $newname = $_POST["name"];
  
   if($_FILES["picture"]["size"] > 0)
   {
   
      if($_FILES["picture"]["error"] == UPLOAD_ERR_OK)
      {
         $ext = explode(".", $_FILES["picture"]["name"]);
         $ext = array_pop($ext);

         $tmp_name = $_FILES["picture"]["tmp_name"];
         $name = $_FILES["picture"]["name"];

         if(move_uploaded_file($tmp_name, $path.$newname.".".$ext))
         {
            $ufile = $newname.".".$ext; 
			
			?>
   <?php

         if($saveit = mysql_query("INSERT into XXXXX (nom, contenu, genre, image) values ('".$_POST["field1"]."', '".$_POST["field2"]."', '".$_POST["field3"]."', '$ufile')") or die(mysql_error()))

                        {

 ?>
 <p align="center">&nbsp;</p>
<p align="center">&nbsp;</p>
<p align="center"><span class="v24bn">La photo &aacute; &eacute;t&eacute; transf&eacute;r&eacute;e  avec succ&egrave;s !</span></p>
								   
								   <script type="text/javascript">		
										<!--
										setTimeout("location.href='?';",500);
										/* Timeout time is in milliseconds (so 1000 = 1 second) */
										//-->
									</script>
									
<?php
                            }
                            else 					//file couldn't be moved
                            {
?>

<p align="center"><span class="r24b">Une erreur est survenur lors du transfert de l'image.</span></p>




                                   	   
                                   	   <p align="center">&nbsp;</p>
                                   	   <p align="center">L&rsquo;entr&eacute;e &agrave; &eacute;t&eacute; sauv&eacute;e. Redirection en cours&hellip;</p>
<?php

                        }
                                //LIGNE LIGNE LIGNE 349 349 349 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
                        else  //LIGNE LIGNE LIGNE 349 349 349 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
                                //LIGNE LIGNE LIGNE 349 349 349 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
                        {
							echo mysql_error();
                                   ?><p align="center">&nbsp;</p>
                                   	   <p align="center">L&rsquo;entr&eacute;e n&rsquo;&agrave; pas pu &ecirc;tre sauv&eacute;e.</p>
                                   	   <div align="center">
  <?php

                         }           
					}
 				}
			}
        }
	?>
Si quelqu'un a la patience, ce serait chouette :)
Merci.

Posté : 05 déc. 2008, 11:01
par guilt92
En fait le problème est pas le else, mais c'est qu'il manque une } donc il ne peut pas s exécuter. Si on prend la "structure" de ton code on obtient ceci :
<?php 
else if(isset($_GET["new"])) 
{ 
            if(!isset($_POST["sent"])) 
            { 
            } 
            else 
            { 
				if($_FILES["picture"]["size"] > 0) 
				{ 
    
					if($_FILES["picture"]["error"] == UPLOAD_ERR_OK) 
					{ 
						if(move_uploaded_file($tmp_name, $path.$newname.".".$ext)) 
							{ 
								if($saveit = mysql_query("INSERT into XXXXX (nom, contenu, genre, image) values ('".$_POST["field1"]."', '".$_POST["field2"]."', '".$_POST["field3"]."', '$ufile')") or die(mysql_error())) 
								{ 
								} 
								else                     //file couldn't be moved 
								{ 
								} 
                             //PROBLEME   
								else          
								{ 
								}            
                    } 
                 } 
            } 
} 
    ?> 
Ainsi tu es donc dans une boucle
						if() 
							{ 
							//code...
                             //PROBLEME   
								else          
								{ 
								} 
du coup forcément ca génère une erreur car le if n'est pas fini donc le else ne peut pas s'appliquer...

rajoute une } avant le else ca devrait mieux fonctionner ;)

x

Posté : 06 déc. 2008, 16:28
par Gogad
Humm, j'ai recompter tous les { et } ca collait, je ne comprend pas.

Du coup j'ai essaye de virer le "Else" avant l'erreur :
 } 
          else                     //file couldn't be moved
{ 
Et ca fontionne.

Merci pour ton aide :)