uploader une image sur une page d'un site web

yan7000
Invité n'ayant pas de compte PHPfrance

11 juil. 2006, 15:01

Bonjour,
Depuis quelques temps, j'essaie en vain de faire un script afin d'uploader une à plusieurs image sur mon site, afin que les visiteurs puissent créer leurs propre gallerie (artistique), mais en vain. La page distante reprend les valeurs de la première page.
vous pouvez jeter un oeil la http://www.discovery-art.com/uploads/new3.php

Je suis perdu... est-ce que l'erreur vient d'ici:
<?php
$poids_max = 512000; // Poids max de l'image en octets (1Ko = 1024 octets)
$repertoire = '/uploads/'; // Repertoire d'upload
if (move_uploaded_file($_FILES['fichier']['tmp_name'], $repertoire.$nom_fichier))
      {
         $url = 'www.discovery-art.com/'.$repertoire.''.$nom_fichier.'';
         echo 'Votre image à été uploadée sur le serveur avec succes!<br>Voici le lien: <input type="text" value="' . $url . '" size="60">';
Pourtant j'ai créé un dossier "uploads" chez mon hébergeur, et j'ai modifié les droits, le chmod.
Avec celà, une petite question, si plusieurs visiteurs uploadent leurs images, dois-je faire un formulaire d'upload pour chaque personne dans leur espace membre, vu qu'ils auront leur propre page ou ils exposeront leurs images?
Ou sont-ils automatiquement rediriger par leur pseudo qu'ils auraient créé au début? Ou chercher ma réponse?
Merci à tous

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

11 juil. 2006, 15:35

Ton chemin n'est pas bon... il ne faut pas confondre url et chemins sur le disque. Dans ton cas tu veux déplacer un fichier sur le serveur ce qui n'a rien à voir avec l'url, mais avec l'arborescence des fichiers.

Il est recommandé pour cela d'utiliser des chemins relatifs par rapport aux scripts.

En effet, quand tu demandes à déplacer dans le dossier "/uploads/" il va interpréter le premier "/" comme étant la racine du disque (c'est comme si tu indiquais c:\) et cela m'étonnerai beaucoup que ton hébergeur ait un dossier uploads à la racine de son serveur, et plus encore qu'il te laisse écrire dedans ;)


Quant à la question du formulaire par membre la réponse est évidement qu'il te faut un seul formulaire partagé entre tous tes utilisateurs et capable de les distinguer pour ranger un minimum les fichiers :) (imagine quand tu aurais 10.000 utilisateurs, si tu as autant de formulaires, et qu'il te faut aller corriger un truc dessus ;))

yan7000
Invité n'ayant pas de compte PHPfrance

11 juil. 2006, 16:13

J'ai changé le chemin et mis le chemin complet, mais celà ne marche pas.
Sur la page distante comme tu peux voir: http://www.discovery-art.com/uploaddefichier.php, il me répète l'invite d'envoi des fichiers.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

11 juil. 2006, 16:21

Ben là, il me dit surtout page non trouvée ;) Il faudrait un peu plus de code de toute façon pour voir ce qui peut ne pas aller

Quand tu dis que tu as mis "le chemin complet" c'est à dire ? tu as mis un truc du genre "C:\program files\apache..." (voire /home/chepaquoi/... pour unix) ou bien "http://www.monsite..." ?

Dans le premier cas (et que le chemin est bon) c'est qu'il y a un autre soucis et faudrait mettre un peu plus de code, dans le second c'est que tu n'as pas compris ce que j'ai écrit dans le message précédent :)

Edit : Si dans ton code tu récupères $_FILES['fichier'] alors que tes champs s'appellent "fichier1", "fichier2", etc. ca ne fonctionnera effectivement jamais.. jette un coup d'oeil sur ce topic.

yan7000
Invité n'ayant pas de compte PHPfrance

11 juil. 2006, 16:38

