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

Résolu
hharchi9 Messages postés 567 Date d'inscription   Statut Membre Dernière intervention   -  
hharchi9 Messages postés 567 Date d'inscription   Statut Membre Dernière intervention   -
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.
A voir également:

1 réponse

CptRomaiin Messages postés 315 Date d'inscription   Statut Membre Dernière intervention   58
 
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   Statut Membre Dernière intervention   527
 
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   Statut Membre Dernière intervention   24
 
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   Statut Membre Dernière intervention   527
 
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   Statut Membre Dernière intervention   24
 
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   Statut Membre Dernière intervention   527
 
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