Enregistrer les caractéristiques d'une image dans une bdd

Max23 -  
 Max 23 -
Bonjour,
J'ai creer un petit formulaire qui permet d'uploader des images et j'aimerais enregistrer dans ma bdd les information consernant l'image (nom, taille, sujet, emplacement de l'upload...)
Mon code fonctionne correctement, l'image s'upload bien, mais rien ne s'inscrit dans ma table "images".

Voici mon code:

<html>
<head>
<title>formulaire billet</title> 
<link href="formulaire billet.css" rel="stylesheet" type="text/css"/>
</head>


<body>
<p><h1 id="titre">Ajouter un sujet</h1></p>

<form action="" method="post" enctype="multipart/form-data">
 <fieldset> 
  <table id="tform">
   <tr>
       <td><label>Sujet:</label></td>
       <td><input id="sujet" type="text" name="sujet"/></td>
   </tr>
   <tr>
       <td><label>Message:</label></td>
       <td><textarea id="message" name="message"></textarea></td>
   </tr>
   <tr>
       <td><label>Votre image:</label></td>
       <td><input type="file" name="image" value="parcourir"/></td>
   </tr>    
  </table> 
 </fieldset>

<input type="submit" value="Envoyer" name="valider"/>
</form>

<br/><br/><br/><br/>

<a href="monblog.php">Retourner à la page d'acceuil</a>

</body>
<?php
try
{
$bdd = new PDO('mysql:host=localhost;dbname=test', 'root', '');
}

catch (Exception $e)
{
die ('erreur: ' .$e->getMessage());   
} 

$req = $bdd->prepare('INSERT INTO billet(titre, contenu, date_creation) VALUES(:titre, :contenu, NOW())');
$req->execute(array(
'titre' => $_POST['sujet'],
'contenu' => $_POST['message']
));      

$req->closeCursor();
//----------------------------Enregistrement de l'image------------------------------
$req = $bdd->prepare('INSERT INTO images(nom, sujet, taille, type, emplacement, date) VALUES(:nom, :sujet, :description, :taille, :type, :emplacement, NOW())');         
 $req->execute(array(
                                 'nom' => $_FILES['image']['name'],
                                 'sujet' => $_POST['sujet'],
                                 'taille' => $_FILES['image']['size'],
                                 'type' => $_FILES['image']['extension'],
                                 'emplacement' => 'images/'
                               ));
 $req->closeCursor();      
//---------------------------------------------------------------------------------------
if (isset($_FILES['image']) AND $_FILES['image']['error'] == 0)
{
        if ($_FILES['image']['size'] <= 10485760)
        {
                $infosfichier = pathinfo($_FILES['image']['name']);
                $extension_upload = $infosfichier['extension'];
                $extensions_autorisees = array('jpg', 'jpeg', 'gif', 'png');
                if (in_array($extension_upload, $extensions_autorisees))
                {
                        move_uploaded_file($_FILES['image']['tmp_name'], 'images/' . basename($_FILES['image']['name']));
                        echo "L'envoi a bien été effectué !";                                        
                }
        }
}
?>
</html> 


Voila, merci de m'apporter un peu de votre lumière.
Cho cho.

7 réponses

  1. Utilisateur anonyme
     
    Salut salut,

    Tu as un message d'erreur pour nous orienter un peu plus vite?
    0
  2. Utilisateur anonyme
     
    Re,

    Il manque des petits / , et je ne comprends pas tout à fait le debut de l'expression : ^0[^0] -> qu'est ce que tu cherches à faire ici?

    Essai comme ça, ça vérife les num : 0x xx xx xx xx
    if (preg_match('/^0[1-9]{1}[0-9]{8}$/', $_POST['tel']))
    0
  3. Max23
     
    Salut kyser soze,
    Tu t'es trompé de post non?
    0
  4. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  5. Utilisateur anonyme
     
    Ah mais carrément , lool. Ca m'étais pas arrivée ça encore.
    Je suis vraiment pas réveillée, un café s'impose.

    Résolu? ===> [RESOLU]
    0
    1. Max23
       
      Pas grave lol
      Par contre, moi je suis toujours bloqué
      0
  6. Utilisateur anonyme
     
    Dans ta requête il y a 6 colonnes précisées pour 7 values :
    $req = $bdd->prepare('INSERT INTO images(nom, sujet, taille, type, emplacement, date) VALUES(:nom, :sujet, :description, :taille, :type, :emplacement, NOW())');
    0
    1. Max23
       
      oui en fait j'ai déja corrigé cette erreur, j'ai supprimé :description
      mais ça ne fonctionne toujours pas. J'ai fait un print_r de $_FILES['image'], voici ce que ça donne:

      Array
      (
      [name] => Photo0295.jpg
      [type] => image/jpeg
      [tmp_name] => /Applications/MAMP/tmp/php/phpvp2amZ
      [error] => 0
      [size] => 2464989
      )

      tout à l'air normal, je comprend pas pourquoi ça marche pas
      0
  7. Utilisateur anonyme
     
    Pour vérifier déjà que la requête passe, fais un echo de la requête avant de la soumettre pour vérifier déjà que les champs soient bien là, et copie colle la directement dans phpmyadmin pour voir le retour.
    0
    1. Max23
       
      Pardon, mais je ne comprend pas bien.
      a quel endroit du code faut il que je fasse un echo?
      Ensuite qu'est ce que je dois copier coller et à quel endroit de phpmyadmin?
      0
    2. Marie
       
      Bien je viens de tester mon code sur pc avec WAMP.

      Tout ce passe comme sous mac et mamp sauf que cette fois ci j'ai ce message qui apparait dans mon navigateur:
      ( ! ) Notice: Undefined index: extension in C:\wamp\www\blog\formulaire billet.php on line 56
      Call Stack
      # Time Memory Function Location
      1 0.0010 381512 {main}( ) ..\formulaire billet.php:0


      Je ne sais pas ce que ça veut dire, pour rappel voici le code en question:

      //----------------------------Enregistrement de l'image------------------------------
      $req = $bdd->prepare('INSERT INTO images(nom, sujet, taille, type, emplacement, date) VALUES(:nom, :sujet, :description, :taille, :type, :emplacement, NOW())');         
       $req->execute(array(
                                       'nom' => $_FILES['image']['name'],
                                       'sujet' => $_POST['sujet'],
                                       'taille' => $_FILES['image']['size'],
      ligne 56                         'type' => $_FILES['image']['extension'],
                                       'emplacement' => 'images/'
                                     ));
       $req->closeCursor();      
      //---------------------------------------------------------------------------------------


      Encore une fois, merci de votre aide
      0
    3. Max 23
       
      Ok, l'ai compris, en fait il me dit que le paramètre $_FILES['image']['extension'] n'existe pas

      pourtant, quand je fait un print_r il apparait bien.

      J'ai essayé de supprimer la ligne ainsi que les champs qui lui son associer; et ça fonctionne parfaitement, les données sont bien enregistrées dans la table.

      Ce que j'aimerais savoir, c'est pourquoi il me dit que $_FILES['image']['extension'] n'existe pas?
      0