Mettre a jour table mysql temporaire avec checkbox
Résolu
christian82000
Messages postés
47
Date d'inscription
Statut
Membre
Dernière intervention
-
christian82000 Messages postés 47 Date d'inscription Statut Membre Dernière intervention -
christian82000 Messages postés 47 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Dans le but de sélectionner les participants à une action de mon association, je crée une table temporaire à partir de la table des adhérents. Cette table contient un champ Selection qui devrait être mis à jour à l'aide d'un formulaire contenant une checkbox. Ensuite, je crée une table définitive en sélectionnant les lignes cochées.
La création de la table temporaire ne pose pas de problèmes. En revanche, la mise a jour de cette table ne semble pas fonctionner, dans la mesure où la table définitive reprend l'ensemble des adhérents, cochés ou non.
Voici mon code :
EDIT : Correction des balises de code
Je pense que s'est dans la mise à jour de la table temporaire que se situe l'erreur. Merci par avance à celles ou ceux qui voudront bien s'intéresser à mon problème.
Christian
Dans le but de sélectionner les participants à une action de mon association, je crée une table temporaire à partir de la table des adhérents. Cette table contient un champ Selection qui devrait être mis à jour à l'aide d'un formulaire contenant une checkbox. Ensuite, je crée une table définitive en sélectionnant les lignes cochées.
La création de la table temporaire ne pose pas de problèmes. En revanche, la mise a jour de cette table ne semble pas fonctionner, dans la mesure où la table définitive reprend l'ensemble des adhérents, cochés ou non.
Voici mon code :
<?php //Connexion à la base de données //on crée une table temporaire permettant de sélectionner les participants à une formation $sql = 'CREATE TEMPORARY TABLE ce_copie SELECT * FROM ce'; $bdd->exec($sql); //on affiche la liste des adhérents permettant de cocher les participants ?> <h3>Liste des adhérents</h3> <form action="ParticipantsFormations.php" method="POST"> <table> <tr> <th>Index_ce</th> <th>Nom</th> <th>Prenom</th> <th>Courriel</th> <th>Selection</th> </tr> <?php $sql2 = 'SELECT * FROM ce_copie ORDER BY Nom'; foreach ($bdd->query($sql2) as $row) { ?> <tr> <td> <input name="Index_ce[]" type="texte" value="<?php echo $row['Index_ce']; ?>" </td> <td> <input name="Nom[]" type="texte" value="<?php echo $row['Nom']; ?>" </td> <td> <input name="Prenom[]" type="texte" value="<?php echo $row['Prenom']; ?>" </td> <td> <input name="Courriel[]" type="texte" value="<?php echo $row['Courriel']; ?>" </td> <td> <input name="Selection[]" type="checkbox"</td> </tr> <?php } ?> </table> <br> <!-- On met à jour la table "ce_copie" pour pouvoir sélectionner les ce inscrits--> <input type="submit" name="updateur" value="Sélectionner"> </form> <br> <?php print_r($_POST['Selection']); //affichage si trois lignes cochées: Array ( [0] => on [1] => on [2] => on ) print_r($selection=(!empty($_POST['Selection']) ? 1 : 0)); //affichage : 1 $update = $bdd -> prepare('UPDATE ce_copie SET Selection = :selection'); foreach(explode($selection) as $selections) { $update -> execute(array('selection' => $selections)); } //créer la table définitive des inscrits $participants = 'CREATE TABLE Formation20mai2018 SELECT * FROM ce_copie WHERE Selection = 1'; $bdd -> exec($participants); //affichage des inscrits : $sql3 = 'SELECT * FROM Formation20mai2018 ORDER BY Nom'; ?> <table> <tr> <th>Index_ce</th> <th>Nom</th> <th>Prenom</th> <th>Courriel</th> <th>Selection</th> </tr> <?php foreach($bdd->query($sql3) as $row3) { ?> <tr> <td> <?php echo $row3['Index_ce']; ?> </td> <td> <?php echo $row3['Nom']; ?> </td> <td> <?php echo $row3['Prenom']; ?> </td> <td> <?php echo $row3['Courriel']; ?> </td> <td> <?php echo $row3['Selection']; ?> </td> </tr> <?php } ?> </table> <br> <?php
EDIT : Correction des balises de code
Je pense que s'est dans la mise à jour de la table temporaire que se situe l'erreur. Merci par avance à celles ou ceux qui voudront bien s'intéresser à mon problème.
Christian
A voir également:
- Mettre a jour table mysql temporaire avec checkbox
- Table ascii - Guide
- Mettre a jour chrome - Accueil - Applications & Logiciels
- Table des matières word - Guide
- Mise a jour windows 10 - Accueil - Mise à jour
- Mettre a jour chromecast - Accueil - Guide TV et vidéo
2 réponses
yg_be
Messages postés
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 584
bonsoir, j'ai l'impression que ton formulaire comporte des champs "input" superflus: il me semble que Index_ce[] et Selection[] suffisent amplement.
je traiterais la réponse ainsi:
je traiterais la réponse ainsi:
$update = $bdd -> prepare('UPDATE ce_copie SET Selection = true WHERE Index_ce = :index '); $selections = $_POST['Selection']; $indexes = $_POST['Index_ce']; foreach ($selections as $cle=>$selection){ if ($selection){ $index = $indexes[$cle]; $update -> execute(array('index' => $index)); } }et je suppose que le champ Selection est partout faux dans la table ce.
Et au passage ... vu que tu sembles travailler en PDO ... il faut que tu actives la gestion des erreurs PDO et que tu places CHAQUE requête dans un bloc TRY/CATCH
Voir ici : https://forums.commentcamarche.net/forum/affich-37584941-php-pdo-gerer-les-erreurs
.
S'agissant d'une table temporaire, elle n'apparait pas dans phpMyAdmin. Comment faire en manuel?
Pour les try/catch, ok...
Dans mon idée, le champ sélection est vide dans la table ce_copie avant sa mise à jour, il prend la valeur de 1 ou de 0 après la mise à jour ($selection=(!empty($_POST['Selection']) ? 1 : 0)). Mais il peut être mis à 0 par défaut, ou à false...
Je vérifie ta proposition en fin de soirée, et je te tiens au courant.
Apparemment, on avance!
Voilà, j'ai mis la valeur par défaut du champ Selection = 0 et repris ta proposition de code. Or, la correspondance entre 'Index_ce' et 'Selection' ne se fait pas. En effet, si je coche 5 lignes au hasard, je récupère les 5 premières lignes de la table, si j'en coche 3, je récupère 3 premières lignes, etc (dans ma version, on récupérait toutes les lignes!).
Un avis?