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 :

[Upload] Extraction du titre de l'image uploadée


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de camzo
    Homme Profil pro
    ingénieur en documentation
    Inscrit en
    Décembre 2006
    Messages
    168
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : ingénieur en documentation
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 168
    Par défaut [Upload] Extraction du titre de l'image uploadée
    bonsoir à tous,

    après moultes recherches infructueuses, je finis par vous demander comment on peut récupérer le titre de l'image uploadée, sachant que tout va bien pour l'upload en lui-même.
    La difficulté pour moi est que, lorsque j'upload, j'ai le chemin absolu qui s'affiche dans le champ de récupération. Normal me direz-vous mais très ennuyeux car il faut que je récupère uniquement la fin du chemin absolu, c'est-à-dire uniquement : image.jpg

    Pour vous éclairer, voici mon code simplifié du formulaire de chargement :

    Code html : 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
    <form method="post" action="chargement_photo.php" enctype="multipart/form-data">
    <table>
    <tr>
      <td>
          <input type="hidden" name="MAX_FILE_SIZE" value="1000000000" />
          <input type="file" name="mon_image" size="70" id="mon_image" />
      </td>
    </tr>
    <tr>
      <td>
          <input type="submit" name="submit" value="Envoyer" />
      </td>
    </tr>
    <tr>
      <td height="35%" bgcolor=#000000></td>
    </tr>
    </table>
    </form>

    voici le code simplifié de mon fichier php :

    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
    44
    45
    46
    47
    48
    49
    50
    51
    <?php
    $dossier = 'photos/';
    $fichier = basename($_FILES['mon_image']['name']);
    $taille_maxi = 1000000000;
    $taille = filesize($_FILES['mon_image']['tmp_name']);
    $extensions = array('.png', '.gif', '.jpg', '.jpeg', '.JPG');
    $extension = strrchr($_FILES['mon_image']['name'], '.'); 
     
    //connexion à la base mysql club et message si probleme
    $connexion=mysql_connect ('localhost','root','') or die ("impossible de se connecter à la base de données");
    mysql_select_db ('phototheque');
     
    //Début des vérifications de sécurité...
    if(!in_array($extension, $extensions))
    {
         $erreur = "...fichier de type png, gif, jpg, jpeg, JPG";     
    }
    if($taille>$taille_maxi)
    {
         $erreur = "le fichier est trop gros...";
    }
     
    //On formate le nom du fichier
    $fichier = strtr($fichier,
    'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ',
    'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');
    $fichier = preg_replace('/([^.a-z0-9]+)/i', '-', $fichier);
     
     // a ce stade $fichier devrait exactement correspondre au nom sur le disque
    if (file_exists ($dossier . $fichier)) 
    	{
    	 $erreur = "gardez si possible le même nom en...";
    		}
    		if(!isset($erreur))
    		{
    		if(move_uploaded_file($_FILES['mon_image']['tmp_name'], $dossier . $fichier))
    			{
    			echo "chargement réussi !!!";
    			}
    		else
    		{
    		echo "ehec du chargement\n";
    		}
    	}
    else
    echo $erreur;
     
    //fermeture de la connection
    mysql_close($connexion);
     
    ?>
    voilà où j'en suis... ça fonctionne très bien...
    mais, pour la récupération du nom de l'image uploadée (et non celui de l'image donné par le photographe), je vois vraiment pas.

    quelqu'un aurait-il une piste, un tutoriel à me conseiller ?

    merci d'avance...
    (et probablement à demain matin)

  2. #2
    Inactif  
    Avatar de Kerod
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    11 672
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 11 672
    Par défaut
    Tu peux récupérer le nom réel de l'image grâce au champs name de $_FILES (tout comme tmp_name)

  3. #3
    Membre éclairé Avatar de Space Cowboy
    Homme Profil pro
    chomeur
    Inscrit en
    Avril 2005
    Messages
    496
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : chomeur

    Informations forums :
    Inscription : Avril 2005
    Messages : 496
    Par défaut
    L'upload de fichier j'en est chier, mais beaucoup moins quand j'ai coder mon truc moi même, sans le récuperer.


    La réponse devrait être echo $fichier; ...

  4. #4
    Inactif  
    Avatar de Kerod
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    11 672
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 11 672
    Par défaut
    Attention, selon ton code tu récupèreras le nom de ton fichier avec $fichier mais pas son extension.Pour l'avoir il faudra aussi prendre $extension

  5. #5
    Membre confirmé Avatar de camzo
    Homme Profil pro
    ingénieur en documentation
    Inscrit en
    Décembre 2006
    Messages
    168
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : ingénieur en documentation
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 168
    Par défaut
    bon, j'ai retenu le maximum concernant vos remarques et, tout fonctionne : l'enregistrement de la photo et le chargement de la photo. J'ai donc procédé à la réunion des deux dans un même formulaire mais... je me fais boulé concernant l'upload (encore une fois!!!). Il me dit en effet que l'extension n'est pas bonne (absente en réalité)... J'ai lu, relu et re-relu mon code... je vois pas !!!

    voici en tout cas, le résultat du tout :

    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
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    <?
     
    $titre=$_GET['titre'];
    $sujet=$_GET['sujet'];
    $legende=$_GET['legende'];
    $format=$_GET['format'];
    $heure=$_GET['heure'];
    $date=$_GET['date'];
    $IDP=$_GET['IDP'];
    $IDS=$_GET['IDS'];
    $IDT=$_GET['IDT'];
    $fichier=$_GET['mon_image'];
     
    $connexion=mysql_connect ('localhost','root','') or die ("impossible de se connecter à la base de données");
    mysql_select_db ('phototheque');
     
    if($titre=='')
    {
    	echo "Votre enregistrement doit comporter un titre";
    	exit();
    }
    elseif(preg_match ('/[0-9][0-9]h[0-9][0-9]/', $heure) == 0)
    {
    	echo "L'heure doit être enregistrée sous la forme : 12h43";
    	exit();
    }
    elseif(preg_match ('/[0-2][0-9][0-9][0-9]-[0-1][0-9]-[0-3][0-9]/', $date) == 0)
    {
    	echo "La date doit être enregistrée sous la forme : AAAA-MM-JJ";
    	exit();
    }
    elseif($IDP=='')
    {
    	echo "Revenez à la page précédente et cliquez sur ...";
    	exit();
    }
    elseif($IDS=='')
    {
    	echo "Revenez à la page précédente et cliquez sur ...";
    	exit();
    }
    elseif($IDT=='')
    {
    	echo "Revenez à la page précédente et cliquez sur ...";
    	exit();
    }
     
    $dossier = 'photos/';
    $fichier = basename($_FILES['mon_image']['name']);
    $taille_maxi = 1000000000;
    $taille = filesize($_FILES['mon_image']['tmp_name']);
    $extensions = array('.png', '.gif', '.jpg', '.jpeg', '.JPG');
    $extension = strrchr($_FILES['mon_image']['name'], '.'); 
     
    if(!in_array($extension, $extensions)) //Si l'extension n'est pas dans le tableau
    {
    	echo "Vous devez charger un fichier de type png, gif, jpg, jpeg, JPG";
    	exit();
    }
    elseif($taille>$taille_maxi)
    {
    	echo "le fichier est trop gros...";
    	exit();
    }
     
    $fichier = strtr($fichier,
    'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ',
    'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');
    $fichier = preg_replace('/([^.a-z0-9]+)/i', '-', $fichier);
     
    if (file_exists ($dossier . $fichier)) 
    {
    	echo "gardez si possible le même nom en ...";
    	exit();
    }
    elseif(!isset($erreur))
    {
    	if(move_uploaded_file($_FILES['mon_image']['tmp_name'], $dossier . $fichier))
    	{
    	echo "chargement réussi !!!";
    	exit();
    	}
    }
    else
    echo "raté apparement";
    	exit();
     
    $query=mysql_query ("INSERT INTO photo (titre,sujet,legende,format,heure,date,IDP,IDS,IDT,titre_im) VALUES 
    ('" . $titre . "','" . $sujet . "','" . $legende . "','" . $format . "','" . $heure . "','" . $date . "','" . $IDP . "','" . $IDS . "','" . $IDT . "','" . $fichier . "')") 
    or die ("si ça persiste, contactez ...");
     
    mysql_close($connexion);
     
    ?>
    voilà, pourriez-vous m'indiquer où et quoi je dois rajouter car, toutes mes tentatives vaines (et désespérées sur la fin) me décourage...

    merci bien pour les rensignements forts attendus...
    cordialement

  6. #6
    Inactif  
    Avatar de Kerod
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    11 672
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 11 672
    Par défaut
    Je te conseille pour récupérer l'extension de remplacer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $extension = strrchr($_FILES['mon_image']['name'], '.');
    par le code ici : Comment séparer un nom de fichier de son extension ?

    D'ailleurs tu peux le faire pour récupérer ton nom de fichier.

  7. #7
    Membre confirmé Avatar de camzo
    Homme Profil pro
    ingénieur en documentation
    Inscrit en
    Décembre 2006
    Messages
    168
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : ingénieur en documentation
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 168
    Par défaut
    Donc, j'ai corrigé pas mal de truc et ça marche !!!

    voici mon formulaire simplifié :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <form ACTION="f_traitement_photo.php" METHOD="POST" NAME="f_saisie_photo" ENCTYPE="multipart/form-data">
     
    <INPUT TYPE="TEXT" NAME="titre" SIZE="60">
    <INPUT TYPE="TEXT" NAME="sujet" SIZE="60">
    <INPUT TYPE="TEXT" NAME="legende" SIZE="60">
    <INPUT TYPE="TEXT" NAME="format" SIZE="60">
    <INPUT TYPE="TEXT" NAME="heure" SIZE="60">
    <INPUT TYPE="TEXT" NAME="date" SIZE="60">
    <INPUT TYPE="TEXT" NAME="IDP" SIZE="60">
    <INPUT TYPE="TEXT" NAME="IDS" SIZE="60">
    <INPUT TYPE="TEXT" NAME="IDT" SIZE="60">
    <INPUT TYPE="hidden" NAME="MAX_FILE_SIZE" VALUE="1000000000" /><input TYPE="file" NAME="mon_image" SIZE="60" ID="mon_image" />
    j'avais une faute dans mon enctype.... (ahhhh!!!!)

    et voici mon fichier de traitement simplifié :

    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
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    <?
    $titre=$_POST['titre'];
    $sujet=$_POST['sujet'];
    $legende=$_POST['legende'];
    $format=$_POST['format'];
    $heure=$_POST['heure'];
    $date=$_POST['date'];
    $IDP=$_POST['IDP'];
    $IDS=$_POST['IDS'];
    $IDT=$_POST['IDT'];
    $fichier=$_POST['mon_image'];
     
    $connexion=mysql_connect ('localhost','root','') or die ("impossible de se connecter à la base de données");
    mysql_select_db ('phototheque');
     
    if(isset($_POST[$titre==''])){
    	echo "Votre enregistrement doit comporter un titre";
    	exit();}
     
    elseif(preg_match ('/[0-9][0-9]h[0-9][0-9]/', $heure) == 0){	
    	echo "L'heure doit être enregistrée sous la forme : 12h43";
    	exit();}
     
    elseif(preg_match ('/[0-2][0-9][0-9][0-9]-[0-1][0-9]-[0-3][0-9]/', $date) == 0){
    	echo "La date doit être enregistrée sous la forme : AAAA-MM-JJ";
    	exit();}
     
    elseif($IDP==''){
    	echo "Votre enregistrement doit comporter le numéro de saisie du photographe";
    	exit();}
     
    elseif($IDS==''){
    	echo "Votre enregistrement doit comporter le numéro de saisie du support";
    	exit();}
     
    elseif($IDT==''){
    	echo "Votre enregistrement doit comporter le numéro de saisie du type";
    	exit();}
     
    $dossier = 'photos/';
    $path_parts = pathinfo($_FILES['mon_image']['name']);
    print_r($path_parts);
    $taille_maxi = 1000000000;
    $extensions = array('png', 'gif', 'jpg', 'jpeg', 'JPG');
    print_r($extensions);
    echo $fichier = $path_parts['basename'];
    echo $extension = $path_parts['extension'];
    echo in_array($extension, $extensions);
     
    if(!in_array($extension, $extensions))
    {
    	echo "Vous devez charger un fichier de type png, gif, jpg, jpeg, JPG";
    	exit();
    }
    elseif($taille>$taille_maxi)
    {
    	echo "le fichier est trop gros...";
    	exit();
    }
     
    $fichier = strtr($fichier,
    'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ',
    'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');
    $fichier = preg_replace('/([^.a-z0-9]+)/i', '-', $fichier);
     
    if(file_exists ($dossier . $fichier)) 
    {
    	echo " le fichier existe déjà, donnez-lui un autre nom";
    	exit();
    }
    elseif(!isset($erreur))
    {
    	if(move_uploaded_file($_FILES['mon_image']['tmp_name'], $dossier . $fichier))
    	{
    	echo "chargement réussi !!!";
    	}
    }
    else
    {
    echo "raté apparement";
    	exit();
    }
     
    $query=mysql_query ("INSERT INTO photo (titre,sujet,legende,format,heure,date,IDP,IDS,IDT,titre_im) VALUES 
    ('" . $titre . "','" . $sujet . "','" . $legende . "','" . $format . "','" . $heure . "','" . $date . "','" . $IDP . "','" . $IDS . "','" . $IDT . "','" . $fichier . "')") 
    or die ("l'insertion n'a pas été réalisée");
     
    mysql_close($connexion);
     
    ?>
    j'ai tout remis en POST (c'est mieux et obligatoire...) et j'ai surtout viré un exit() après le chargement de la photo (ça n'allait pas du coup jusqu'à la requête SQL)

    Merci en tout cas à vous tous pour votre aide précieuse !!!

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

Discussions similaires

  1. [Image][Upload] Controler la taille de l'image
    Par cootchy dans le forum Multimédia
    Réponses: 1
    Dernier message: 09/05/2007, 11h22
  2. [Upload] droit lecture sur image uploadée
    Par Mitaka dans le forum Langage
    Réponses: 2
    Dernier message: 23/02/2006, 11h52
  3. [Upload] Renommer une image uploadée
    Par Empty_body dans le forum Langage
    Réponses: 4
    Dernier message: 05/01/2006, 06h51
  4. [Upload] probleme de récupération de fichier image
    Par BernardT dans le forum Langage
    Réponses: 2
    Dernier message: 15/11/2005, 01h12
  5. Réponses: 8
    Dernier message: 19/04/2005, 12h04

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