Upload d'images et info dans BDD

Résolu/Fermé
tlehir-k Messages postés 135 Date d'inscription mercredi 30 septembre 2009 Statut Membre Dernière intervention 29 janvier 2016 - 11 sept. 2013 à 17:16
tlehir-k Messages postés 135 Date d'inscription mercredi 30 septembre 2009 Statut Membre Dernière intervention 29 janvier 2016 - 11 sept. 2013 à 18:28
Salut tout le monde!

Je voudrais faire un formulaire sur mon site avec les champs TITRE, DATE (année), COMMENTAIRE DE LA PHOTO et un upload d'image

Dans ma bdd j'ai les champs titre date texte ainsi que le champ photo avec le nom de la photo dedans.

J'ai trouvé un script sur internet qui marche très bien (ma photo se retrouve bien dans le dossier voulu) par contre j'ai rajouté à la fin un petit code pour récuperer les données de $_POST TITRE DATE ET COMMENTAIRE et quand j'upload la photo je n'ai pas d'erreur mais ma BDD reste vide.

Voici le code du formulaire


<h3>4) Envoyer une photo</h3>

<div class="reformed-form">
<form enctype="multipart/form-data" action="bdd.php" method="post">
<dl>
<dt>
<label for="titrep">Titre photo</label>
</dt>
<dd><input type="text" id="titrep" name="titrep" /></dd>
</dl>


<dl>
<dt>
<label for="annee">Année de la photo(dans quelle galerie apparaitra-t-elle)</label>
</dt>
<dd><input type="text" id="annee" name="annee" value="<?php echo date("Y");?>" /></dd>
</dl>


<dl>
<dt>
<label for="desc">Description de la photo</label>
</dt>
<dd><textarea id="desc" name="desc" rows="5" cols="50">
</textarea></dd>
</dl>
<input type="hidden" name="MAX_FILE_SIZE" value="<?php echo MAX_SIZE; ?>" />
<dl>
<dt>
<label for="photo">photo</label>
</dt>
<dd><input type="file" id="photo" name="photo" /></dd>

</dl>
<div id="submit_buttons">
<button type="submit">Envoyer</button>
</div>
</form>
</div>

Le code pour l'envoi


<?php
try
{
$bdd = new PDO('mysql:host=127.0.0.1;dbname=site', 'root', '');
echo 'connected';
}
catch (Exception $e)
{
die('Erreur : ' . $e->getMessage());
}
/************************************************************
* Script realise par Emacs
* Crée le 19/12/2004
* Maj : 23/06/2008
* Licence GNU / GPL
* webmaster@apprendre-php.com<script type="text/javascript">
/* <![CDATA[ */
(function(){try{var s,a,i,j,r,c,l,b=document.getElementsByTagName("script");l=b[b.length-1].previousSibling;a=l.getAttribute('data-cfemail');if(a){s='';r=parseInt(a.substr(0,2),16);for(j=2;a.length-j;j+=2){c=parseInt(a.substr(j,2),16)^r;s+=String.fromCharCode(c);}s=document.createTextNode(s);l.parentNode.replaceChild(s,l);}}catch(e){}})();
/* ]]> */
</script>
* https://apprendre-php.com/
* http://www.hugohamon.com
*
* Changelog:
*
* 2008-06-24 : suppression d'une boucle foreach() inutile
* qui posait problème. Merci à Clément Robert pour ce bug.
*
*************************************************************/

/************************************************************
* Definition des constantes / tableaux et variables
*************************************************************/

// Constantes
define('TARGET', '../../../gallerie/photos/'); // Repertoire cible
define('MAX_SIZE', 100000); // Taille max en octets du fichier
define('WIDTH_MAX', 800); // Largeur max de l'image en pixels
define('HEIGHT_MAX', 800); // Hauteur max de l'image en pixels

// Tableaux de donnees
$tabExt = array('jpg','gif','png','jpeg'); // Extensions autorisees
$infosImg = array();

// Variables
$extension = '';
$message = '';
$nomImage = '';

