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

Fermé
Max23 - 6 juin 2013 à 16:29
 Max 23 - 8 juin 2013 à 21:30
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.


A voir également:

7 réponses

Utilisateur anonyme
6 juin 2013 à 16:37
Salut salut,

Tu as un message d'erreur pour nous orienter un peu plus vite?
0
non aucun message d'erreur
0
Utilisateur anonyme
7 juin 2013 à 10:53
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
Salut kyser soze,
Tu t'es trompé de post non?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
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
Pas grave lol
Par contre, moi je suis toujours bloqué
0
Utilisateur anonyme
7 juin 2013 à 13:48
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
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
Utilisateur anonyme
7 juin 2013 à 14:22
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
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
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
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