Problème INSERT INTO PHP5

Résolu
delaville81 Messages postés 209 Statut Membre -  
delaville81 Messages postés 209 Statut Membre -
Chers confrères,
Je solicite votre aide pour m'aider sur un problème dans ma requête.
Je passe bien dans la boucle, la récupe des données de passe bien, mais ensuite, la requête d'insert ne se passe pas.
Lorsque je la commente, mon echo fonctionne bien.

////////////////////////////////////////


//récup des champs
for($i=0;$i<count($_POST['libelle']);$i++)
{
$datea = $_POST['datea'][$i];
$libelle = $_POST['libelle'][$i];
$debit = $_POST['debit'][$i];
$credit = $_POST['credit'][$i];

$sql = "INSERT INTO compta (date,libelle,debit,credit)
values (".$pdo->quote($datea).",
".$pdo->quote($libelle).",
".$pdo->quote($debit).",
".$pdo->quote($credit)."
)";

echo '<br />'.$datea.' - '.$libelle.' - '.$debit.' - '.$credit.'<br />';
//exécution de l'insert
$nb = $pdo->exec($sql);
}
///////////////////////////////////////

Merci d'avance pour votre aide



--
Bien PHPment et MySQLment
Delaville

12 réponses

  1. Utilisateur anonyme
     
    Bonjour

    Lorsque je la commente, mon echo fonctionne bien.
    C'est d'autant plus étonnant que ta requête n'est exécutée qu'après le echo ...
    Tu utilises $pdo->quote, ce qui est une très mauvaise idée, c'est déconseillé dans la doc même de PDO. Tu ferais mieux d'utiliser une requête préparée, ça t'éviterait d'oublier les quotes autour de tes values :

    	$sql = "INSERT INTO compta (date,libelle,debit,credit)
    values (:datea,:libelle,:debit,:credit)";
    $stmt=$pdo->prepare($sql);

    echo '<br />'.$datea.' - '.$libelle.' - '.$debit.' - '.$credit.'<br />';
    //exécution de l'insert
    $nb = $stmt->execute(array(':datea'=>$datea, ':libelle'=>$libelle, ':debit'=>$debit, ':credit'=>$credit));
    0
  2. delaville81 Messages postés 209 Statut Membre
     
    Merci de ta réponse le père,

    Cependant, même avec ta requête ça ne fonctionne pas.

    Aurais tu une autre suggestion ?

    Merci d'avance
    0
  3. Utilisateur anonyme
     
    As-tu des messages d'erreur ? Le echo s'affiche-t-il ?
    0
    1. Utilisateur anonyme
       
      Remarque complémentaire (mais sans lien direct avec l'erreur) : il faudrait mettre la requête et le 'prepare' AVANT la boucle for, ça éviterait à mysql de ré-interpréter la requête à chaque fois : c'est justement à ça que servent les requêtes préparées.
      0
  4. delaville81 Messages postés 209 Statut Membre
     
    Le père,
    Je n'ai aucun message d'erreur.
    Le echo ne s'affiche pas non plus.

    J'ai testé en mettant le requête et le prépare avant la boucle, c'est la même chose.

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

    Posez votre question
  6. Utilisateur anonyme
     
    Pour voir, par où tu passes, modifie le début de ta boucle :

    ...
    $sql = "INSERT INTO compta (date,libelle,debit,credit)
    values (:datea,:libelle,:debit,:credit)";
    echo 'coucou1<br />';
    $stmt=$pdo->prepare($sql);
    echo 'coucou2<br />';

    for($i=0;$i<count($_POST['libelle']);$i++)
    {
    echo 'coucou3<br />';

    $datea = $_POST['datea'][$i];
    ...
    0
  7. delaville81 Messages postés 209 Statut Membre
     
    Merci de ta réponse.

    Seul le coucou1 d'affiche.
    0
  8. Utilisateur anonyme
     
    Peux-tu montrer le code de connexion à la base de données (en cachant tes identifiants bien sûr)
    0
  9. delaville81 Messages postés 209 Statut Membre
     
    Mon fichier connexion.php
    Pas la peine de cacher mes identifiants je suis sur MAMP


    <?php
    $hote = 'localhost';
    $bdd = 'asso';
    $util = 'root';
    $mdp = 'root';
    try{
    $pdo = new PDO('mysql:host ='.$hote.';dbname='.$bdd,$util,$mdp);
    $pdo->exec("SET CHARACTER SET utf8");
    //echo "ok";
    }
    catch(PDOException $e){
    echo 'Connexion échouée : '.$e->getMessage();
    exit();
    }
    ?>

    0
  10. Utilisateur anonyme
     
    Ça a l'air OK... Alors il y a sans doute un problème avec la requête ( table ou champ inexistant...)

    $stmt=$pdo->prepare($sql);
    if (!$stmt) {
    echo "\nPDO::errorInfo():\n";
    print_r($pdo->errorInfo());
    }
    0
  11. delaville81 Messages postés 209 Statut Membre
     
    Re,
    Ni le echo, ni le print_r ne s'affiche.
    0
  12. Utilisateur anonyme
     
    Il y a bien un include "connexion.php" au début du script ?

    remplace le echo 'coucou1<br />'; par

    if (isset($pdo)) print_r ($pdo); else echo 'pdo non défini';
    0
  13. delaville81 Messages postés 209 Statut Membre
     
    Je devais rêver, j'avais oublié l'appel au fichier de connexion.
    Je n'y avais pas penser car dans mon teste précédent, j'exécuter mon script dans la page du formulaire
    Désolé de t'avoir faut perdre ton temps pour une erreur de ma part, mais ça m'a permis d'apprendre que le $pdo->quote est déconseillé et que le requête préparées c'est mieux.
    Merci pour ton aide précieuse
    0