echo 'step 1 done';
/************************************************************
* Script d'upload
*************************************************************/
if(!empty($_POST))
{
echo 'step 2 done';
// On verifie si le champ est rempli
if( isset($_FILES['photo']['name']) )
{
echo 'step 3 done';
// Recuperation de l'extension du fichier
$extension = pathinfo($_FILES['photo']['name'], PATHINFO_EXTENSION);

// On verifie l'extension du fichier
if(in_array(strtolower($extension),$tabExt))
{
echo 'step 4 done';
// On recupere les dimensions du fichier
$infosImg = getimagesize($_FILES['photo']['tmp_name']);

// On verifie le type de l'image
if($infosImg[2] >= 1 && $infosImg[2] <= 14)
{
echo 'step 5 done';
// On verifie les dimensions et taille de l'image
if(($infosImg[0] <= WIDTH_MAX) && ($infosImg[1] <= HEIGHT_MAX) && (filesize($_FILES['photo']['tmp_name']) <= MAX_SIZE))
{
// Parcours du tableau d'erreurs
if(isset($_FILES['photo']['error'])
&& UPLOAD_ERR_OK === $_FILES['photo']['error'])
{
echo 'step 6 done';
// On renomme le fichier
$nomImage = md5(uniqid()) .'.'. $extension;

// Si c'est OK, on teste l'upload
if(move_uploaded_file($_FILES['photo']['tmp_name'], TARGET.$nomImage))
{
echo 'step 7 done';
$message = 'Upload réussi !';


$req=$bdd->prepare('INSERT INTO gallerie(titre, année, texte, photo) VALUES(:titre, :annee, :texte, :nomImage)');
$req->execute(array(
'titre' => strip_tags($_POST['titrep']),
'texte' => strip_tags($_POST['desc']),
'annee' => strip_tags($_POST['annee']),
'nomImage' => '$nomImage.$extension'
));
echo 'step 8 done!';

}
else
{
// Sinon on affiche une erreur systeme
$message = 'Problème lors de l\'upload !';
}
}
else
{
$message = 'Une erreur interne a empêché l\'uplaod de l\'image';
}
}
else
{
// Sinon erreur sur les dimensions et taille de l'image
$message = 'Erreur dans les dimensions de l\'image !';
}
}
else
{
// Sinon erreur sur le type de l'image
$message = 'Le fichier à uploader n\'est pas une image !';
}
}
else
{
// Sinon on affiche une erreur pour l'extension
$message = 'L\'extension du fichier est incorrecte !';
}
}
else
{
// Sinon on affiche une erreur pour le champ vide
$message = 'Veuillez remplir le formulaire svp !';
}
}
?>

quand j'affiche le contenue de $_POST['date'] avec un echo il est écris

de plus je voudrais que :nomImage soit égal à nomImage.extension et je ne sait pas quelle est la syntaxe correcte.


Voila bon courrage :)
A voir également:

2 réponses

Thorak83 Messages postés 1051 Date d'inscription jeudi 20 juin 2013 Statut Membre Dernière intervention 22 décembre 2017 156
Modifié par Thorak83 le 11/09/2013 à 17:31
Bonjour,

Il n'y aurait pas une inversion dans cette partie du code entre texte et annee car vous avez comme paramètres VALUES(:titre, :annee, :texte, :nomImage)'); et ensuite vous envoyez dans le tableau

'titre' => strip_tags($_POST['titrep']),
'texte' => strip_tags($_POST['desc']),
'annee' => strip_tags($_POST['annee']),
'nomImage' => '$nomImage.$extension'

Cordialement
0
tlehir-k Messages postés 135 Date d'inscription mercredi 30 septembre 2009 Statut Membre Dernière intervention 29 janvier 2016 2
11 sept. 2013 à 17:43
nop ça change rien, php comprend quand même
0
Thorak83 Messages postés 1051 Date d'inscription jeudi 20 juin 2013 Statut Membre Dernière intervention 22 décembre 2017 156
11 sept. 2013 à 17:47
l'Iinsertion fonctionnait avant de rajouter texte, titre et annee ?
0
Thorak83 Messages postés 1051 Date d'inscription jeudi 20 juin 2013 Statut Membre Dernière intervention 22 décembre 2017 156
Modifié par Thorak83 le 11/09/2013 à 17:49
quel sont les echos qui sont affichés ?
step 1 done
step 2 done ...
0
tlehir-k Messages postés 135 Date d'inscription mercredi 30 septembre 2009 Statut Membre Dernière intervention 29 janvier 2016 2
11 sept. 2013 à 18:28
Ah c'est bon j'ai résolu le pb en reécrivant tout :)


$req=$bdd->prepare('INSERT INTO gallerie(photo, annee, texte, titre) VALUES(:nomImage, :annee, :texte, :titre)');
$req->execute(array(
'titre' => strip_tags($_POST['titrep']),
'texte' => strip_tags($_POST['desc']),
'annee' => strip_tags($_POST['annee']),
'nomImage' => $nomImage
));

Merci :D
0