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


Elodie Dasilva
Auteur
Réponse acceptée

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.

Bonjour,

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

Bonjour,

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

Cordialement.

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

Oui il y est.

Cordialement.

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.

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.

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

if (!$req) {
   echo "\nPDO::errorInfo():\n";
   print_r($odb->errorInfo());
}
else {
echo "ok";
}
die();

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

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

Malheureusement, négatif..

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

Cordialement.

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

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

$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();

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

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 ?

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

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

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

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

oui, c'est ça

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.