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 :

INSERT INTO et le formulaire type="file"


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2007
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 19
    Points : 12
    Points
    12
    Par défaut INSERT INTO et le formulaire type="file"
    Bonjour,

    J'aimerai intégrer un formulaire <input type="file" name="image">
    dans mon script pour parcourir une image sur mon pc et
    l'uploader dans un répertoire précis ensuite inscrire
    sont nom avec l'extension ("maphoto.gif")par exemple dans ma bdd.

    j'arrive très bien a insérer des données texte dans
    ma bdd grâce a ce script

    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
     
    <?php
    if (isset($_POST['titre']) AND isset($_POST['image']) AND isset($_POST['lien']))
    {
        if ($_POST['titre'] != NULL AND $_POST['image'] != NULL AND $_POST['lien'] != NULL)
        {
            mysql_connect("localhost", "root", "");
            mysql_select_db("projet");
     
            $titre = mysql_real_escape_string(htmlspecialchars($_POST['titre']));
            $image = mysql_real_escape_string(htmlspecialchars($_POST['image']));
    		$lien = mysql_real_escape_string(htmlspecialchars($_POST['lien']));
     
            mysql_query("INSERT INTO albums VALUES('', '$titre', '$image', '$lien', '".time()."')");
     
            mysql_close();
        }
    }
    ?>
    avec les formulaires type "text"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    <form action="form.php" method="post">
     
    <p>
    Titre : <input type="text" name="titre" /><br />
    Image :  <input type="text" name="image" /><br /> <!-- c'est celui la que j'aimerai transformer en type="file" au lieu de taper maphoto.gif dans le formulaire j'irai la parcourir depuis mon pc -->
    Lien :  <input type="text" name="lien" /><br />
     
    <input type="submit" value="Envoyer" />
    </p>
     
    </form>
    j'espère que je me suis fait comprendre et merci d'avance.

  2. #2
    Membre confirmé
    Avatar de mathieugut
    Profil pro
    Webmaster
    Inscrit en
    Mars 2008
    Messages
    225
    Détails du profil
    Informations personnelles :
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mars 2008
    Messages : 225
    Points : 476
    Points
    476
    Par défaut
    Salut,

    Alors pour l'upload d'images voici un article : http://antoine-herault.developpez.co...ls/php/upload/

    Ensuite pour enregistrer les noms des images dans ta base, il suffit de récuperer les variables contenant le nom de l'image et son extension et de les rentrer dans la base comme tu as déjà réussi à le faire avec du texte...

  3. #3
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Mars 2007
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2007
    Messages : 107
    Points : 118
    Points
    118
    Par défaut
    Pour le formulaire, il faut ajouter une balise dans le <form>.
    J'ai eu le souci, cet aprem. Va voirl e topic d'au dessus :
    http://www.developpez.net/forums/sho...d.php?t=569663

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2007
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 19
    Points : 12
    Points
    12
    Par défaut
    salut,
    merci beaucoup pour les réponses. voila j'ai réussi a faire ce que je voulais en récupérant le script upload donné par mathieugut c'est génial sauf que j'ai envie de comprendre un truc, est-il possible de renommer les images automatiquement lors d'upload pour évité d'écraser une image du même nom! par exemple renommer une image en se basant sur sont id. supposant que je viens d'insérer une nouvelle entrée sont id=5 est-ce quel ya moyen dans ce cas la de renommer automatiquement l'image en 5.jpg?

    j'espère que je me suis fait comprendre.


    en fait voici le code que j'ai bidouillé

    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
     
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
        <head>
            <title>Administration -ajouter un album-</title>
            <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
            <link rel="stylesheet" type="text/css" href="../css/style.css" media="screen" />
        </head>
        <body>
     
    <?php
    // Si les variables existent
    if (isset($_POST['titre']) AND isset($_POST['lien']) AND isset($_FILES['image']))
    {
        // Si on a quelque chose à enregistrer
        if ($_POST['titre'] != NULL AND $_POST['lien'] != NULL AND $_FILES['image'] != NULL)
        {  
    	    // D'abord, on se connecte à MySQL
            mysql_connect("localhost", "root", "");
            mysql_select_db("projet");
        // On utilise les fonctions PHP mysql_real_escape_string et htmlspecialchars pour la sécurité
            $titre = mysql_real_escape_string(htmlspecialchars($_POST['titre']));
    		$lien = mysql_real_escape_string(htmlspecialchars($_POST['lien']));
    		$image = ($_FILES['image']['name']);
            // Ensuite on enregistre le message
            mysql_query("INSERT INTO albums VALUES('', '$titre', '$lien', '$image', '".time()."')");
            // On se déconnecte de MySQL
            mysql_close();
        }
    }
    ?>
    <?php
    $dossier = '../images/';
    $fichier = basename($_FILES['image']['name']);
    $taille_maxi = 100000;
    $taille = filesize($_FILES['image']['tmp_name']);
    $extensions = array('.png', '.gif', '.jpg', '.jpeg');
    $extension = strrchr($_FILES['image']['name'], '.'); 
    //Début des vérifications de sécurité...
    if(!in_array($extension, $extensions)) //Si l'extension n'est pas dans le tableau
    {
         $erreur = 'Vous devez uploader un fichier de type png, gif, jpg, jpeg, txt ou doc...';
    }
    if($taille>$taille_maxi)
    {
         $erreur = 'Le fichier est trop gros...';
    }
    if(!isset($erreur)) //S'il n'y a pas d'erreur, on upload
    {
         //On formate le nom du fichier ici...
         $fichier = strtr($fichier, 
              'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ', 
              'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');
         $fichier = preg_replace('/([^.a-z0-9]+)/i', '-', $fichier);
         if(move_uploaded_file($_FILES['image']['tmp_name'], $dossier . $fichier)) //Si la fonction renvoie TRUE, c'est que ça a fonctionné...
         {
              echo 'Upload effectué avec succès !';
         }
         else //Sinon (la fonction renvoie FALSE).
         {
              echo 'Echec de l\'upload !';
         }
    }
    else
    {
         echo $erreur;
    }
    ?>
    <form id="formulaires" action="upload.php" method="post" enctype="multipart/form-data">
    <fieldset>
    <legend>Informations personnelles</legend>
    <p>
    <label for="form_titre"><strong>Titre : </strong></label>
    <input type="text" name="titre" />
    </p>
    <p>
    <label for="form_lien"><strong>Lien : </strong></label>
    <input type="text" name="lien" />
    </p>
    <p>
    <label for="form_image"><strong>Image : </strong></label>
    <input type="file" name="image" />
     </p>
     <p>
    <input id="envoyer" type="submit" value="Envoyer" />
    </fieldset>
    </p>
     
    </form>
      </body>
    </html>
    Merci.

  5. #5
    Membre confirmé
    Avatar de mathieugut
    Profil pro
    Webmaster
    Inscrit en
    Mars 2008
    Messages
    225
    Détails du profil
    Informations personnelles :
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mars 2008
    Messages : 225
    Points : 476
    Points
    476
    Par défaut
    Salut,

    Pour pas que des images aient le même nom, tu pourrais faire un simple compteur d'upload (avec un fichier texte simple), et donner à l'image le nom du numéro de l'upload, comme ça tu as jamais les mêmes...

    Si tu veux tout de même garder le nom d'origine de l'image, fais bien attention aux caractères spéciaux, et dans ce cas pour pas avoir deux images du même nom tu rajoute le nombre juste avant l'extension...

    Exemple :

    bateau1.gif
    voiture2.gif
    bateau3.gif
    ...

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2007
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 19
    Points : 12
    Points
    12
    Par défaut
    Salut mathieugut

    voila ce que j'ai fait j'ai ajouter la fonction date("his") histoire de ne pas écraser les images du même nom ce qui donne un truc genre 043020maphoto.jpg au lieu de maphoto.jpg. le problème c'est que ma BDD ne récupère pas 043020maphoto.jpg mais plutôt maphoto.jpg une fois que le formulaire est envoyé.

    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
    <?php
    // Si les variables existent
    if (isset($_POST['titre']) AND isset($_POST['lien']) AND isset($_FILES['image']))
    {
        // Si on a quelque chose à enregistrer
        if ($_POST['titre'] != NULL AND $_POST['lien'] != NULL AND $_FILES['image'] != NULL)
        {  
    	    // D'abord, on se connecte à MySQL
            mysql_connect("localhost", "root", "");
            mysql_select_db("projet");
        // On utilise les fonctions PHP mysql_real_escape_string et htmlspecialchars pour la sécurité
            $titre = mysql_real_escape_string(htmlspecialchars($_POST['titre']));
    		$lien = mysql_real_escape_string(htmlspecialchars($_POST['lien']));
    		$image = ($_FILES['image']['name']);
            // Ensuite on enregistre le message
            mysql_query("INSERT INTO albums VALUES('', '$titre', '$lien', '$image', '".time()."')");
            // On se déconnecte de MySQL
            mysql_close();
        }
    }
    ?>
    <?php
    $dossier = '../images/';
    $fichier = basename($_FILES['image']['name']);
    $taille_maxi = 100000;
    $taille = filesize($_FILES['image']['tmp_name']);
    $extensions = array('.png', '.gif', '.jpg', '.jpeg');
    $extension = strrchr($_FILES['image']['name'], '.'); 
    //Début des vérifications de sécurité...
    if(!in_array($extension, $extensions)) //Si l'extension n'est pas dans le tableau
    {
         $erreur = 'Vous devez uploader un fichier de type png, gif, jpg, jpeg, txt ou doc...';
    }
    if($taille>$taille_maxi)
    {
         $erreur = 'Le fichier est trop gros...';
    }
    if(!isset($erreur)) //S'il n'y a pas d'erreur, on upload
    {
         //On formate le nom du fichier ici...
         $fichier = strtr($fichier, 
              'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ', 
              'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');
         $fichier = preg_replace('/([^.a-z0-9]+)/i', '-', $fichier);
         if(move_uploaded_file($_FILES['image']['tmp_name'], $dossier . date("his") . $fichier)) //Si la fonction renvoie TRUE, c'est que ça a fonctionné...
         {
              echo 'Upload effectué avec succès !';
         }
         else //Sinon (la fonction renvoie FALSE).
         {
              echo 'Echec de l\'upload !';
         }
    }
    else
    {
         echo $erreur;
    }
    ?>

    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 id="formulaires" action="upload.php" method="post" enctype="multipart/form-data">
    <fieldset>
    <legend>Informations personnelles</legend>
    <p>
    <label for="form_titre"><strong>Titre : </strong></label>
    <input type="text" name="titre" />
    </p>
    <p>
    <label for="form_lien"><strong>Lien : </strong></label>
    <input type="text" name="lien" />
    </p>
    <p>
    <label for="form_image"><strong>Image : </strong></label>
    <input type="file" name="image" />
     </p>
     <p>
    <input id="envoyer" type="submit" value="Envoyer" />
    </fieldset>
    </p>
     
    </form>

  7. #7
    Membre confirmé
    Avatar de mathieugut
    Profil pro
    Webmaster
    Inscrit en
    Mars 2008
    Messages
    225
    Détails du profil
    Informations personnelles :
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mars 2008
    Messages : 225
    Points : 476
    Points
    476
    Par défaut
    Salut,

    Pour que ça apparaisse dans la BDD il faut aussi que tu utilise cette fonction sur cette ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $image = date("his").($_FILES['image']['name']);

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2007
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 19
    Points : 12
    Points
    12
    Par défaut
    Citation Envoyé par mathieugut Voir le message
    Salut,

    Pour que ça apparaisse dans la BDD il faut aussi que tu utilise cette fonction sur cette ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $image = date("his").($_FILES['image']['name']);
    merci mathieugut je comprend comment ca marche maintenant j'avais pas mis le point

  9. #9
    Membre confirmé
    Avatar de mathieugut
    Profil pro
    Webmaster
    Inscrit en
    Mars 2008
    Messages
    225
    Détails du profil
    Informations personnelles :
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mars 2008
    Messages : 225
    Points : 476
    Points
    476
    Par défaut
    Ceci dit il faudrait plutôt utiliser time() à la place de date("his") car avec date il y a toujours des risques qu'il y ai deux images avec le même nom...

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2007
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 19
    Points : 12
    Points
    12
    Par défaut
    Citation Envoyé par mathieugut Voir le message
    Ceci dit il faudrait plutôt utiliser time() à la place de date("his") car avec date il y a toujours des risques qu'il y ai deux images avec le même nom...
    ok merci beaucoup

Discussions similaires

  1. Réponses: 5
    Dernier message: 23/06/2006, 16h04

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