Bonjour,
Les erreurs PDO sont-elles activés ?
Car là, la requête à l'air correcte
Bonjour,
Voila je rencontre un petit problème avec mon code.
J'ai un code qui prépare et execute une requête.
Il y'a 13 champs dans la première partie de la requête prepare et 13 dans les values
A l'étape de l'execute, je n'en mets que 12 car un des champs va venir récupérer la date du jour.
Je voudrais que cette page permette à l'utilisateur d'uploader ses recettes et la photo du plat qu'il veut présenter.
J'ai réservé cette page aux membres inscrits et connectés d'où la déclaration au début.
A l'envoi du formulaire via mon bouton submit, j'ai un message d'erreur indiquant la ligne "$ajoutrecette->execute..."
( ! ) Fatal error: in C:\wamp64\www\cooking\ajoutrecette.php on line 51
( ! ) PDOException: in C:\wamp64\www\cooking\ajoutrecette.php on line 51
Call Stack
Time Memory Function Location
1 0.0004 407936 {main}( ) ...\ajoutrecette.php:0
2 0.0056 453496 execute ( ) ...\ajoutrecette.php:51
J'avais ma page d'inscription qui reposait sur le même principe: un nombre de champs inférieur dans la partie execute que dans la partie prepare car le champ de Date prenait aussi la valeur de la date actuelle.
Est ce que vous avez une piste?
Je ne vois pas pourquoi ce code me retourne une erreur alors que l'autre avait fonctionné (grâce à Carouge10 et Lartak) :)
Merci
15 réponses
Hello. Merci Carouge.
Oui, dans mon fichier database.inc.php que j'appelle au début, j'ai mis ce code:
<?php
$host= 'localhost';
$username= 'root';
$password= '';
$database= 'cooking';
try {
$cooking = new PDO("mysql:host=$host; dbname=$database", $username, $password);
$cooking->exec('SET CHARACTER SET UTF-8');
$cooking->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
//$cooking->setAttribute(PDO::ATTR_EMULATE_PREPARES);
}
catch (PDOException $e) {
print "Erreur !: " . $e->getMessage() . "<br/>";
die();
}
?>
J'ai mis en commentaire le 2nd SetAttributes qui me provoquait des erreurs car il fallait 2 arguments et je ne voyais pas quel autre argument placer.
A quel moment tu fais $membre = $_POST['membre'] ? et de même pour les autres paramètres de la requêtes ?
Carouge10,
au début, juste après leif(!empty($_SESSION['login'])) => je les avais supprimé pour une meilleure lecture:
if(!empty($_SESSION['login'])) {
$titre = filter_input(INPUT_POST,'titre');
$chapo = filter_input(INPUT_POST,'chapo');
$preparation = filter_input(INPUT_POST,'preparation');
$categorie = filter_input(INPUT_POST,'categorie');
$ingredient = filter_input(INPUT_POST,'ingredient');
$tempsCuisson = filter_input(INPUT_POST,'tempsCuisson');
$tempsPreparation = filter_input(INPUT_POST,'tempsPreparation');
$difficulte = filter_input(INPUT_POST,'difficulte');
$prix = filter_input(INPUT_POST,'prix');
$img = filter_input(INPUT_POST,'myfile');
$couleur = filter_input(INPUT_POST,'couleur');
$membreID = $_SESSION['idMembre'];
$membrelogin = $_SESSION['login'];
Pour un test, je viens de mettre en commentaire dans le fichier de connexion, la ligne de gestion des erreurs
$cooking->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
Et ensuite repassé en actif, j'ai parfois eu l'erreur, parfois non.
Mais l'insertion dans ma BDD ne se fait pas. Je vais commencer à devenir fou avec ce code :)
Merci de ton aide
as-tu testé le retour de la méthode execute de l'insert ?
Passes-tu au moins dans ce if ?
Quand tu mets du code ici, utilise le bouton </> comme tu l'as fais au début pour rendre ce code plus lisible.
Qu'entends tu par retour?
Je ne passais plus dans la boucle avec le code que je t'ai donné, je viens de relancer.
Désolé, je n'avais plus mis dans le </> car ca avait déformé le texte.
Je retente:
J'ai mis en commentaire la ligne des erreurs dans mon fichier de connexion et passe mes différents tests de var_dump me montrent que j'arrive au test3 (après le 'if ($recetteexists === 0)'.
Mais l'insertion ne se fait toujours pas
EDIT: OK, je viens de comprendre pour le code, je l'utilisais mal. Désolé
De souvenir, il vaut mieux éviter d'éditer ton code dans ton post.
La méthode execute te renvoie true ou false, ce qui te permet de savoir si elle c'est bien exécuter.
Compte le nombre de ? dans le prepare et compte le nombre de paramètre dans l'execute....
J'ai 13 paramètres dans le prepare et 12 dans l'execute mais sur mon autre page d'inscription.
J'avais 7 paramètres dans le prepare et 5 dans l'execute et cela fonctionnait.
Du coup, je comprends pas ce qui bloque
Oups, j'ai rien dis pour le faite de compter, ceci était pour une autre personne. J'ai mélanger les sujets.
Donc la tu arrives bien à avoir tes test X affichées ?
Que te renvoie la méthode execute ? true ou false ?
Cela me retourne false:
le champs myfile est de type $_FILES ?
Je suis pas sûr de voir comment le déclarer:
j'ai laissé que les éléments importants.
Est-ce que je mets sous cette forme-là:
$img = $_FILES['myfile'];
Et pour la déclaration du formulaire:
J'hésitais entre:
<form method="post" action=""> (mon premier choix car le fichier fileupload.inc.php ne devrait servir que pour l'upload de l'image (tout à la fin)
OU
<form method="post" action="fileupload.inc.php">
Mon fichier 'fileupload.inc.php':
$img est un array donc tu ne peux mettre ton array en tant paramètre
puisque que tu connais le chemin vers ton image, il te faut stocker seulement le nom de cette dernière.
Je ne suis pas sûr de comprendre.
Tu veux dire sous cette forme?
là-haut, je garde:
et dans la requête:
ce qui donne
Je n'avais pas créé ce fichier d'upload pour être honnête, je l'avais trouvé sur internet pour l'étudier
When you put code here, use the </> button as you did at the beginning to make this code more readable. <a href="https://ovo.fyi/redtube/">Redtube</a> <a href="https://ovo.fyi/beeg/">Beeg</a> <a href="https://ovo.fyi/spankbang/">Spankbang</a>