IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Récupérer le nom d'un champ d'upload


Sujet :

Langage PHP

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2012
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2012
    Messages : 6
    Points : 5
    Points
    5
    Par défaut Récupérer le nom d'un champ d'upload
    Bonjour

    J'ai un formulaire permettant d'ajouter des photos, qui fonctionne en plusieurs étapes :
    - page 1 : on choisit l'album concerné et le nombre de photos à uploader
    - page 2 : le nombre de champs d'upload correspondant s'affiche
    - page 3 : on ajoute les photos sur le FTP et leur url dans la BDD

    La page 1 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
    <form action="ajouter_photos2.php" method="post" enctype="multipart/form-data">  
    <label> Album : <select name="id_chat">
    <?
    $req = mysql_query("SELECT * from chats Order by nom") or die ("Erreur requête");
    $res = mysql_num_rows($req);
    $i=0;
    while($res!=$i)
    {
    $id = mysql_result($req,$i,"id");
    $nom = mysql_result($req,$i,"nom");
    ?>
    	<option value="<? echo $id; ?>"><? echo $nom; ?></option>
    <?php
    $i++;
    }
    ?> 
    </select></label><br /><br />
    <label>Nombre de photos : <input type="text" name="nombre" size="2" maxlength="2"></label><br /><br />
    <input class="bouton2" type="submit" name="valider" value="Valider">
    </form>
    La page 2 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
    <?php
    $id_chat = $_POST['id_chat'];
    $nombre = $_POST['nombre'];
    ?>
    <form action="ajouter_photos3.php" method="post" enctype="multipart/form-data">  
    <?
    $i=0;
    while($nombre!=$i)
    {
    $nb = $i+1;
    ?>
    <label>Photo n° <? echo $nb; ?> : <input type="file" name="image_<? echo $nb; ?>"></label><br><br>
    <?php
    $i++;
    }
    ?> 
    <input type="hidden" name="nombre" value="<? echo $nombre; ?>">
    <input type="hidden" name="id_chat" value="<? echo $id_chat; ?>">
     
    <input class="bouton2" type="submit" name="valider" value="Valider">
    </form>
    La page 3 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
     
    <?php
    $id_chat = $_POST['id_chat'];
    $nombre = $_POST['nombre'];
     
    $i=0;
    while($nombre!=$i)
    {
    $nb = $i+1;
    $timestamp = time();
    $url = $nb.'_'.$timestamp;
     
    $dossier = 'photos/';
    $fichier = basename($_FILES['image']['name']);
    $extensions = array('.png', '.gif', '.jpg', '.jpeg', '.JPG', '.JPEG');
    $extension = strrchr($_FILES['image']['name'], '.'); 
    //Début des vérifications de sécurité...
    if(!in_array($extension, $extensions))
    {
         $erreur = 'Vous devez uploader un fichier de type PNG, GIF, JPG ou JPEG !';
    }
    if(!isset($erreur))
    {
         $fichier = $url;
         $fichier .= $extension;
         if(move_uploaded_file($_FILES['image']['tmp_name'], $dossier . $fichier))
         {
    echo "C'est bon pour : $fichier<br />";
    mysql_query("INSERT Into photos VALUES ('','$id_chat','$url')") or die ("Erreur requête !");
         }
         else
         {
              echo 'Echec de l\'upload !';
         }
    }
    else
    {
         echo $erreur;
    }
     
    $i++;
    }
    ?>
    Le souci, c'est que je ne vois pas comment faire en sorte que le script puisse traiter les champs "image_1", "image_2" et pas juste un champ "image" comme dans mon script actuel.
    En gros, comment combiner "image" et "_$nb" dans ce cas...

    Question sans doute très bête, j'en conviens !

    Merci pour votre aide.

  2. #2
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Tout simplement $_FILES['image_'.$nb] au lieu de $_FILES['image']
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  3. #3
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 382
    Points : 10 410
    Points
    10 410
    Par défaut
    Citation Envoyé par mariolus Voir le message
    Bonjour
    J'ai un formulaire permettant d'ajouter des photos, qui fonctionne en plusieurs étapes :
    - page 1 : on choisit l'album concerné et le nombre de photos à uploader
    - page 2 : le nombre de champs d'upload correspondant s'affiche
    - page 3 : on ajoute les photos sur le FTP et leur url dans la BDD
    Bah tu pourrais ne faire qu'une étape. Surtout que tous les navigateurs pas trop anciens supportent l'upload multiple beaucoup plus agréable à utiliser que de remplir individuellement chaque champ.

    1/ Attention dans ton script les nouveaux fichiers écraseront les anciens de même nom déjà existants sur le serveur. C'est pas souvent souhaitable...
    2/ Et si les photos envoyées dépassent une des valeurs "upload_max_filesize" ou "post_max_size" du serveur, le visiteur va se retrouver devant une page blanche sans plus de renseignements.

    Si besoin tu peux regarder cette classe d'upload pour répondre à ces problèmes. Elle supporte l'upload multiple et peut faire des redimensionnements à la volée. Mais si elle gère correctement les erreurs serveur en renvoyant un message approprié - plutôt qu'une page blanche quand l'erreur n'est pas gérée - elle ne sait pas pour autant les dépasser. Or si tu veux pouvoir télécharger un assez grand nombre d'images, tu peux assez vite te heurter à ces limitations (et dans ce cas tout le post est annulé).
    Tu aurais donc sans doute intérêt à utiliser cette autre classe d'upload qui permet quant à elle de surpasser les limitations serveur "upload_max_filesize" et "post_max_size", de télécharger un nombre illimité de fichiers et fourni un retour d'informations en temps réel (progression etc.). Elle est un peu plus longue à configurer que la première mais elle est également fournie dans un dossier préconfiguré avec un fichier de test prêt à l'emploi.

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2012
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2012
    Messages : 6
    Points : 5
    Points
    5
    Par défaut
    Celira : merci, ça fonctionne !

    ABCIWEB : oui en effet, je vais utiliser ta deuxième classe. Merci !

  5. #5
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 382
    Points : 10 410
    Points
    10 410
    Par défaut
    Salut,

    Pour info concernant ton code, quand on veut passer un nombre indéfini de champs ayant le même nom, le plus pratique avec php est d'utiliser la notation tableau dans le formulaire name="image[]" et ensuite il te suffit de lister le tableau récupéré foreach ($_FILES['image] as image) {...} (c'est valable pour tout type de champ).

    Pour le reste oui la deuxième classe te permettras de faire ce que tu veux sans restriction, ce qui est appréciable surtout sur un mutualisé dont on ne peut pas modifier les paramètres serveur. Elle permet aussi d'annuler certains fichiers durant le téléchargement et cerise sur le gâteau, elle permet également une reprise d'upload pour les fichiers partiellement téléchargés (ce qui est plus rare)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 7
    Dernier message: 03/05/2010, 09h24
  2. [AC-2007] Récupérer le nom d'un champ dans une requête SQL
    Par othke dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 09/03/2010, 18h48
  3. récupérer le nom d'un champ static par sa valeur
    Par djidane39 dans le forum Langage
    Réponses: 8
    Dernier message: 28/11/2007, 19h07
  4. Comment récupérer le nom d'un champ ?
    Par langela94 dans le forum SQL
    Réponses: 2
    Dernier message: 07/06/2007, 16h23
  5. Récupérer le nom d'un champ pour utilisation dans getElement
    Par effree dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 20/02/2006, 16h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo