Ajouter des données dans une base de données avec un formulaire

Résolu/Fermé
hharchi9 Messages postés 567 Date d'inscription mercredi 18 décembre 2013 Statut Membre Dernière intervention 1 juillet 2015 - 15 sept. 2014 à 18:14
hharchi9 Messages postés 567 Date d'inscription mercredi 18 décembre 2013 Statut Membre Dernière intervention 1 juillet 2015 - 18 sept. 2014 à 19:48
Bonjour,

Je tente d'ajouter des données à ma base de données mais mon code, même s'il ne m'affiche aucune erreur n'ajoute rien sur la base...

Voici le code de traitement de la page :
<?php
//récupération des données du formulaire
$titre= $_POST['titre'];
$sortie= $_POST['sortie'];
$realisateur= $_POST['realisateur'];
$acteurs= $_POST['acteurs'];
$duree= $_POST['duree'];
$nationalite= $_POST['nationalite'];
$video= $_POST['video'];
$synopsis= $_POST['synopsis'];
$critique= $_POST['critique'];
$pouces= $_POST['pouces'];
$note= $_POST['note'];
$genre= $_POST['genre'];
$lien= $_POST['lien'];
$affiche= $_POST['affiche'];

echo "Connection à la base de données... Patientez ..."; ?><br/><br/><?php

//code pour ajouter le film à la base de données
try
{
// On se connecte à MySQL
$bdd = new PDO('mysql:host=localhost;dbname=le cinephile', 'root', '');
}
catch(Exception $e)
{
// En cas d'erreur, on affiche un message et on arrête tout
die('Erreur : '.$e->getMessage());
}

// Si tout va bien, on peut continuer :

$bdd->exec("INSERT INTO films VALUES('$titre', '$sortie', '$realisateur', '$acteurs', '$duree', '$nationalite', '$video', '$synopsis', '$critique', '$pouces', '$note', '$genre', '$lien', '$affiche'");

echo "Le film a été ajouté, redirection en cours"; ?>

Voilà, j'espère avoir été suffisamment clair.

Merci à tous de m'avoir lu et merci d'avance de vos réponses,

hharchi9.

1 réponse

CptRomaiin Messages postés 315 Date d'inscription mercredi 23 octobre 2013 Statut Membre Dernière intervention 28 avril 2016 58
Modifié par CptRomaiin le 16/09/2014 à 00:20
Salut,

Tu dois avoir un problème sur ta requête. Telle qu'elle est construite, tu ne doit pas avoir entiers ou des décimaux or je ne pense pas que ce soit le cas.. Si tu as des entiers ou des décimaux tu dois supprimer les quotes dans la requete pour ces variables.

Pour vérifier ta requete passe bien tu peux ajouter ça après :

if($bdd === FALSE)
{
    die('Erreur dans la requête');
} else {
  echo "Requête OK";
}

Par contre tu devrais sécuriser tes variables parce que la tu as de grosses failles de sécurité (injection sql)
0
Pitet Messages postés 2826 Date d'inscription lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022 524
16 sept. 2014 à 14:11
C'est sur le retour de la fonction exec qui faut tester si on a une erreur :
$result = $bdd->exec('requete sql');

if ($result === FALSE) {
    die('Erreur dans la requête');
}


Effectivement, l'idéal serait d'utiliser une requête préparée avec des paramètres pour éviter les injections sql.
0
hharchi9 Messages postés 567 Date d'inscription mercredi 18 décembre 2013 Statut Membre Dernière intervention 1 juillet 2015 24
16 sept. 2014 à 18:25
Bonjour merci de votre réponse.

J'ai tenter de suivre vos conseils concernant une requête préparée mais j'ai un souci avec la fonction exec() voici le code :


//récupération des données du formulaire
$titre= $_POST['titre'];
$sortie= $_POST['sortie'];
$realisateur= $_POST['realisateur'];
$acteurs= $_POST['acteurs'];
$duree= $_POST['duree'];
$nationalite= $_POST['nationalite'];
$video= $_POST['video'];
$synopsis= $_POST['synopsis'];
$critique= $_POST['critique'];
$pouces= $_POST['pouces'];
$note= $_POST['note'];
$genre= $_POST['genre'];
$lien= $_POST['lien'];
$affiche= $_POST['affiche'];

echo "Connection à la base de données... Patientez ..."; ?><br/><br/><?php

//code pour ajouter le film à la base de données
try
{
// On se connecte à MySQL
$bdd = new PDO('mysql:host=localhost;dbname=le cinephile', 'root', '');
}
catch(Exception $e)
{
// En cas d'erreur, on affiche un message et on arrête tout
die('Erreur : '.$e->getMessage());
}

// Si tout va bien, on peut continuer :
$req = $bdd->prepare('INSERT INTO films (Titre, Sortie, Realisateur, Acteurs, Duree, Nationalite, video, affiche, Synopsis, Critique, Pouces, Note, Genre lien) VALUES(:titre, :sortie, :realisateur, :acteurs, :duree, :nationalite, :video, :affiche, :synopsis, :critique, :pouces, :note, :genre, :lien)');
$req->execute(array(
':Titre' => $titre,
':Sortie' => $sortie,
':Realisateur' => $realisateur,
':Acteurs' => $acteurs,
':Duree' => $duree,
':Nationalite' => $nationalite,
':video' => $video,
':affiche' => $affiche,
':Synopsis' => $synopsis,
':Crtitique' => $critique,
':Pouces' => $pouces,
':Note' => $note,
':Genre' => $genre,
':lien' => $lien ));

echo "Le film a été ajouté, redirection en cours";
0
Pitet Messages postés 2826 Date d'inscription lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022 524
17 sept. 2014 à 10:33
Commence par activer les erreurs PDO en développement :
$bdd = new PDO('mysql:host=localhost;dbname=le cinephile', 'root', '');
$bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
0
hharchi9 Messages postés 567 Date d'inscription mercredi 18 décembre 2013 Statut Membre Dernière intervention 1 juillet 2015 24
17 sept. 2014 à 16:59
J'ai ajouté la ligne et voici le code erreur :

Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[HY093]: Invalid parameter number: parameter was not defined' in C:\wamp\www\cinephile\php\admin.php on line 51
PDOException: SQLSTATE[HY093]: Invalid parameter number: parameter was not defined in C:\wamp\www\cinephile\php\admin.php on line 51

voici ce que contient la ligne 51 : ':lien' => $lien ));
0
Pitet Messages postés 2826 Date d'inscription lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022 524
17 sept. 2014 à 17:03
Ca sautait au yeux mais je ne l'avais pas vu, tes marqueurs dans ta requête et dans ton tableau de paramètre sont différents :
Dans la requête -> :titre, :sortie, etc...
Dans le tableau -> :Titre, :Sortie
La casse est importante, le nom de tes marqueurs doivent être identiques.
0