Requete insert PDO

Résolu/Fermé
tortue60 Messages postés 250 Date d'inscription jeudi 21 mars 2013 Statut Membre Dernière intervention 1 septembre 2013 - 21 avril 2013 à 23:20
jeremy.s Messages postés 1226 Date d'inscription lundi 28 mars 2011 Statut Membre Dernière intervention 2 septembre 2013 - 22 avril 2013 à 17:05
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
22 avril 2013 à 10:28
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 jeudi 21 mars 2013 Statut Membre Dernière intervention 1 septembre 2013
22 avril 2013 à 10:50
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
22 avril 2013 à 11:37
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 jeudi 21 mars 2013 Statut Membre Dernière intervention 1 septembre 2013
22 avril 2013 à 11:44
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 jeudi 21 mars 2013 Statut Membre Dernière intervention 1 septembre 2013
22 avril 2013 à 11:49
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
22 avril 2013 à 11:58
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 jeudi 21 mars 2013 Statut Membre Dernière intervention 1 septembre 2013
22 avril 2013 à 12:05
Dans ma requete insert, values c pas les noms des champs de la table que je doit mettreN
0
Utilisateur anonyme
22 avril 2013 à 13:59
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 jeudi 21 mars 2013 Statut Membre Dernière intervention 1 septembre 2013
22 avril 2013 à 15:02
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 lundi 28 mars 2011 Statut Membre Dernière intervention 2 septembre 2013 79
22 avril 2013 à 15:20
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 jeudi 21 mars 2013 Statut Membre Dernière intervention 1 septembre 2013
22 avril 2013 à 15:32
je l'ai déjà juste avant le array
0
jeremy.s Messages postés 1226 Date d'inscription lundi 28 mars 2011 Statut Membre Dernière intervention 2 septembre 2013 79
22 avril 2013 à 15:45
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 jeudi 21 mars 2013 Statut Membre Dernière intervention 1 septembre 2013
22 avril 2013 à 15:46
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 lundi 28 mars 2011 Statut Membre Dernière intervention 2 septembre 2013 79
22 avril 2013 à 15:49
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 jeudi 21 mars 2013 Statut Membre Dernière intervention 1 septembre 2013
22 avril 2013 à 15:52
je comprend pas trop ce que tu vien de me donner
0
jeremy.s Messages postés 1226 Date d'inscription lundi 28 mars 2011 Statut Membre Dernière intervention 2 septembre 2013 79
22 avril 2013 à 15:57
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 jeudi 21 mars 2013 Statut Membre Dernière intervention 1 septembre 2013
22 avril 2013 à 15:59
JE doit mettre quoi ou donc parce que là je suis un pe perdu
0