Requete insert PDO [Résolu/Fermé]

Signaler
Messages postés
250
Date d'inscription
jeudi 21 mars 2013
Statut
Membre
Dernière intervention
1 septembre 2013
-
Messages postés
1226
Date d'inscription
lundi 28 mars 2011
Statut
Membre
Dernière intervention
2 septembre 2013
-
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

Messages postés
816
Date d'inscription
mercredi 20 février 2013
Statut
Membre
Dernière intervention
24 novembre 2018
92
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?
Messages postés
250
Date d'inscription
jeudi 21 mars 2013
Statut
Membre
Dernière intervention
1 septembre 2013

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");
Messages postés
816
Date d'inscription
mercredi 20 février 2013
Statut
Membre
Dernière intervention
24 novembre 2018
92
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.
Messages postés
250
Date d'inscription
jeudi 21 mars 2013
Statut
Membre
Dernière intervention
1 septembre 2013

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
Messages postés
250
Date d'inscription
jeudi 21 mars 2013
Statut
Membre
Dernière intervention
1 septembre 2013

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
Messages postés
816
Date d'inscription
mercredi 20 février 2013
Statut
Membre
Dernière intervention
24 novembre 2018
92
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()
Messages postés
250
Date d'inscription
jeudi 21 mars 2013
Statut
Membre
Dernière intervention
1 septembre 2013

Dans ma requete insert, values c pas les noms des champs de la table que je doit mettreN
Messages postés
816
Date d'inscription
mercredi 20 février 2013
Statut
Membre
Dernière intervention
24 novembre 2018
92
La syntaxe c'est qqch genre insert into matable(col1,col2,col3) values(val1,va2,val3) mais ca tu peux le trouver facilement...
Messages postés
250
Date d'inscription
jeudi 21 mars 2013
Statut
Membre
Dernière intervention
1 septembre 2013

sa me dit que sa bien été enregistré alors que j'ai rien dans ma bdd
Messages postés
1226
Date d'inscription
lundi 28 mars 2011
Statut
Membre
Dernière intervention
2 septembre 2013
75
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())));
Messages postés
250
Date d'inscription
jeudi 21 mars 2013
Statut
Membre
Dernière intervention
1 septembre 2013

je l'ai déjà juste avant le array
Messages postés
1226
Date d'inscription
lundi 28 mars 2011
Statut
Membre
Dernière intervention
2 septembre 2013
75
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
Messages postés
1226
Date d'inscription
lundi 28 mars 2011
Statut
Membre
Dernière intervention
2 septembre 2013
75
Si t'as une table :
personne(id, nom, prenom, sexe, age)

Si tu fais un :
INSERT INTO personne VALUES(1, "jean", "dupond", "M", 20);
Ca marche ! Si par contre tu ne précise pas l'age => erreur.
Dans ce cas, il faut :
INSERT INTO personne(id, nom, prenom, sexe) VALUES(1, "jean", "dupond", "M");
La ca marche
Messages postés
250
Date d'inscription
jeudi 21 mars 2013
Statut
Membre
Dernière intervention
1 septembre 2013

la je récupère dans un formulaire aussi
Messages postés
250
Date d'inscription
jeudi 21 mars 2013
Statut
Membre
Dernière intervention
1 septembre 2013

c bon sa fonctionne:

<?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 (nom, email, telephone, rencontre, origineDecouverte, newslet, appel, rdv, remarque) values(:nom, :email, :telephone, :rencontre, :origine, :newslet, :appel, :rdv, :remarque)";
$requete = $db->prepare($sql);
$requete->execute(array(':nom'=>$nom,':email'=>$email,':telephone'=>$teleph,':rencontre'=>$rencontre,':origine'=>$origine,':newslet'=>$newslet,':appel'=>$appel,':rdv'=>$rdv,':remarque'=>$remarque));

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");

if ($db=null) // apel de la fonction qui ferme la conexxion
echo ("Un problème est survenu lors de la fermeture de la connexion à la BD") ;

?>

Merci de ton aide
Messages postés
1226
Date d'inscription
lundi 28 mars 2011
Statut
Membre
Dernière intervention
2 septembre 2013
75
Ce que je veux dire c'est :
Si tu remplis TOUS les champs de ta table, tu peux faire ton insert into table values(...)
/!\ Attention à l'ordre d'insertion des valeurs, il faut le faire dans l'ordre des champs de la table.
Si tu ne remplis PAS TOUS les champs de ta table, il faut préciser ceux que tu remplis dans ta requete : insert into table(champ1, champ2) values(valeur1, valeur2)


Pour le faite que tu les récupère d'un formulaire, ce n'est pas un problème et tu le fais bien.

Ah : Enlève le 0 dans ton array() à mettre dans le execute.
Messages postés
1226
Date d'inscription
lundi 28 mars 2011
Statut
Membre
Dernière intervention
2 septembre 2013
75
Ah bah voilà ! Parfait :)