Zut j'ai fait une erreur: http://www.discovery-art.com/uploads/up ... ichier.php
excuse...
$poids_max = 512000; // Poids max de l'image en octets (1Ko = 1024 octets)
$repertoire = '/home/.../public_html/uploads/'; // Repertoire d'upload
J'ai créé moi-même ce dernier fichier pour pouvoir éditer le chmod

voilà la fin du script de la seconde page:
// On upload le fichier sur le serveur.
      if (move_uploaded_file($_FILES['fichier']['tmp_name'], $repertoire.$nom_fichier))
      {
         $url = 'www.discovery-art.com/'.$repertoire.''.$nom_fichier.'';
         echo 'Votre image à été uploadée sur le serveur avec succes!<br>Voici le lien: <input type="text" value="' . $url . '" size="60">';
      }
      else
      {
         echo 'L\'image n\'a pas pu être uploadée sur le serveur.';
      }
     
   }
   
}
else
{
   ?>
   <form method="post" enctype="multipart/form-data">
      <input type="hidden" name="MAX_FILE_SIZE" value="<?php echo $poids_max; ?>">
      <input type="file" name="fichier1"><br>
	  <input type="file" name="fichier2"><br>
	  	<input type="file" name="fichier3"><br>
		<input type="file" name="fichier4"><br>
		<input type="file" name="fichier5"><br>
		<input type="file" name="fichier6"><br>
		
      <input type="submit" value="Envoyer">
   </form>
   <?php
}
merci de ton aide.
yan

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

11 juil. 2006, 16:58

$_FILES['fichier'] ne correspond à aucun de tes champs puisqu'ils s'appellent "fichier1", "fichier2" ... cela ne peut donc pas marcher.

Il te faut soit utiliser $_FILES["fichier1"] et déplacer le premier fichier, puis utiliser $_FILES["fichier2"] et déplacer le deuxième fichier etc.

Soit renommer tes champs pour les appeler "fichier[1]", "fichier[2]", ... Ainsi tu peux utiliser $_FILES['fichier'], avec $_FILES['fichier'][1] contenant le premier fichier, $_FILES['fichier'][2] contenant le deuxième, ..
Tu peux dès lors faire une boucle pour les enregistrer un par un :) (voir le topic indiqué ci dessus :))

Invité
Invité n'ayant pas de compte PHPfrance

11 juil. 2006, 23:04

J'ai renommé les fichiers, mais pour la boucle, je la mets ou?
J'ai essayé ici:
mais ca ne marche pas.


while(
if (move_uploaded_file($_FILES['fichier']['tmp_name']++), $repertoire.$nom_fichier))
      {
         $url = 'www.discovery-art.com/'.$repertoire.''.$nom_fichier.'';
         echo 'Votre image à été uploadée sur le serveur avec succes!<br>Voici le lien: <input type="text" value="' . $url . '" size="60">';
      }
      else
      {
         echo 'L\'image n\'a pas pu être uploadée sur le serveur.';
      }
     
   }
   
}
else
{
   ?>
   
   <form method="post" enctype="multipart/form-data">
      <input type="hidden" name="MAX_FILE_SIZE" value="<?php echo $poids_max; ?>">
      <input type="file" name="fichier"><br>
	  	      <input type="submit" value="Envoyer">
	  
   </form>
   <?php
}
?>
Désolé de mon débutantisme...

yan7000
Invité n'ayant pas de compte PHPfrance

12 juil. 2006, 14:33

Comme j'avais de la peine avec les boucles, j'ai essayé de faire autrement, et apparement ça marche. ca passe à la page distante.
Mais à ma surprise, lorsque je fais un test, l'ordinateur me "dit", enfin..., :

"Le fichier doit être au format *.jpeg, *.gif ou *.png .
Retour"

Pourtant, j'ai bien mis la condition.
Comme j'ai bien remodeler mon code, je le remets ici:
formulaire html:
...........
<form method="post" action="uploaddefichier.php" enctype="multipart/form-data">
<input type="hidden" name="MAX_FILE_SIZE" value="">
<input type="file" name="fichier1"><br>
<input type="file" name="fichier2"><br>
<input type="file" name="fichier3"><br>
<input type="file" name="fichier4"><br>
<input type="file" name="fichier5"><br>
<input type="file" name="fichier6">
<input type="submit" value="Envoyer">
</form>

