Upload image + formulaire

yola26
Invité n'ayant pas de compte PHPfrance

15 sept. 2005, 18:53

De retour,

bonjour j'aimerai savoir la technique pour obtenir ceci :

Objectifs
stocker en base uniquement le nom du fichier, et avoir en variable de config le chemin absolu vers le répertoire de stockage.

En détails
J'ai mon formulaire avec des champs à remplir comme nom, titre, prénom et j'ai un champ pour uploader une image et un champ pour sélectionner dans une liste déroulante les images uploader dans un répertoire ! Mon but est d'arrivé à lorsque j'upload le fichier image et que j'ai rempli mes autres champs à uploader le ficher tout en gardant les données inscrites dans les champs et qu'il me réactualise la liste déroulante ou se trouve mon fichier uploadé . Puis après je n'ai plus qu'à cliquer sur envoyer !

Mammouth du PHP | 19672 Messages

15 sept. 2005, 18:58

Pour te guider, il y a un tuto exprès pour ça sur le site
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

yola26
Invité n'ayant pas de compte PHPfrance

15 sept. 2005, 18:59

Je te remercie pour le lien, mais j'étais déjà aller regarder. j'ai compris comment uploader un fichier ce n'est pas vraiment le probleme c'est surtout d'afficher une liste déroulante contenant la liste des fichiers stockés dans un répertoire .

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

15 sept. 2005, 19:01

pour parcourir un répertoire tout est dans la doc, avec un exemple :
http://fr3.php.net/readdir

par contre pour ton premier problème j'ai eu du mal à suivre donc...

yola26
Invité n'ayant pas de compte PHPfrance

15 sept. 2005, 19:13

le but est d'uploader un fichier à partir du formulaire à l'aide d'une commande php ou javascript afin de réactualiser la liste des fichiers présents dans le répertoire tout en gardant déjà les informations déjà rempli dans le formulaire puis enregistrer dans la base de donnée le champ nom, prenom, chemin d'accès de l'image. L'idée c'est de pouvoir tout faire sur la 1 iere page sans être obligé d'avoir 2 fichiers pour réaliser cette opération

yola26
Invité n'ayant pas de compte PHPfrance

15 sept. 2005, 19:31

pour ceux qui veulent lister un répertoire à l'aide d'un menu déroulant voici la solution :
    <?
           if ($dir = @opendir("."))
           {
               while (($file = readdir($dir)) !== false)
               {
                   if($file != ".." && $file != ".")
                   {
                       $filelist[] = $file;
                   }
               }
               closedir($dir);
           }
           ?>
<form>
           <select name="selected_dir" >
           <?php
           asort($filelist);
           while (list ($key, $val) = each ($filelist))
           {
               echo "<option>$val</option>";
           }
           ?>
            </select>
</form>

yola26
Invité n'ayant pas de compte PHPfrance

16 sept. 2005, 16:02

oulala

j'ai mis dans mon formulaire un champ upload et en dessous une liste déroulante permettant d'afficher le contenu du dossier ou sont uploader les images. Mais lorsque je clique sur envoi. Cela ne fonctionne pas ! Il faudrait qu'il envoie l'image dans le dossier à l'aide d'un javascript pour mettre à jour la liste déroulante sans recharger la page simplement en réactulisant la liste déroulante. je vous transmets le code :

Code : Tout sélectionner

<?php if(isset($erreur)){ echo '<p>', $erreur ,'</p>'; } ?> <form method="POST" action="xxx.php" enctype="multipart/form-data"> <table border="0" width="445" id="table1"> <tr> <td colspan="2"><font size="4" face="Verdana">Fiche Technique de l'utilisateur</font></td> </tr> <tr> <td width="125"><b><font face="Verdana" size="2">Utilisateur :</font></b></td> <td width="310"><select size="1" name="utilisateur"> <? for ($cpt = 0; $cpt < count($tab); $cpt++) { echo '<option value="'.$tab[$cpt]['prenom'].' '.$tab[$cpt]['nom'].'">'.$tab[$cpt]['prenom'].' '.$tab[$cpt]['nom'].'</option> '; } ?> </select></td> </tr> <tr> <td width="125"><b><font face="Verdana" size="2">titre :</font></b></td> <td width="310"><input type="text" name="titre" size="20"></td> </tr> <tr> <td width="125"><b><font face="Verdana" size="2">description :</font></b></td> <td width="310"><textarea rows="6" name="description" cols="35"></textarea></td> </tr> <?php if(isset($_FILES['photo'])) { // params unset($erreur); $extensions_ok = array('png', 'gif', 'jpg', 'jpeg'); $taille_max = 100000; $dest_dossier = 'c:/Apps/'; // vérifications if( !in_array( substr(strrchr($_FILES['photo']['name'], '.'), 1), $extensions_ok ) ) { $erreur = 'Veuillez sélectionner un fichier de type png, gif ou jpg !'; } elseif( file_exists($_FILES['photo']['tmp_name']) and filesize($_FILES['photo']['tmp_name']) > $taille_max) { $erreur = 'Votre fichier doit faire moins de 500Ko !'; } // copie du fichier if(!isset($erreur)) { $dest_fichier = basename($_FILES['photo']['name']); // 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 move_uploaded_file($_FILES['photo']['tmp_name'], $dest_dossier . $dest_fichier); } } ?> <tr> <td width="115"><b><font size="2" face="Verdana">Envoi photo :</font></b></td> <td width="306" colspan="2"> <input type="hidden" name="MAX_FILE_SIZE" value="500000" /> <input type="file" name="photo" /><input type="submit" name="envoi" value="Envoi" /></td> </tr> <tr> <td width="115"><font face="Verdana" size="2"><b>Photo du chorègien :</b></font></td> <td width="105"><select size="1" name="inscription_avatar" onChange ="if (VersionNavigateur(3.0,4.0)) imgDepart1.src='avatar/avatar_base/' + form.inscription_avatar.options[form.inscription_avatar.selectedIndex].value + '.gif';"> <? $dossier = opendir ("avatar/avatar_base/"); $i = 0; while ($fichier = readdir ($dossier)) { if ($fichier != "." && $fichier != ".." && $fichier != "index.php" && $fichier != "avatar_base_temp") { $fichier = substr($fichier, 0, strlen($fichier)-4); if ($fichier == 'photo') { echo '<option value="'.$fichier.'" selected>'.$fichier.'</option>'; $fichier1 = $fichier; } else { echo '<option value="'.$fichier.'">'.$fichier.'</option>'; } $i = $i + 1; } } closedir ($dossier); ?>
Dois-je mettre 2 <form> l'un pour l'upload du fichier et l'un pour l'envoi du formulaire dans la base de donnée ? enfin comment puis-je faire