Problème mysql pdo/php - Les valeurs ne s'enregistrent pas dans la BDD

Par Elodie Dasilva, il y a 9 ans


Base de données MySQL

Bonjour,

J'ai un petit soucis avec la fonction PDO, je passait en mysql_query avant, et donc c'est un peu différent.

Voilà j'ai pratiquement tout fait correctement, mais les valeurs ne s'enregistrent pas dans la base de données lors de l'appuie sur le bouton "submit" qui à bien évidemment son name="ajouterappel".

Tout ce qui est contenu dans <form> détient la valeur 'name="lenom"', tout est OK de se côté, je pense que l'erreur vient du prepare. Mais je ne sais pas où.

Dans la base de donnees, les champs sont :
ID
data
nom
prenom
numero
type
objet
operateur
resume

Et voici le code PHP du submit

<?php if(isset($_POST['ajouterappel'])){ $data = date('d/m/Y H:i:s'); $nom = $_POST['nom']; $prenom = $_POST['prenom']; $numero = $_POST['numero']; $type = $_POST['type']; $objet = $_POST['objet']; $operateur = $_POST['operateur']; $resume = $_POST['resume']; $req = $odb->prepare("INSERT INTO lesappels (data, nom, prenom, numero, type, objet, operateur, resume) VALUES (NULL, :data, :nom, :prenom, :numero, :type, :objet, :operateur, :resume)"); $req->execute(array( ':data' => $data, ':nom' => $nom, ':prenom' => $prenom, ':numero' => $numero, ':type' => $type, ':objet' => $objet, ':operateur' => $operateur, ':resume' => $resume)); echo '<div class="alert alert-success" style="margin-top: 25px;"><b>L\'appel &agrave; &eacute;t&eacute; ajout&eacute; avec succ&egrave;s - <a href="historique-appel.php?numero='.$numero.'"><font color="white"><u>Acc&eacute;der à l\'historique du '.$numero.'</u></font></a></b></div>'; } ?>

Merci d'avance pour votre réponse.

Cordialement,
Elodie.

23 réponses

Carouge10, il y a 9 ans

Petite correction pour mon test.
Placer le résultat de l'execute dans une variable et tester celle-ci

Elodie Dasilva, il y a 9 ans

J'avais effectivement effectuer les 2 déjà avec et sans le "NULL", et sans le "NULL", la requête ne fonctionne pas non plus.

$req = $odb->prepare("INSERT INTO lesappels (data, nom, prenom, numero, type, objet, operateur, resume) VALUES (:data, :nom, :prenom, :numero, :type, :objet, :operateur, :resume)");

Cordialement.

Carouge10, il y a 9 ans

Essayer ceci après avoir exécuter la requête.

if (!$req) { echo "\nPDO::errorInfo():\n"; print_r($odb->errorInfo()); } else { echo "ok"; } die();
Elodie Dasilva, il y a 9 ans

Cela m'affiche l'echo de la confirmation d’exécution de la requête ainsi que le mot "ok" du echo à la fin.

Carouge10, il y a 9 ans

Et rien n'est inséré dans la bdd ? Même pas une ligne vide ?

Elodie Dasilva, il y a 9 ans

Malheureusement, négatif..

Carouge10, il y a 9 ans

Bonjour,

A quoi correspond NULL dans la requête car il y 8 champs pour 9 valeurs ?

Elodie Dasilva, il y a 9 ans

Bonjour,

La valeur "NULL" correspond à ID dans ma base de données.

Cordialement.

Carouge10, il y a 9 ans

Faudrait le signaler lors de la requête alors.
ID est en auto-incremente ?

Elodie Dasilva, il y a 9 ans

Oui il y est.

Cordialement.

Carouge10, il y a 9 ans

Donc dans ce cas, on le laisse la BDD gérer les id lors de l'insert.
Enlever NULL et la requête devrait fonctionner.

Elodie Dasilva, il y a 9 ans

Voici les champs de ma base de données, si ça peut servir.

Cordialement.

Elodie Dasilva, il y a 9 ans

"Petite correction pour mon test.
Placer le résultat de l'execute dans une variable et tester celle-ci"

Qu'entendez-vous par là ?

Cordialement.

Carouge10, il y a 9 ans
$res = $req->execute(array( ':data' => $data, ':nom' => $nom, ':prenom' => $prenom, ':numero' => $numero, ':type' => $type, ':objet' => $objet, ':operateur' => $operateur, ':resume' => $resume)); if (!$res) { echo "\nPDO::errorInfo():\n"; print_r($odb->errorInfo()); } else { echo "ok"; } die();
Elodie Dasilva, il y a 9 ans

Cela me retourne "PDO::errorInfo(): Array ( [0] => 00000 [1] => [2] => )"

Carouge10, il y a 9 ans

Donc la requête est bonne mais l'exécution produit une erreur.
Les champs sont complétés ? ou à défaut, autoriser à être null ?

Elodie Dasilva, il y a 9 ans

En effet tout est correct, je ne vois vraiment pas d'où vient l'erreur..

Elodie Dasilva, il y a 9 ans

Quelqu'un aurait la solution ? :S
Je patauge depuis hier a vérifier mes variables 1 par 1 et je ne vois aucune erreur..

Carouge10, il y a 9 ans

Il se pourrait qu'il y ai un conflit avec des noms de champs réservés à SQL.
Esssayer de renommer vos champs en les préfixant dans ce style "ap_data, ap_type....."

