Problème INSERT INTO PHP5

Résolu/Fermé
delaville81 Messages postés 188 Date d'inscription jeudi 6 novembre 2008 Statut Membre Dernière intervention 12 avril 2024 - 31 oct. 2013 à 10:37
delaville81 Messages postés 188 Date d'inscription jeudi 6 novembre 2008 Statut Membre Dernière intervention 12 avril 2024 - 1 nov. 2013 à 11:08
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


12 réponses

Utilisateur anonyme
31 oct. 2013 à 13:44
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
delaville81 Messages postés 188 Date d'inscription jeudi 6 novembre 2008 Statut Membre Dernière intervention 12 avril 2024
31 oct. 2013 à 15:23
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
Utilisateur anonyme
31 oct. 2013 à 15:26
As-tu des messages d'erreur ? Le echo s'affiche-t-il ?
0
Utilisateur anonyme
31 oct. 2013 à 15:29
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
delaville81 Messages postés 188 Date d'inscription jeudi 6 novembre 2008 Statut Membre Dernière intervention 12 avril 2024
31 oct. 2013 à 15:36
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

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

Posez votre question
Utilisateur anonyme
31 oct. 2013 à 16:02
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
delaville81 Messages postés 188 Date d'inscription jeudi 6 novembre 2008 Statut Membre Dernière intervention 12 avril 2024
31 oct. 2013 à 16:40
Merci de ta réponse.

Seul le coucou1 d'affiche.
0
Utilisateur anonyme
31 oct. 2013 à 17:20
Peux-tu montrer le code de connexion à la base de données (en cachant tes identifiants bien sûr)
0
delaville81 Messages postés 188 Date d'inscription jeudi 6 novembre 2008 Statut Membre Dernière intervention 12 avril 2024
31 oct. 2013 à 17:27
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
Utilisateur anonyme
31 oct. 2013 à 17:39
Ç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
delaville81 Messages postés 188 Date d'inscription jeudi 6 novembre 2008 Statut Membre Dernière intervention 12 avril 2024
31 oct. 2013 à 18:15
Re,
Ni le echo, ni le print_r ne s'affiche.
0
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
delaville81 Messages postés 188 Date d'inscription jeudi 6 novembre 2008 Statut Membre Dernière intervention 12 avril 2024
1 nov. 2013 à 11:08
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