Requete insert PDO
Résolu
tortue60
Messages postés
250
Date d'inscription
Statut
Membre
Dernière intervention
-
jeremy.s Messages postés 1226 Date d'inscription Statut Membre Dernière intervention -
jeremy.s Messages postés 1226 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Je suis entrain de réalsier un site et j'utilise l'extension PDO pour enregistrer des données provenant d'un formulaire dans une base de donnée sql Server.
Mon problème c'est que je ne sais pas trop quoi mettre dans le if de l'appel de la fonction pour l'éxécution de la requete.
voici le code:
<?php
// ajout du script de la connexion à la bdd
include("includes/accesBDD.php");
extract($_POST); // récupère les données transmisent par le formulaire et créer les variables du tableau $_POST
if (isset($_POST['newslet'])==false) // La fonction isset permet de savoir si l'élément passé en paramètre existe ou non
$newslet = "N";
else
$newslet = "O";
if (isset ($_POST['rdv'])==false)
$rdv = "N";
else
$rdv = "O";
if (isset ($_POST['appel'])==false)
$appel = "N";
else
$appel = "O";
$sql = "insert into demandeinfo values(0,:nom, :email, :telephone, :rencontre, :origine, :newsleter, :appel, :rdv, :remarque)";
$requete = $db->prepare($sql);
$requete->execute(array(0,':nom'=>$nom,':email'=>$email,':telephone'=>$teleph,':rencontre'=>$rencontre,':origine'=>$origine,':newsleter'=>$newslet,':appel'=>$appel,':rdv'=>$rdv,':remarque'=>$remarque));
if ($db-> prepare($requete)==true) // appel de la fonction qui permet d'exécuter la requête contenue dans la variable $requete
echo ("Votre demande d'information a été enregistrée");
else
echo ("Un problème est survenu lors de l'enregistrement de votre demande d'information");
if ($db=null) // apel de la fonction qui ferme la conexion
echo ("Un problème est survenu lors de la fermeture de la connexion à la BD") ;
?>
Merci de votre aide
Je suis entrain de réalsier un site et j'utilise l'extension PDO pour enregistrer des données provenant d'un formulaire dans une base de donnée sql Server.
Mon problème c'est que je ne sais pas trop quoi mettre dans le if de l'appel de la fonction pour l'éxécution de la requete.
voici le code:
<?php
// ajout du script de la connexion à la bdd
include("includes/accesBDD.php");
extract($_POST); // récupère les données transmisent par le formulaire et créer les variables du tableau $_POST
if (isset($_POST['newslet'])==false) // La fonction isset permet de savoir si l'élément passé en paramètre existe ou non
$newslet = "N";
else
$newslet = "O";
if (isset ($_POST['rdv'])==false)
$rdv = "N";
else
$rdv = "O";
if (isset ($_POST['appel'])==false)
$appel = "N";
else
$appel = "O";
$sql = "insert into demandeinfo values(0,:nom, :email, :telephone, :rencontre, :origine, :newsleter, :appel, :rdv, :remarque)";
$requete = $db->prepare($sql);
$requete->execute(array(0,':nom'=>$nom,':email'=>$email,':telephone'=>$teleph,':rencontre'=>$rencontre,':origine'=>$origine,':newsleter'=>$newslet,':appel'=>$appel,':rdv'=>$rdv,':remarque'=>$remarque));
if ($db-> prepare($requete)==true) // appel de la fonction qui permet d'exécuter la requête contenue dans la variable $requete
echo ("Votre demande d'information a été enregistrée");
else
echo ("Un problème est survenu lors de l'enregistrement de votre demande d'information");
if ($db=null) // apel de la fonction qui ferme la conexion
echo ("Un problème est survenu lors de la fermeture de la connexion à la BD") ;
?>
Merci de votre aide
12 réponses
Salut salut,
Je ne comprends pas vraiment de quel if tu parles!
Parce que si l'insertion en base se fait après avoir rempli un formulaire, quelle condition voudrais tu rajouter pour enregistrer ou non?
Je ne comprends pas vraiment de quel if tu parles!
Parce que si l'insertion en base se fait après avoir rempli un formulaire, quelle condition voudrais tu rajouter pour enregistrer ou non?
Celui-ci:
if ($db-> prepare($requete)==true) // appel de la fonction qui permet d'exécuter la requête contenue dans la variable $requete
echo ("Votre demande d'information a été enregistrée");
else
echo ("Un problème est survenu lors de l'enregistrement de votre demande d'information");
if ($db-> prepare($requete)==true) // appel de la fonction qui permet d'exécuter la requête contenue dans la variable $requete
echo ("Votre demande d'information a été enregistrée");
else
echo ("Un problème est survenu lors de l'enregistrement de votre demande d'information");
Ah ok en fait ton message "Votre demande d'information a été enregistrée" ne s'affiche jamais? Si c'est ça tu peux faire le test dans l'autre sens , parce que la méthode prepare() retourne un objet PDOStatement si la requête passe et false dans l'autre cas. Donc if($db->prepare(...)==false){...}else{...}
Après si je peux me permettre, je trouverai mieux de faire l'ensemble des tests sur les valeurs à insérer avant l'exécution de manière à ne pas soumettre la requête s'il manque un champ ou s'il est erroné. De cette manière tu peux renvoyer sur le formulaire s'il a mal été rempli, et tu n'as pas besoin de faire un test sur le retour de l'insertion, car si tes tests sont bien fait le code n'ira pas jusqu'à la mise en base de donnée.
Après si je peux me permettre, je trouverai mieux de faire l'ensemble des tests sur les valeurs à insérer avant l'exécution de manière à ne pas soumettre la requête s'il manque un champ ou s'il est erroné. De cette manière tu peux renvoyer sur le formulaire s'il a mal été rempli, et tu n'as pas besoin de faire un test sur le retour de l'insertion, car si tes tests sont bien fait le code n'ira pas jusqu'à la mise en base de donnée.
J'ai fait sa:
if ($db->prepare($requete)==false) // appel de la fonction qui permet d'exécuter la requête contenue dans la variable $requete
echo ("Un problème est survenu lors de l'enregistrement de votre demande d'information");
else
echo ("Votre demande d'information a été enregistrée");
sa me dit sa comme erreur:
( ! ) Warning: PDO::prepare() expects parameter 1 to be string
if ($db->prepare($requete)==false) // appel de la fonction qui permet d'exécuter la requête contenue dans la variable $requete
echo ("Un problème est survenu lors de l'enregistrement de votre demande d'information");
else
echo ("Votre demande d'information a été enregistrée");
sa me dit sa comme erreur:
( ! ) Warning: PDO::prepare() expects parameter 1 to be string
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
JE vien de faire sa et sa me met le bon message sauf que j'ai rien dans ma table dans sqlServer:
if ($db->prepare($sql)==false) // appel de la fonction qui permet d'exécuter la requête contenue dans la variable $requete
echo ("Un problème est survenu lors de l'enregistrement de votre demande d'information");
else
echo ("Votre demande d'information a été enregistrée");
J'ai juste créer ma source ODBC dans outil d'administration de mon pc et j'ai rien fait aussi dans sql Server. Faut peut-etre que je face quelque chose
if ($db->prepare($sql)==false) // appel de la fonction qui permet d'exécuter la requête contenue dans la variable $requete
echo ("Un problème est survenu lors de l'enregistrement de votre demande d'information");
else
echo ("Votre demande d'information a été enregistrée");
J'ai juste créer ma source ODBC dans outil d'administration de mon pc et j'ai rien fait aussi dans sql Server. Faut peut-etre que je face quelque chose
Si la connexion réussie et que prepare renvoit bien un objet PDOSTatement, c'est un peu bizarre. Tu utilises deux fois la méthode prepare() je ne sais pas si ça pose problème mais c'est pas terrible, limite garde le retour dans une variable à la première utilisation et test cette variable. Fais un echo de la requête avant l'execution, vérifie le retour de la méthode execute()
La syntaxe c'est qqch genre insert into matable(col1,col2,col3) values(val1,va2,val3) mais ca tu peux le trouver facilement...
Il faut executé ta commande ! Si tu mets un prepare, il faut faire un execute ...
Donc :
$db->prepare($sql);
$db->execute() or die(print($db->perror())));
Donc :
$db->prepare($sql);
$db->execute() or die(print($db->perror())));
Ah oui pardon, je n'avais pas vu ! Mais quand même le or die au cas ou ya une erreur il te l'affiche ;-)
Sinon :
$requete = $db->prepare($sql);
...
if ($db-> prepare($requete)==true)
Ya pas comme un problème avec tes nom de variable ? Entre autre ce que tu mets dans le prepare
Sinon :
$requete = $db->prepare($sql);
...
if ($db-> prepare($requete)==true)
Ya pas comme un problème avec tes nom de variable ? Entre autre ce que tu mets dans le prepare
C'est déjà mieux !
Sinon, la tu fais deux fois un prepare, c'est pas spécialement necessaire.
if ($db->prepare($sql)==false)
echo ("Un problème est survenu lors de l'enregistrement de votre demande d'information");
else
$db->execute() or die(print($db->perror()));
echo ("Votre demande d'information a été enregistrée");
Sinon, la tu fais deux fois un prepare, c'est pas spécialement necessaire.
if ($db->prepare($sql)==false)
echo ("Un problème est survenu lors de l'enregistrement de votre demande d'information");
else
$db->execute() or die(print($db->perror()));
echo ("Votre demande d'information a été enregistrée");
Bah dans ton code, tu fais un prepare, tu fais un execute.
Ensuite tu fais un if avec un autre prepare. Donc au finale tu fais deux prepare.
Et quand vient même il y aurait une erreur, t'as executé ta requete avant le if donc si il y avait bien une erreur, le execute a quand même été fait avant de vérifier le retour de ton deuxieme prepare.
Ensuite tu fais un if avec un autre prepare. Donc au finale tu fais deux prepare.
Et quand vient même il y aurait une erreur, t'as executé ta requete avant le if donc si il y avait bien une erreur, le execute a quand même été fait avant de vérifier le retour de ton deuxieme prepare.