Probleme input type button pour insertion BDD

Fermé
vegeta - 10 sept. 2021 à 22:31
 vegeta - 11 sept. 2021 à 00:19
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';?>




Configuration: Windows / Firefox 92.0
A voir également:

2 réponses

jordane45 Messages postés 38314 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 24 novembre 2024 4 705
11 sept. 2021 à 00:11
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 :

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

0
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
0