Cases à cocher + enregistrement clés étrangères
Résolu
Mira
-
Mira -
Mira -
Bonjour,
Je travail sur un projet ou je souhaite mettre en ligne des vidéos, des articles et des solutions.
Il y'a un onglet vidéo, un onglet article et un onglet solution.
L'onglet solutions regroupent une sélection d'articles et de vidéos en fonction d'un thème.
Pour le sql, il y'a une table article (vidéo et solution trié par type).
Un table thème.
Et une table solutions avec pour clés étrangères id_article et id_theme.
Grâce à un précédent post, j'ai réussie à faire apparaitre les solutions grâce à un LEFT JOIN.
Maintenant je continue le projet avec le backoffice.
Je voudrais pourvoir sélectionner plusieurs articles pour lui assigner 1 même thème.
J'ai un formulaire html avec des cases à cocher.
Je souhaiterai faire un enregistrement des cases à cocher mais de manière séparé.
Un case à coché : un ID
De plus je voudrai j'ai du mal à visualiser comment enregistrer tout ça dans ma table solutions qui contient des clés étrangères.
Pourriez-vous m'aider svp ?
Merci pour votre aide :)
voici le code :
Je travail sur un projet ou je souhaite mettre en ligne des vidéos, des articles et des solutions.
Il y'a un onglet vidéo, un onglet article et un onglet solution.
L'onglet solutions regroupent une sélection d'articles et de vidéos en fonction d'un thème.
Pour le sql, il y'a une table article (vidéo et solution trié par type).
Un table thème.
Et une table solutions avec pour clés étrangères id_article et id_theme.
Grâce à un précédent post, j'ai réussie à faire apparaitre les solutions grâce à un LEFT JOIN.
Maintenant je continue le projet avec le backoffice.
Je voudrais pourvoir sélectionner plusieurs articles pour lui assigner 1 même thème.
J'ai un formulaire html avec des cases à cocher.
Je souhaiterai faire un enregistrement des cases à cocher mais de manière séparé.
Un case à coché : un ID
De plus je voudrai j'ai du mal à visualiser comment enregistrer tout ça dans ma table solutions qui contient des clés étrangères.
Pourriez-vous m'aider svp ?
Merci pour votre aide :)
voici le code :
<!doctype html> <html lang="fr"> <?php require_once(__DIR__ . '/config/database.php'); // themes $theme = $pdo->query("SELECT * FROM `theme`"); $rows_theme = $theme->fetchAll(PDO::FETCH_ASSOC); // article $article = $pdo->query("SELECT * FROM `article`"); $rows_article = $article->fetchAll(PDO::FETCH_ASSOC); // btn if (isset($_POST['btn_nouveau_theme'])) { $sql_nouveau_theme = "INSERT INTO theme(theme) VALUE (?)"; $nouveau_commentaire = $pdo->prepare($sql_nouveau_theme)->execute([$_POST['nouveau_theme']]); header("location:interface_solutions_formulaire_nouveau.php"); } elseif (isset($_POST['theme'])) { # Save-button was clicked } ?> <head> <!-- Required meta tags --> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> <!-- Bootstrap CSS --> <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css" integrity="sha384-Vkoo8x4CGsO3+Hhxv8T/Q5PaXtkKtu6ug5TOeNV6gBiFeWPGFN9MuhOf23Q9Ifjh" crossorigin="anonymous"> <!-- Bootstrap CSS --> <link rel="stylesheet" href="css/styles_interface.css"> <title>HPE</title> </head> <body> <nav aria-label="breadcrumb"> <ol class="breadcrumb"> <li class="breadcrumb-item"><a href="interface_entree.php">Acceuil</a></li> <li class="breadcrumb-item"><a href="interface_solutions.php">Solutions</a></li> <li class="breadcrumb-item active">Nouvelle solution</li> </ol> </nav> <div class="container"> <h1> Solutions </h1> <form action="" method="post"> <div class="row container_nouveau"> <div class="col-sm-12"> <h2 class="h2_nouveau">Nouveau thème</h2> <div class="form-group"> <input name="nouveau_theme" type="text" class="form-control" id="nouveau_theme" placeholder="Entrer votre nouveau thème"> </div> <button name="btn_nouveau_theme" type="submit" class="btn btn-primary btn_nouveau">Nouveau thème</button> </div> </div> </form> <form action="" method="post"> <h2>Sélectionner votre thème</h2> <div class="marge_theme"> <?php foreach ($rows_theme as $row_theme) { ?> <div class="form-check"> <input class="form-check-input" type="radio" name="exampleRadios" id="theme<?= $row_theme["id"] ?>" value="option2"> <label class="form-check-label label_theme" for="theme<?= $row_theme["id"] ?>"> <?= $row_theme["theme"] ?> </label> </div> <?php } ?> </div> <h2 class="h2_articles_theme">Articles à ajouter à solutions</h2> <div class="marge_theme"> <?php foreach ($rows_article as $row_article) { ?> <div class="form-check"> <input class="form-check-input" type="checkbox" value="" id="defaultCheck1"> <label class="label_theme" for="defaultCheck1"> <?= $row_article["titre"] ?> (<?= $row_article["type"] ?>) </label> </div> <?php } ?> </div> </form> <button name="theme" type="submit" class="btn btn-primary">Nouveau thème</button> </div> <!-- Optional JavaScript --> <!-- jQuery first, then Popper.js, then Bootstrap JS --> <script src="https://code.jquery.com/jquery-3.4.1.slim.min.js" integrity="sha384-J6qa4849blE2+poT4WnyKhv5vZF5SrPo0iEjwBvKU7imGFAV0wwj1yYfoRSJoZ+n" crossorigin="anonymous"></script> <script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.0/dist/umd/popper.min.js" integrity="sha384-Q6E9RHvbIyZFJoft+2mJbHaEWldlvI9IOYy5n3zV9zzTtmI3UksdQRVvoxMfooAo" crossorigin="anonymous"></script> <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/js/bootstrap.min.js" integrity="sha384-wfSDF2E50Y2D1uUdj0O3uMBJnjuUD4Ih7YwaYd1iqfktj0Uod8GCExl3Og8ifwB6" crossorigin="anonymous"></script> </body> </html>
A voir également:
- Cases à cocher + enregistrement clés étrangères
- Enregistrement mp3 gratuit - Télécharger - Streaming audio
- Cles windows 8 - Guide
- Supprimer case à cocher excel - Forum Excel
- Raccourci clavier case à cocher - Forum Clavier
- Enlever une case à cocher excel 2007 ✓ - Forum Excel
7 réponses
yg_be
Messages postés
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 584
bonjour, tu n'as pas expliqué les relations entre solutions, articles et thèmes.
ni décrit la structure de tes tables.
ni décrit la structure de tes tables.
Bonjour,
Voici le complément d'informations.
Il y'a un onglet article. Un onglet vidéo et un onglet solution.
Parmi les articles et vidéos présents dans les 2 premiers onglets, solution permet d'en sélectionner quelques un et de les regrouper par thème.
articles :
- id > int
- titre > text
- chapeau > text
- url_image > varchar
- type > varchar (si vidéo ou article)
- url_article > varchar
- en ligne > int
theme
- id
- theme > varchar
article_theme
- id
- article_id
- theme_id
Voici le complément d'informations.
Il y'a un onglet article. Un onglet vidéo et un onglet solution.
Parmi les articles et vidéos présents dans les 2 premiers onglets, solution permet d'en sélectionner quelques un et de les regrouper par thème.
articles :
- id > int
- titre > text
- chapeau > text
- url_image > varchar
- type > varchar (si vidéo ou article)
- url_article > varchar
- en ligne > int
theme
- id
- theme > varchar
article_theme
- id
- article_id
- theme_id
Bonjour,
Déjà, il te faut, soit un name différent pour chaque input, soit utiliser un name de type array
par exemple
Si tu coches des cases et que tu fais un print_r($_POST) tu verras comment se présentent les réponses.
Déjà, il te faut, soit un name différent pour chaque input, soit utiliser un name de type array
par exemple
<?php foreach ($rows_theme as $row_theme) { ?> <div class="form-check"> <input class="form-check-input" type="radio" name="exampleRadios[<?= $row_theme["id"] ?>]" id="theme<?= $row_theme["id"] ?>" value="option2"> <label class="form-check-label label_theme" for="theme<?= $row_theme["id"] ?>"> <?= $row_theme["theme"] ?> </label> </div> <?php } ?>
Si tu coches des cases et que tu fais un print_r($_POST) tu verras comment se présentent les réponses.
Merci pour ta réponse.
Je viens de mettre les name :
Je voulais savoir quel était la différence entre value et label?
La value apparait dans la base de donnée ?
Le print_r($_POST) m'affiche : Array ( ) 1
J'ai vue dans un autre post qu'il fallait faire un foreach sur le $_POST mais comment enregistrer ligne par ligne dans la base de donnée ?
Merci pour ton aide
Je viens de mettre les name :
<div class="marge_theme"> <?php foreach ($rows_article as $row_article) { ?> <div class="form-check"> <input class="form-check-input" type="checkbox" name="article<?= $row_theme["id"] ?>" value="" id="article<?= $row_theme["id"] ?>"> <label class="label_theme" for="article<?= $row_theme["id"] ?>"> <?= $row_article["titre"] ?> (<?= $row_article["type"] ?>) </label> </div> <?php } ?> </div>
Je voulais savoir quel était la différence entre value et label?
La value apparait dans la base de donnée ?
Le print_r($_POST) m'affiche : Array ( ) 1
J'ai vue dans un autre post qu'il fallait faire un foreach sur le $_POST mais comment enregistrer ligne par ligne dans la base de donnée ?
Merci pour ton aide
Je viens de mettre les name :
Pour ton besoin.. tu aurais mieux fait de laisser le name tel que je l'avais mis....(en mettant article à la place de exempe..;)
<input class="form-check-input" type="radio" name="article[<?= $row_theme["id"] ?>]" id="theme<?= $row_theme["id"] ?>" value="<?= $row_theme["id"] ?>">
De cette façon, lorsque tu vas cocher des cases puis "submit" ton formulaire, tu verras que le $_POST contiendra un array de toutes les cases cochées.
De là, il te faudra, en effet, faire une boucle dessus (via un foreach par exemple) pour les traiter.
$articles = !empty($_POST['article']) ? $_POST['article'] : NULL; if(!empty($articles)) { foreach($articles as $key => $value ){ // ici le traitement.... // par exemple echo $key . " : " . $value . "<br>"; } }
Je t'invite au passage à lire et à appliquer les conseils donnés ici :
https://forums.commentcamarche.net/forum/affich-37584947-php-gestion-des-erreurs-debogage-et-ecriture-du-code
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Bonjour,
Je voulais dans un premier tant remercier le formum et toi, Jordan45 pour le temps accordé.
J'avais déjà posé quelques questions et on m'a bien aidé.
Je viens de faire ta solution et je dois dire que cela avance.
Je récupère bien mes valeur des cases à cocher de manière séparé.
Maintenant, sauriez-vous svp, comment faire pour les enregistrer individuellement dans ma base de donnée ?
Je veux enregistrer chaque article séparément. Ils auront qu'un seul thème grâce au bouton radio.
En attendant voici ce que j'ai fais grâce à vous
1- définir le thème grâce aux boutons radios
a- je stocke ma valeur dans un tableau
b- je récupère mon tableau grâce à un foreach
2- sélectionner les cases à cocher
a- je stocke ma valeur dans un tableau
b- je récupère mon tableau grâce à un foreach
Je voulais dans un premier tant remercier le formum et toi, Jordan45 pour le temps accordé.
J'avais déjà posé quelques questions et on m'a bien aidé.
Je viens de faire ta solution et je dois dire que cela avance.
Je récupère bien mes valeur des cases à cocher de manière séparé.
Maintenant, sauriez-vous svp, comment faire pour les enregistrer individuellement dans ma base de donnée ?
Je veux enregistrer chaque article séparément. Ils auront qu'un seul thème grâce au bouton radio.
En attendant voici ce que j'ai fais grâce à vous
1- définir le thème grâce aux boutons radios
a- je stocke ma valeur dans un tableau
<input class="form-check-input" type="radio" name="theme[<?= $row_theme["id"]?>]" id="theme<?= $row_theme["id"] ?>" value="<?= $row_theme["id"] ?>"> <label class="form-check-label label_theme" for="theme[<?= $row_theme["id"]?>]"> <?= $row_theme["theme"] ?> </label>
b- je récupère mon tableau grâce à un foreach
$theme = !empty($_POST['theme']) ? $_POST['theme'] : NULL; if(!empty($theme)) { foreach($theme as $keyTheme => $valueTheme ){ echo $keyTheme . " : " . $valueTheme ; } }
2- sélectionner les cases à cocher
a- je stocke ma valeur dans un tableau
<input class="form-check-input" type="checkbox" name="article[<?= $row_article["id"]?>]" value="<?= $row_article["id"]?>"> <label class="label_theme" for="article[<?= $row_article["id"]?>]?>"> <?= $row_article["titre"] ?> (<?= $row_article["type"] ?>) </label>
b- je récupère mon tableau grâce à un foreach
$article = !empty($_POST['article']) ? $_POST['article'] : NULL; if(!empty($article)) { foreach($article as $keyArticle => $valueArticle ){ // ici le traitement.... // par exemple echo $keyArticle . " : " . $valueArticle . "<br>"; } }
Comme tu peux le lire dans le code que je t'ai donné
Hors... à par le echo que je t'avais mis ( comme exemple....) je ne vois rien d'autre....
Qu'as tu essayé ??
En plus, que signifie exactement :
Enregistrer QUOI ? dans quelle(s) table(s) ?
Il serait intéressant (et même utile..) que tu nous montres un exemple concret de ce que contient ton $_POST et que tu nous précises ( via ces données d'exemple) quoi doit aller où....
// ici le traitement.... // par exemple
Hors... à par le echo que je t'avais mis ( comme exemple....) je ne vois rien d'autre....
Qu'as tu essayé ??
En plus, que signifie exactement :
enregistrer individuellement dans ma base de donnée
Enregistrer QUOI ? dans quelle(s) table(s) ?
Il serait intéressant (et même utile..) que tu nous montres un exemple concret de ce que contient ton $_POST et que tu nous précises ( via ces données d'exemple) quoi doit aller où....
Merci pour ta réponse.
Je vais essayé d'être plus clair.
Prenons un exemple de chaussures
Il va y avoir un onglet articles sur des chaussures en vrac :
- baskets
- chaussures de villes
- chaussures de randonnées
Il va y avoir un onglet vidéo en vrac avec des exemple de chaussures
Pour les deux onglets j'ai fait une table article
- id
- titre
- chapeau
- url image
- type (article ou vidéo)
- url article
- en ligne
Et il va y avoir un onglet solutions qui va regrouper les chaussures par thématique.
Ex : chaussures de randonnée débutant avec une sélection des articles et des vidéos présents dans les deux premiers onglets.
J'ai fait une table thème
- id
- theme
Puis une table article_theme avec des clés étrangères
- id
-article_id
-theme_id
article_theme va me permettre de gérer les solutions par thématiques.
Je li mon thème à mes articles (vidéo ou articles) déjà créés.
J'essaye en ce moment de créer une nouvelle solution.
Les boutons radios permettent de sélectionner le thème existant dans la base de donnée.
Les cases à cocher permettre de sélectionner mes articles présents dans la base de donnée.
Je souhaite donc lier le thème et les articles.
Ce que j'entend par enregistrer ligne par ligne dans ma base de donnée c'est que je veux qu'il y'ai qu'un enregistrement à la fois. 1bouton radio avec 1 case à cocher dans la table article_theme. J'ai fait des cases à cocher car c'est plus rapi
J'ai enlevé
car je ne savais pas quoi mettre à part mes requêtes sql.
Je ne sais pas si je suis plus clair :)
Je vais essayé d'être plus clair.
Prenons un exemple de chaussures
Il va y avoir un onglet articles sur des chaussures en vrac :
- baskets
- chaussures de villes
- chaussures de randonnées
Il va y avoir un onglet vidéo en vrac avec des exemple de chaussures
Pour les deux onglets j'ai fait une table article
- id
- titre
- chapeau
- url image
- type (article ou vidéo)
- url article
- en ligne
Et il va y avoir un onglet solutions qui va regrouper les chaussures par thématique.
Ex : chaussures de randonnée débutant avec une sélection des articles et des vidéos présents dans les deux premiers onglets.
J'ai fait une table thème
- id
- theme
Puis une table article_theme avec des clés étrangères
- id
-article_id
-theme_id
article_theme va me permettre de gérer les solutions par thématiques.
Je li mon thème à mes articles (vidéo ou articles) déjà créés.
J'essaye en ce moment de créer une nouvelle solution.
Les boutons radios permettent de sélectionner le thème existant dans la base de donnée.
Les cases à cocher permettre de sélectionner mes articles présents dans la base de donnée.
Je souhaite donc lier le thème et les articles.
Ce que j'entend par enregistrer ligne par ligne dans ma base de donnée c'est que je veux qu'il y'ai qu'un enregistrement à la fois. 1bouton radio avec 1 case à cocher dans la table article_theme. J'ai fait des cases à cocher car c'est plus rapi
J'ai enlevé
// ici le traitement.... // par exemple
car je ne savais pas quoi mettre à part mes requêtes sql.
Je ne sais pas si je suis plus clair :)
Il faudrait surtout que tu répondes aux questions qu'on te pose
par exemple
En gros.. tu coches tes cases ... puis tu valides ( bien entendu, tu auras ajouté un print_r($_POST); dans ton code )
Ainsi, tu auras le contenu de ta variable affiché sur ta page.
(contenu que tu nous partageras ici sur le forum).
Ben oui.. c'est bien ça.
Il faut y mettre tes requêtes SQL.
Donc.. qu'as tu essayé ? Qu'est-ce qui ne marche pas ?
par exemple
Il serait intéressant (et même utile..) que tu nous montres un exemple concret de ce que contient ton $_POST et que tu nous précises ( via ces données d'exemple) quoi doit aller où....
En gros.. tu coches tes cases ... puis tu valides ( bien entendu, tu auras ajouté un print_r($_POST); dans ton code )
Ainsi, tu auras le contenu de ta variable affiché sur ta page.
(contenu que tu nous partageras ici sur le forum).
ne savais pas quoi mettre à part mes requêtes sql.
Ben oui.. c'est bien ça.
Il faut y mettre tes requêtes SQL.
Donc.. qu'as tu essayé ? Qu'est-ce qui ne marche pas ?
Merci pour ton aide,
J'avais juste un peu peur de mettre mes requêtes dans un foreach, je sais c'est bête.
Voici ce que j'ai mis et cela fonctionne. Je vais mettre comme résolu après ça.
Merci pour votre aide.
J'avais juste un peu peur de mettre mes requêtes dans un foreach, je sais c'est bête.
Voici ce que j'ai mis et cela fonctionne. Je vais mettre comme résolu après ça.
Merci pour votre aide.
if ($_POST['btn_theme']) { $article = !empty($_POST['article']) ? $_POST['article'] : NULL; if(!empty($article)) { foreach($article as $keyArticle => $valueArticle ){ // ici le traitement.... // par exemple $sql_nouvelle_solution = "INSERT INTO article_theme (article_id, theme_id) VALUE (?,?)"; $nouvelle_solution = $pdo->prepare($sql_nouvelle_solution)->execute([$valueArticle,$_POST['theme']]); } } }