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   -
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

12 réponses

Utilisateur anonyme
 
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?
0
tortue60 Messages postés 250 Date d'inscription   Statut Membre Dernière intervention  
 
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");
0
Utilisateur anonyme
 
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.
0
tortue60 Messages postés 250 Date d'inscription   Statut Membre Dernière intervention  
 
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
0

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

Posez votre question
tortue60 Messages postés 250 Date d'inscription   Statut Membre Dernière intervention  
 
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
0
Utilisateur anonyme
 
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()
0
tortue60 Messages postés 250 Date d'inscription   Statut Membre Dernière intervention  
 
Dans ma requete insert, values c pas les noms des champs de la table que je doit mettreN
0
Utilisateur anonyme
 
La syntaxe c'est qqch genre insert into matable(col1,col2,col3) values(val1,va2,val3) mais ca tu peux le trouver facilement...
0
tortue60 Messages postés 250 Date d'inscription   Statut Membre Dernière intervention  
 
sa me dit que sa bien été enregistré alors que j'ai rien dans ma bdd
0
jeremy.s Messages postés 1226 Date d'inscription   Statut Membre Dernière intervention   79
 
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())));
0
tortue60 Messages postés 250 Date d'inscription   Statut Membre Dernière intervention  
 
je l'ai déjà juste avant le array
0
jeremy.s Messages postés 1226 Date d'inscription   Statut Membre Dernière intervention   79
 
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
0
tortue60 Messages postés 250 Date d'inscription   Statut Membre Dernière intervention  
 
j'ai mi sa:


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");
0
jeremy.s Messages postés 1226 Date d'inscription   Statut Membre Dernière intervention   79
 
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");
0
tortue60 Messages postés 250 Date d'inscription   Statut Membre Dernière intervention  
 
je comprend pas trop ce que tu vien de me donner
0
jeremy.s Messages postés 1226 Date d'inscription   Statut Membre Dernière intervention   79
 
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.
0
tortue60 Messages postés 250 Date d'inscription   Statut Membre Dernière intervention  
 
JE doit mettre quoi ou donc parce que là je suis un pe perdu
0