Elodie Dasilva, il y a 9 ans

Comme ceci ?

$req = $odb->prepare("INSERT INTO lesappels (ap_data, ap_nom, ap_prenom, ap_numero, ap_type, ap_objet, ap_operateur, ap_resume) VALUES (:ap_data, :ap_nom, :ap_prenom, :ap_numero, :ap_type, :ap_objet, :ap_operateur, :ap_resume)"); $req->execute(array( ':ap_data' => $data, ':ap_nom' => $nom, ':ap_prenom' => $prenom, ':ap_numero' => $numero, ':ap_type' => $type, ':ap_objet' => $objet, ':ap_operateur' => $operateur, ':ap_resume' => $resume ));

Carouge10, il y a 9 ans

oui, c'est ça

Elodie Dasilva, il y a 9 ans

Alors non, toujours aucun enregistrement dans la base de données :/.

Voici le code du <form>.

<form action="" method="POST" id="ajouterappel"> <div class="col-md-6 col-sm-6 col-xs-12 form-group has-feedback"> <?php $req_name = $_SESSION["username"]; $reponse = $odb->query("SELECT * FROM users WHERE pseudo = '$req_name'"); while ($donnees = $reponse->fetch()) { $id = $donnees['ID']; ?> <input type="text" class="form-control has-feedback-left" id="inputSuccess4" name="operateur" value="<?php if($donnees['ID'] == 1) echo 'L. Jeremy'; else if($donnees['ID'] == 2) echo 'A. Dominic';?>" disabled/> <?php } ?> <span class="fa fa-support form-control-feedback left" aria-hidden="true"></span> </div> <div class="col-md-6 col-sm-6 col-xs-12 form-group has-feedback"> <input type="text" class="form-control has-feedback" id="inputSuccess2" name="data" value="<?php echo $date; ?> <?php echo $heure; ?>" disabled/> <span class="fa fa-calendar form-control-feedback right" aria-hidden="true"></span> </div> <div class="col-md-12 col-sm-12 col-xs-12 form-group has-feedback"> <select class="form-control" name="type"> <option>------ Sélectionner le type d'appel ------</option> <option value="1">Réception d'un appel</option> <option value="2">&Eacute;mission d'un appel</option> </select> </div> <div class="col-md-6 col-sm-6 col-xs-12 form-group has-feedback"> <input type="text" class="form-control has-feedback-left" id="inputSuccess2" name="nom" placeholder="Nom de la personne" value=""> <span class="fa fa-user form-control-feedback left" aria-hidden="true"></span> </div> <div class="col-md-6 col-sm-6 col-xs-12 form-group has-feedback"> <input type="text" class="form-control" id="inputSuccess3" name="prenom" placeholder="Prénom de la personne" value=""> <span class="fa fa-user form-control-feedback right" aria-hidden="true"></span> </div> <div class="col-md-6 col-sm-6 col-xs-12 form-group has-feedback"> <input type="text" class="form-control has-feedback-left" id="inputSuccess4" name="numero" placeholder="Numéro de téléphone" value=""> <span class="fa fa-phone form-control-feedback left" aria-hidden="true"></span> </div> <div class="col-md-6 col-sm-6 col-xs-12 form-group has-feedback"> <input type="text" class="form-control" id="inputSuccess5" name="objet" placeholder="Objet de l'appel" value=""> <span class="fa fa-question form-control-feedback right" aria-hidden="true"></span> </div> <div class="col-md-12 col-sm-12 col-xs-12 form-group has-feedback"> <textarea class="form-control" rows="12" cols="50" name="resume" placeholder="Resumé de l'appel" value=""><?php echo ucfirst($note); ?></textarea> </div> <div class="ln_solid"></div> <center><button type="submit" name="ajouterappel" class="btn btn-success"><font color="black"><i class="fa fa-check"></i> Ajouter cet appel</font></button></center> </form>

J'ai également testé en mettant ma class readonly="readonly" au lieu de disabled/> mais rien ne change.

Elodie Dasilva, il y a 9 ans

J'ai changé l'aspect et la mise en forme de ma requête.
Celle-ci est désormais fonctionnelle.

Voici mon code pour ceux qui chercherait après moi.

<?php if(isset($_POST['ajouterappel'])){ $data = $_POST['data']; $nom = $_POST['nom']; $prenom = $_POST['prenom']; $numero = $_POST['numero']; $type = $_POST['type']; $objet = $_POST['objet']; $operateur = $_POST['operateur']; $resume = $_POST['resume']; $insertAppel = $odb -> prepare("INSERT INTO `lesappels` VALUES(NULL, :data, :nom, :prenom, :numero, :type, :objet, :operateur, :resume)"); $insertAppel -> execute(array(':data' => $data, ':nom' => $nom, ':prenom' => $prenom, ':numero' => $numero, ':type' => $type, ':objet' => $objet, ':operateur' => $operateur, ':resume' => $resume)); echo '<div class="alert alert-success" style="margin-top: 25px;"><b>L\'appel &agrave; &eacute;t&eacute; ajout&eacute; avec succ&egrave;s - <a href="historique-appel.php?numero='.$numero.'"><font color="white"><u>Acc&eacute;der à l\'historique du '.$numero.'</u></font></a></b></div>'; }

Merci tout de même à "Carouge10" qui a voulu m'aider.

Cordialement.