Page 1 sur 1

Checkbox + modifications

Posté : 27 févr. 2015, 19:43
par PortgasDKiba
Bonjour,

je suis confronté à un problème en essayant de modifier des infos dans un formulaire.

La question, c'est donc comment faire pour afficher mes checkbox en coché quand ils sont renseignés dans ma base.

Etape 1 : Je fais une requête sur ma table examens qui contient tous les examens et je fais une boucle pour récupérer tous les idexamens.
Etape 2 : Je fais une requête sur ma table examens_per_dossiers qui contient les examens préalablement renseignés dans le formulaire global (celui dont on a parlé plus haut).
Etape 3 : Je fais une condition si l'idexamen de ma table examens existe dans ma table examens_per_dossiers alors je rajoute l'attribut checked

Mais ça ne marche pas... Une idée ?

Merci à vous
$_queryCheckExamens = $connexion->query("SELECT *
                        FROM examens_per_dossiers EPD
                        LEFT JOIN examens E
                        ON EPD.epd_examensid = E.ex_id
                        WHERE epd_dossiersid = $ad_id
                        ORDER BY epd_examensid ASC");
                $rows = $_queryCheckExamens->fetchAll();
                foreach($rows as $row) {
                        $_checkedExamens = $row['epd_examensid'];
                }
                $_querySelectExamens = $connexion->query("SELECT *
                        FROM examens
                        WHERE ex_actif = 1
                        ORDER BY ex_ordre DESC");
                $rows = $_querySelectExamens->fetchAll();
                foreach($rows as $row) {
                        echo '
                        <tr>
                        <td><input type="checkbox" name="examens[]" value="'. $row['ex_id'].'" '; if($row['ex_id'] == $_checkedExamens) { echo 'checked'; } echo '> <label class="forcheckbox">'. utf8e($row['ex_nom']) .'</label></td>
                        <td><input type="text" name="comments_'. $row['ex_id'] .'"></td>
                        </tr>';
                }

Re: Checkbox + modifications

Posté : 27 févr. 2015, 19:52
par tof73
foreach($rows as $row) {
$_checkedExamens = $row['epd_examensid'];
}

$_checkedExamens vaut, après la boucle, la dernière valeur de $row['epd_examensid'].
ce qu'il faut faire, c'est tester si l'id est dans le tableau $_queryCheckExamens->fetchAll() avec http://php.net/manual/fr/function.in-array.php par exemple.

Re: Checkbox + modifications

Posté : 27 févr. 2015, 20:11
par PortgasDKiba
Bonjour tof73 et merci pour ta réponse :)

Toutefois je ne comprends pas trop comment modéliser ce que tu me dis...

Re: Checkbox + modifications

Posté : 02 mars 2015, 11:51
par PortgasDKiba
Un petit up ! Si quelqu'un peut me venir en aide :)

Re: Checkbox + modifications

Posté : 02 mars 2015, 15:03
par yann18
on peut faire encore plus simple en faisant qu'une seule requête.Tu récupères par une jointure à droite, entre la table examens_per_dossiers et examens, tous les examens actifs de la table examens.Les examens qui ne sont pas dans la table examens_per_dossiers retourneront NULL.Pour afficher les examens pré-cochés, il suffit de vérifier alors que l'id(ex_id) de la table examens n'est pas NULL:
$_querySelectExamens = $connexion->query(
"SELECT *
                FROM examens_per_dossiers EPD
                RIGHT JOIN examens E
                ON EPD.epd_examensid = E.ex_id
                WHERE epd_dossiersid = $ad_id
		and ex_actif = 1
                ORDER BY ex_ordre DESC"
         );
                $rows = $_querySelectExamens->fetchAll();
                foreach($rows as $row) {
                        echo '
                        <tr>
                        <td><input type="checkbox" name="examens[]" value="'. $row['ex_id'].'" '; if(!empty($row['ex_id'] )) { echo 'checked'; } echo '> <label class="forcheckbox">'. utf8e($row['ex_nom']) .'</label></td>
                        <td><input type="text" name="comments_'. $row['ex_id'] .'"></td>
                        </tr>';
                }

Re: Checkbox + modifications

Posté : 02 mars 2015, 15:10
par PortgasDKiba
Bonjour yann18,

Ta proposition est tout à fait à l'attendue et je t'en remercie, toutefois, je n'affiche du coup plus que les deux examens qui ont été coché (dans l'exemple que j'ai fait) et non pas toute la liste d'examens qui existent en base (il existe aujourd'hui 10 examens pour autant de champs commentaires).

Du coup je coinçe toujours :)

Re: Checkbox + modifications

Posté : 02 mars 2015, 16:35
par yann18
pour afficher toute la liste d'examens
la liste d'examens provient-elle de la table examens)? si c'est le cas, il faut écrire cette requête :
$_querySelectExamens = $connexion->query(
"SELECT *
                FROM examens_per_dossiers EPD
                RIGHT JOIN examens E
                ON EPD.epd_examensid = E.ex_id
                WHERE epd_dossiersid = $ad_id
                ORDER BY ex_ordre DESC"
         );
                $rows = $_querySelectExamens->fetchAll();
                foreach($rows as $row) {
                        echo '
                        <tr>
                        <td><input type="checkbox" name="examens[]" value="'. $row['ex_id'].'" '; if(!empty($row['epd_examensid'] ) && $row['ex_actif ']==1) { echo 'checked'; } echo '> <label class="forcheckbox">'. utf8e($row['ex_nom']) .'</label></td>
                        <td><input type="text" name="comments_'. $row['ex_id'] .'"></td>
                        </tr>';
                }
Après j'ai pas connaissance de la structure exacte de tes tables ni de la signification de certains champs(comme ex_actif) pour me faire une idée de ce dont tu souhaites obtenir

Re: Checkbox + modifications

Posté : 02 mars 2015, 16:56
par PortgasDKiba
yann18,

merci pour ta réponse.

examens contient la liste de tous les examens.
examens_per_dossiers contient la liste des examens qui ont été sélectionné par dossier et les commentaires qui vont pour chaque examen.

ex_actif correspond à l'activation ou non de l'examen dans le front office. 1 = oui 0 = non

J'ai mis un exemple ici, avec dans un premier temps tous les examens et dans un second temps les examens uniquement sélectionnés en base

Re: Checkbox + modifications

Posté : 03 mars 2015, 10:04
par PortgasDKiba
Up !

J'ai un peu avancé mais le résultat n'est toujours pas à l'attendu...

Je fais un petit récapitulatif de mes deux tables :

Image

Et mon code :

Code : Tout sélectionner

<?php $_listAllExamens = array(); $_queryCheckExamens = $connexion->query("SELECT * FROM bsv_examens_per_dossiers EPD RIGHT JOIN bsv_examens E ON EPD.epd_examensid = E.ex_id WHERE (EPD.epd_dossiersid = $ad_id OR EPD.epd_dossiersid IS NULL) AND E.ex_actif = 1 ORDER BY E.ex_ordre DESC"); $rows = $_queryCheckExamens->fetchAll(); foreach($rows as $row) { $_listAllExamens[] = $row['epd_examensid']; $epd_comments = utf8e($row['epd_comments']); if(in_array($row['ex_id'], $_listAllExamens)) { $checked = 'checked'; } else { $checked = ''; } ?> <tr> <td><input type="checkbox" name="examens[]" value="<?php echo $row['ex_id']; ?>" <?php echo $checked; ?>> <label class="forcheckbox"><?php echo utf8e($row['ex_nom']); ?></label></td> <td><input type="text" name="comments_<?php echo $row['ex_id']; ?>" value="<?php echo isset($epd_comments) ? $epd_comments : ''; ?>"></td> </tr> <?php } ?>
Le rendu de ma requête :

Image

Il manque donc quelques examens... mais c'est presque ça !

Re: Checkbox + modifications

Posté : 03 mars 2015, 12:44
par yann18
le code de ton dernier post comme les précédents semblent répondre à ton problème c-a-d afficher la liste de tous les examens et pré-cocher les examens sélectionnés.
Qu'est-ce qui ne marche pas?y-a-t-il des erreurs affichées?

Re: Checkbox + modifications

Posté : 03 mars 2015, 14:55
par PortgasDKiba
Edit : Autant pour moi, je dis une bêtise, je pense que j'avais un problème de cache... :)

Toujours dans cette problématique de modification de données, j'aimerai donc savoir comment faire pour ajouter / modifier ou supprimer un examen...

Je suis donc en mode édition, j'ai mes 12 examens et ceux qui sont déjà renseignés ont l'attribut checkbox et le commentaire si il est renseigné.

En admettant que je veuille rajouter un commentaire, ou décocher un examen et en recocher un autre... Comment puis-je faire pour vérifier cela et ensuite executer ma requête d'UPDATE ou de DELETE sur ma table bsv_examens_per_dossiers ?

On m'a parlé de faire un array_diff ?

Exemple ici

J'ai mis un var_dump($_POST);