</div>
<div id="pied">pied de page</div>
</div>
</body>
</html>
et le php:
<html>
<head><title>Uploadez vos images!</title></head>
<body>
<?php
$poids_max = 512000; // Poids max de l'image en octets (1Ko = 1024 octets)
$repertoire = '/home/discov/public_html/uploads/'; // Repertoire d'upload


if (isset($_FILES['fichier1']))
if (isset($_FILES['fichier2']))
if (isset($_FILES['fichier3']))
if (isset($_FILES['fichier4']))
if (isset($_FILES['fichier5']))
if (isset($_FILES['fichier6']))
{
   
   // On vérifit le type du fichier
   
   
   
   if ($_FILES['fichier']['type'] != 'image/png' && $_FILES['fichier']['type'] != 'image/jpeg' && $_FILES['fichier']['type'] != 'image/jpg' && $_FILES['fichier']['type'] != 'image/gif')
   {
      $erreur = 'Le fichier doit être au format *.jpeg, *.gif ou *.png .';
   }
   
   // On vérifit le poids de l'image
   elseif ($_FILES['fichier']['size'] > $poids_max)
   {
      $erreur = 'L\'image doit être inférieur à ' . $poids_max/1024 . 'Ko.';
   }
   
   // On vérifit si le répertoire d'upload existe
   elseif (!file_exists($repertoire))
   {
      $erreur = 'Erreur, le dossier d\'upload n\'existe pas.';     
   }
   
   // Si il y a une erreur on l'affiche sinon on peut uploader
   if(isset($erreur))
   {
      echo '' . $erreur . '<br><a href="javascript:history.back(1)">Retour</a>';
   }
   else
   {
         
      // On définit l'extention du fichier puis on le nomme par le timestamp actuel
	  if ($_FILES['fichier']['type'] != "image/pjpeg"
&& $_FILES['fichier']['type'] != "image/pjpg"
&& $_FILES['fichier']['type'] != "image/gif"
&& $_FILES['fichier']['type'] != "image/x-png"
&& $_FILES['fichier']['type'] != "image/jpeg"
&& $_FILES['fichier']['type'] != "image/jpg"
&& $_FILES['fichier']['type'] != "image/png")

	  

      $nom_fichier = time().$extention;
             
      // On upload le fichier sur le serveur.

      if (move_uploaded_file($_FILES['fichier1']['tmp_name'], $repertoire.$nom_fichier))
	  if (move_uploaded_file($_FILES['fichier2']['tmp_name'], $repertoire.$nom_fichier))
	  if (move_uploaded_file($_FILES['fichier3']['tmp_name'], $repertoire.$nom_fichier))
	  if (move_uploaded_file($_FILES['fichier4']['tmp_name'], $repertoire.$nom_fichier))
	  if (move_uploaded_file($_FILES['fichier5']['tmp_name'], $repertoire.$nom_fichier))
	  if (move_uploaded_file($_FILES['fichier6']['tmp_name'], $repertoire.$nom_fichier))
      {
         $url = 'www.discovery-art.com/'.$repertoire.''.$nom_fichier.'';
         echo 'Votre image à été uploadée sur le serveur avec succes!<br>Voici le lien: <input type="text" value="' . $url . '" size="60">';
      }
      else
      {
         echo 'L\'image n\'a pas pu être uploadée sur le serveur.';
      }
     
   }
   
}
else
{
   ?>
   
   <form method="post" enctype="multipart/form-data">
      <input type="hidden" name="MAX_FILE_SIZE" value="<?php echo $poids_max; ?>">
      
	  <input type="file" name="fichier"><br>
		 <input type="file" name="fichier"><br>
		 <input type="file" name="fichier"><br>
		 <input type="file" name="fichier"><br>
		 <input type="file" name="fichier"><br>
		 <input type="file" name="fichier">
		 <input type="submit" value="Envoyer">
	  	    
	  
   </form>
   <?php
}
?>