Probleme input type button pour insertion BDD
vegeta
-
vegeta -
vegeta -
Bonjour a tous
Je bloque depuis quelques jours sur mon projet et j'espère avoir une aide :)
Je fais un site web pour une aide sur un jeu android.
Le principe est simple : il y a des célébrités qui ont des plats favoris. Tant qu'on les découvre pas ils restent masqués.
Mon but est d'afficher tous les plats et lorsqu'on a proposé les plats aux célébrités, à l'aide des boutons radios mettre à jour la BDD afin que lorsque l'utilisateur revient, il sait quel plat il a testé ou pas.
Pour cela j'ai créé une table :
- "user"
- "célébrité"
- "catégorie de plat"
- "plats"
- "plats trouvés" afin de lier la table "célébrité" avec "plats"
J'ai essayé 2 méthodes :
- soit j'affiche les plats par catégorie avec un bouton submit pour valider
---> Problème mes boutons radios fonctionnent mal : par exemple je ne peux pas cocher le bouton de chaque plat. Je ne peux que cocher le bouton d'un plat
- soit j'affiche les plats par catégories avec un bouton submit pour chaque plat afin de mettre à jour la bdd au fur et a mesure
---> Problème rencontré : lors de mon insertion dans la bdd, il m'inscrit à chaque fois le dernier plat. Peut importe le plat choisi
A votre avis, quelle est la meilleure solution?
Et enfin pouvez vous me dire d'ou vient l'erreur?
Voici le code de ma page :
<?php
require 'inc/request.php';
?>
<section class="find-dishes">
<aside>
<img src="<?=$dir_img_celebrities.$mademoiselle->celebrity_root.$ext_img?>" alt="<?= $mademoiselle->celebrity_name?>">
<img class="favorite-dishes1" src="<?=$dir_img_celebrities.$mademoiselle->favorite_dish1.$ext_img?>" alt="Plat Favori" >
<img class="favorite-dishes2" src="<?=$dir_img_celebrities.$mademoiselle->favorite_dish2.$ext_img?>" alt="Plat Favori" >
<img class="favorite-dishes3" src="<?=$dir_img_celebrities.$mademoiselle->favorite_dish3.$ext_img?>" alt="Plat Favori" >
</aside>
<article>
<h2>Liste des entrées</h2>
<form class="list-dishes" method="POST" action="">
<?php foreach ($list_entrees as $entree):?>
<div id="<?php echo $entree->id_dish ?> "class="dishes">
<h3><?php echo $entree->dish_name ?></h3>
<img src="<?php echo $dir_img_dishes.$list_category[0]->category_name.'/'.$entree->dish_root.$ext_img?>" alt="<?php echo $entree->dish_name?>" >
<div class="form-check">
<input class="form-check-input" id="<?php echo $entree->dish_name?>" type="radio" name="choix" value= 'oui'>Oui
<label class="form-check-label" for=""></label>
<input class="form-check-input" id="<?php echo $entree->dish_name?>" type="radio" name="choix" value= 'non'>Non
<label class="form-check-label" for=""></label>
<input class="form-check-input" id="<?php echo $entree->dish_name?>" type="radio" name="choix" value='ne_sais_pas' checked>Je ne sais pas
<label class="form-check-label" for=""></label>
</div>
</div>
<?php endforeach; ?>
<div class="col-12 submit">
<button class="btn btn-primary" type="submit" name="<?php echo $entree->id_dish ?>">Enregistrer</button>
</div>
</form>
<?php if (!empty($_POST)){
var_dump($_POST);
$req = $pdo->prepare('INSERT INTO dishes_found SET choix = ? , dish_name = ? , dish_id = ?, celebrity_id = ?');
$req->execute([$choix, $entree->dish_name , $_POST['id'] , $mademoiselle->id_celebrity]);
$_SESSION['flash']['success'] = "L'enregistrement a bien été pris en compte";
header('Location: mademoiselle.php');
exit();
} else {
$errors['choix'] = "l'enregistrement n'a pas pu etre pris en compte";
};
?>
</article>
</section>
<?php require 'inc/footer.php';?>
Je bloque depuis quelques jours sur mon projet et j'espère avoir une aide :)
Je fais un site web pour une aide sur un jeu android.
Le principe est simple : il y a des célébrités qui ont des plats favoris. Tant qu'on les découvre pas ils restent masqués.
Mon but est d'afficher tous les plats et lorsqu'on a proposé les plats aux célébrités, à l'aide des boutons radios mettre à jour la BDD afin que lorsque l'utilisateur revient, il sait quel plat il a testé ou pas.
Pour cela j'ai créé une table :
- "user"
- "célébrité"
- "catégorie de plat"
- "plats"
- "plats trouvés" afin de lier la table "célébrité" avec "plats"
J'ai essayé 2 méthodes :
- soit j'affiche les plats par catégorie avec un bouton submit pour valider
---> Problème mes boutons radios fonctionnent mal : par exemple je ne peux pas cocher le bouton de chaque plat. Je ne peux que cocher le bouton d'un plat
- soit j'affiche les plats par catégories avec un bouton submit pour chaque plat afin de mettre à jour la bdd au fur et a mesure
---> Problème rencontré : lors de mon insertion dans la bdd, il m'inscrit à chaque fois le dernier plat. Peut importe le plat choisi
A votre avis, quelle est la meilleure solution?
Et enfin pouvez vous me dire d'ou vient l'erreur?
Voici le code de ma page :
<?php
require 'inc/request.php';
?>
<section class="find-dishes">
<aside>
<img src="<?=$dir_img_celebrities.$mademoiselle->celebrity_root.$ext_img?>" alt="<?= $mademoiselle->celebrity_name?>">
<img class="favorite-dishes1" src="<?=$dir_img_celebrities.$mademoiselle->favorite_dish1.$ext_img?>" alt="Plat Favori" >
<img class="favorite-dishes2" src="<?=$dir_img_celebrities.$mademoiselle->favorite_dish2.$ext_img?>" alt="Plat Favori" >
<img class="favorite-dishes3" src="<?=$dir_img_celebrities.$mademoiselle->favorite_dish3.$ext_img?>" alt="Plat Favori" >
</aside>
<article>
<h2>Liste des entrées</h2>
<form class="list-dishes" method="POST" action="">
<?php foreach ($list_entrees as $entree):?>
<div id="<?php echo $entree->id_dish ?> "class="dishes">
<h3><?php echo $entree->dish_name ?></h3>
<img src="<?php echo $dir_img_dishes.$list_category[0]->category_name.'/'.$entree->dish_root.$ext_img?>" alt="<?php echo $entree->dish_name?>" >
<div class="form-check">
<input class="form-check-input" id="<?php echo $entree->dish_name?>" type="radio" name="choix" value= 'oui'>Oui
<label class="form-check-label" for=""></label>
<input class="form-check-input" id="<?php echo $entree->dish_name?>" type="radio" name="choix" value= 'non'>Non
<label class="form-check-label" for=""></label>
<input class="form-check-input" id="<?php echo $entree->dish_name?>" type="radio" name="choix" value='ne_sais_pas' checked>Je ne sais pas
<label class="form-check-label" for=""></label>
</div>
</div>
<?php endforeach; ?>
<div class="col-12 submit">
<button class="btn btn-primary" type="submit" name="<?php echo $entree->id_dish ?>">Enregistrer</button>
</div>
</form>
<?php if (!empty($_POST)){
var_dump($_POST);
$req = $pdo->prepare('INSERT INTO dishes_found SET choix = ? , dish_name = ? , dish_id = ?, celebrity_id = ?');
$req->execute([$choix, $entree->dish_name , $_POST['id'] , $mademoiselle->id_celebrity]);
$_SESSION['flash']['success'] = "L'enregistrement a bien été pris en compte";
header('Location: mademoiselle.php');
exit();
} else {
$errors['choix'] = "l'enregistrement n'a pas pu etre pris en compte";
};
?>
</article>
</section>
<?php require 'inc/footer.php';?>
Configuration: Windows / Firefox 92.0
A voir également:
- Probleme input type button pour insertion BDD
- Touche insertion clavier - Guide
- Insertion sommaire word - Guide
- Insertion filigrane word - Guide
- Insertion liste déroulante excel - Guide
- Insertion signature word - Guide
2 réponses
Bonjour,
Déjà,
pour poster du code sur ce forum, il faut utiliser les BALISES DE CODE.
Explicatios ( à lire ENTIEREMENT !! ) disponibles ici : https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
Ensuite :
Si tu veux faire du choix multiple, il ne faut pas utiliser des boutons radios mais des checkbox
Et que donne ton var_dump ? contient-il les bonnes valeurs ?
NB: Pour pouvoir le voir, pense à désactiver la redirection le temps de tes tests ( en mettant en commentaire la ligne :
NB² : A noter que tu as utilisé une requête SQL un peu particulière ...
Au lieu d'utiliser la "vraie" syntaxe d'un INSERT .. tu as pris celle d'un UPDATE.
Alors bon.. mysql le tolère .. mais c'est le seul et c'est franchement déconseillé ...
Déjà,
pour poster du code sur ce forum, il faut utiliser les BALISES DE CODE.
Explicatios ( à lire ENTIEREMENT !! ) disponibles ici : https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
Ensuite :
---> Problème mes boutons radios fonctionnent mal : par exemple je ne peux pas cocher le bouton de chaque plat. Je ne peux que cocher le bouton d'un plat
Si tu veux faire du choix multiple, il ne faut pas utiliser des boutons radios mais des checkbox
Problème rencontré : lors de mon insertion dans la bdd, il m'inscrit à chaque fois le dernier plat. Peut importe le plat choisi
Et que donne ton var_dump ? contient-il les bonnes valeurs ?
NB: Pour pouvoir le voir, pense à désactiver la redirection le temps de tes tests ( en mettant en commentaire la ligne :
header('Location: mademoiselle.php');)
NB² : A noter que tu as utilisé une requête SQL un peu particulière ...
Au lieu d'utiliser la "vraie" syntaxe d'un INSERT .. tu as pris celle d'un UPDATE.
Alors bon.. mysql le tolère .. mais c'est le seul et c'est franchement déconseillé ...
Merci Jordane45 ! Je ne souhaite pas effectuer un choix multiple, si tu veux j'affiche tous les plats avec un foreach donc l'attribut "name" des input sont les mêmes. Ce problème là est réglé. Mais j'en ai un autre... Comment inserer toutes les lignes de mon tableau avec un foreach? Voici mon code : <code php><?php if (!empty($_POST)){ $insert = ($_POST['choix']); var_dump($insert); $valeur = $pdo->prepare('INSERT INTO dishes_found SET choix = ? , dish_name = ? , dish_id = ?, celebrity_id = ?'); var_dump($valeur); foreach ($insert as $key=>$valeur){ var_dump($valeur); var_dump($key); $insert->execute($choix, $entree->dish_name , $entree->id_dish , $mademoiselle->id_celebrity); var_dump($valeur); }; $_SESSION['flash']['success'] = "L'enregistrement a bien été pris en compte"; //header('Location: mademoiselle.php'); exit(); } else { $errors['choix'] = "l'enregistrement n'a pas pu etre pris en compte"; }; ?
----> retour : Fatal error: Uncaught Error: Call to a member function execute() on int