Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

  1. #1
    Membre régulier
    Femme Profil pro
    Inscrit en
    juillet 2012
    Messages
    161
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Secteur : Service public

    Informations forums :
    Inscription : juillet 2012
    Messages : 161
    Points : 73
    Points
    73

    Par défaut ré-affichage checkboxs depuis bdd pour update

    Bonsoir,
    Je bloque depuis pas mal de temps sur un problème. J'ai beaucoup cherché et ai tenté, sans succès, la solution de la discussion sur ce même forum : https://www.developpez.net/forums/d1...-checkbox-bdd/

    Ce qui fonctionne :
    J'ai un formulaire avec des checkbox. On peut en choisir plusieurs.
    Les choix sont enregistrés en bdd dans une table associative.
    Les utilisateurs souhaitent avoir la possibilité de pouvoir modifier le ou les choix.

    Ce qui ne fonctionne pas :
    J'arrive bien à récupérer les infos de la bdd. Mais je voudrais, dans le formulaire de modification, réafficher toutes les checkboxs et que celles qui ont été sélectionnées initialement soient cochées.
    Ensuite je ferai un update.
    Avec le code ci-dessous, toutes les checkboxs sont cochées alors que seulement 2 devraient l'être.

    Mon code (d'après la discussion précitée) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    <?php
    $base = include 'include/connect.inc.php';
    $resultat = $base->query('
    SELECT atm.`ID_texte`, atm.`ID_metal`, m.`ID_metal`, m.`nom_metal` 
    FROM AS_TEXTE_METAL atm, METAL m
    WHERE atm.`ID_metal` = m.`ID_metal`
    AND atm.`ID_texte` = "'.$_SESSION['ID_texte'].'"
    ') or die($mysqli->error.__LINE__);			
     
    while($row = $resultat->fetch())  { $arr[] = $row; } 
     
    // transformation de la chaîne en tableau
    $metal_array = explode(',', $row['nom_metal']);
     
    foreach($metal_array as $valeur) {
    ?>
     
    <?php if (in_array("$metal_array[0]", $metal_array)) { $check = "checked"; } else { $check = ''; } ?> <input name="metal[]" type="checkbox" value="1" <?php echo $check; ?> />
    	argent
        &nbsp;&nbsp;&nbsp;
     
    <?php if (in_array("$metal_array[1]", $metal_array)) { $check = "checked"; } else { $check = ''; } ?> <input name="metal[]" type="checkbox" value="2" <?php echo $check; ?> />
    	bronze
        &nbsp;&nbsp;&nbsp;
     
    <?php if (in_array("$metal_array[2]", $metal_array)) { $check = "checked"; } else { $check = ''; } ?> <input name="metal[]" type="checkbox" value="5" <?php echo $check; ?> />
    	cuivre
        &nbsp;&nbsp;&nbsp;
     
    <?php if (in_array("$metal_array[3]", $metal_array)) { $check = "checked"; } else { $check = ''; } ?> <input name="metal[]" type="checkbox" value="8" <?php echo $check; ?> />
    	étain
        &nbsp;&nbsp;&nbsp;
     
    <?php if (in_array("$metal_array[4]", $metal_array)) { $check = "checked"; } else { $check = ''; } ?> <input name="metal[]" type="checkbox" value="9" <?php echo $check; ?> />
    	fer
        &nbsp;&nbsp;&nbsp;
     
    <?php if (in_array("$metal_array[5]", $metal_array)) { $check = "checked"; } else { $check = ''; } ?> <input name="metal[]" type="checkbox" value="10" <?php echo $check; ?> />
    	or
        &nbsp;&nbsp;&nbsp;
     
    <?php if (in_array("$metal_array[6]", $metal_array)) { $check = "checked"; } else { $check = ''; } ?> <input name="metal[]" type="checkbox" value="11" <?php echo $check; ?> />
    	plomb
        &nbsp;&nbsp;&nbsp;
     
    <?php if (in_array("$metal_array[7]", $metal_array)) { $check = "checked"; } else { $check = ''; } ?> <input name="metal[]" type="checkbox" value="12" <?php echo $check; ?> />
    	autre
        &nbsp;&nbsp;&nbsp;
     
    <?php 
    }
    ?>

  2. #2
    Membre expérimenté

    Homme Profil pro
    développeur
    Inscrit en
    octobre 2013
    Messages
    1 224
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : développeur

    Informations forums :
    Inscription : octobre 2013
    Messages : 1 224
    Points : 1 505
    Points
    1 505

    Par défaut

    Salut,

    Il-y a plusieurs choses que je ne comprends pas.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    foreach($metal_array as $valeur) {
    Pourquoi faire un foreach sur tes enregistrement si tu n’utilises ta variable $valeur nulle part?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while($row = $resultat->fetch()) { $arr[] = $row; }
    Ici même chose tu n'utilises $arr nulle part?

    Bon est là
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (in_array("$metal_array[0]", $metal_array)) { $check = "checked"; } else { $check = ''; }
    Tu dis est-ce que l'élément 1 de mon tableau toto est dans mon tableau toto, réponse oui c'est le même tableau Puisque tu demandes à chaque fois si l'élément de ton tableau est dans ton tableau cela retourne true à chaque fois.

    Tu dis que cela est dans une table associatif, mais je ne vois pas de jointure? Comment détectes tu qu'une checkbox est coché?
    Peut-on voir la structure de tes tables?

  3. #3
    Membre régulier
    Femme Profil pro
    Inscrit en
    juillet 2012
    Messages
    161
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Secteur : Service public

    Informations forums :
    Inscription : juillet 2012
    Messages : 161
    Points : 73
    Points
    73

    Par défaut

    Bonjour kevin254kl,
    Merci d'avoir regardé mon code que je reprends avec tes remarques.
    Je reviens poster le résultat ensuite.
    Très bonne journée,
    Evelyne31

  4. #4
    Membre régulier
    Femme Profil pro
    Inscrit en
    juillet 2012
    Messages
    161
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Secteur : Service public

    Informations forums :
    Inscription : juillet 2012
    Messages : 161
    Points : 73
    Points
    73

    Par défaut

    Bonsoir,
    J’ai compris mes erreurs concernant les 2 variables $valeur et $ arr qui ne servent à rien et rectifié mon code. Mais je n’arrive toujours pas au résultat souhaité.

    Je travaille sur une bdd existante de textes qui parlent (entre autres choses) d’un ou de plusieurs métaux.

    La bdd est alimentée par un formulaire. Pour chaque métal cité, une checkbox est cochée.
    Une association est créée en bdd dans une table associative qui enregistre l’ID du texte et l’ID du métal. Je transmets une copie d’écran de ma table associative.

    Nom : structure_table_associative.png
Affichages : 45
Taille : 123,7 Ko

    J’arrive à récupérer le-les métal-aux pour un texte et à les afficher à la suite, en ligne, séparés par un « ; » avec un foreach.

    Mais je voudrais que tous les métaux possibles s’affichent comme dans le formulaire initial sous forme de checkboxs et que pour les métaux enregistrés en bdd, elles soient cochées. Ceci afin de pouvoir modifier éventuellement ses choix.

    Voilà où j’en suis :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    <?php
    $base = include 'include/connect.inc.php';
    $resultat = $base->query('
    SELECT atm.`ID_texte`, atm.`ID_metal`, m.`ID_metal`, m.`nom_metal` 
    FROM AS_TEXTE_METAL atm, METAL m
    WHERE atm.`ID_metal` = m.`ID_metal`
    AND atm.`ID_texte` = "'.$_SESSION['ID_texte'].'"
    ') or die($mysqli->error.__LINE__);			
     
    while($row = $resultat->fetch()) 
     
    	var_dump ($row['nom_metal']);	
     
    $metal_array = explode(',', $row['nom_metal']);
     
    	var_dump ($metal_array);
    ?>
    var_dump ($row['nom_metal']); affiche string(6) "argent" string(6) "bronze"
    Il s’agit bien des 2 métaux enregistrés.

    var_dump ($metal_array); affiche array(1) { [0]=> string(0) "" }

    Je suis encore loin de ce que je souhaiterais. Si quelqu’un pouvait me conseiller ? Merci par avance.

    Evelyne31

  5. #5
    Membre expérimenté

    Homme Profil pro
    développeur
    Inscrit en
    octobre 2013
    Messages
    1 224
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : développeur

    Informations forums :
    Inscription : octobre 2013
    Messages : 1 224
    Points : 1 505
    Points
    1 505

    Par défaut

    Tu veux que tous les métaux s'affiche? Il te faut un select sur la table sans where.
    Tu veux pour chaque métal savoir si il est coché? ou est l'information dans quel table?

  6. #6
    Membre régulier
    Femme Profil pro
    Inscrit en
    juillet 2012
    Messages
    161
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Secteur : Service public

    Informations forums :
    Inscription : juillet 2012
    Messages : 161
    Points : 73
    Points
    73

    Par défaut

    Bonjour kevin254kl
    Merci pour ta nouvelle réponse.

    1°) Je comprends pour l’affichage de tous les métaux.

    2°) Pour savoir ceux qui sont cochés, l’information est dans la table associative AS_TEXTE_METAL.
    L’entrée principale de la bdd ce sont les textes avec chacun un ID.
    Donc, pour un ID_texte donné, il y a un ou plusieurs ID_metal associés dans la table associative.
    Par ex. (copie d’écran jointe), pour le texte ID n° 263, il y a les métaux ID 1 et 2 associés.
    Nom : texte_metal.png
Affichages : 27
Taille : 11,4 Ko

    Donc, ce que je souhaiterais, dans le formulaire de modification qui concerne par ex. le texte ID_ n° 263, pouvoir demander quelque chose comme : si l’association ID_texte n° 263 et ID_metal n° 1 existe la case «*argent*» doit être cochée ; si c’est ID_metal n° 2 c’est «*bronze*»…

    Mais je n’arrive pas à écrire tout cela mais je continue à chercher.
    Bon après-midi,
    Evelyne31

  7. #7
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA & Dev PHP
    Inscrit en
    juin 2005
    Messages
    4 914
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA & Dev PHP
    Secteur : Service public

    Informations forums :
    Inscription : juin 2005
    Messages : 4 914
    Points : 11 000
    Points
    11 000

    Par défaut

    On peux avoir un dump de la db, car là c'est tout sauf clair ?

  8. #8
    Membre régulier
    Femme Profil pro
    Inscrit en
    juillet 2012
    Messages
    161
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Secteur : Service public

    Informations forums :
    Inscription : juillet 2012
    Messages : 161
    Points : 73
    Points
    73

    Par défaut

    Bonjour,
    Merci MaitrePylos pour ta réponse. Je suis désolée de ne pas être claire.
    J'ai réalisé une bdd qui est alimentée par un formulaire php en ligne.
    Maintenant je réalise un formulaire pour permettre de modifier ce qu'on a inséré en bdd, c'est classique.
    Tout va bien sauf pour les cases à cocher sur lesquelles je cale depuis un bon moment.
    Merci par avance si tu avais des conseils pour me permettre d'avancer.
    Je joins un fichier sql des tables concernées et précise que dans la table TEXTE toutes les lignes ont un index en prévision d'une recherche fulltext, mais ça c'est pour plus tard.
    Très bonne journée.
    Evelyne 31
    Fichiers attachés Fichiers attachés

  9. #9
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA & Dev PHP
    Inscrit en
    juin 2005
    Messages
    4 914
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA & Dev PHP
    Secteur : Service public

    Informations forums :
    Inscription : juin 2005
    Messages : 4 914
    Points : 11 000
    Points
    11 000

    Par défaut

    C'est ceci que tu cherches à faire (si je comprend la demande)

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
     
    select txt.ID_texte,txt.identification,met.nom_metal 
    from TEXTE as txt
    inner join AS_TEXTE_METAL as astxt
    	on astxt.ID_texte = txt.ID_texte
    inner join METAL as met
     	on met.ID_metal = astxt.ID_metal

  10. #10
    Membre régulier
    Femme Profil pro
    Inscrit en
    juillet 2012
    Messages
    161
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Secteur : Service public

    Informations forums :
    Inscription : juillet 2012
    Messages : 161
    Points : 73
    Points
    73

    Par défaut

    Oui, merci MaitrePylos, c'est presque ça. J'étais arrivée à sélectionner les infos de la bdd mais ma requête était moins pro que la tienne, donc je la retiens. Mais je ne souhaite les infos que pour un texte, donc j'ajouterai :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WHERE `ID_texte` = "'.$_SESSION['ID_texte'].'"
    Ce qui me pose problème c'est qu'ensuite je voudrais que ces infos s'affichent dans mon formulaire de modification afin de pouvoir éventuellement modifier ou pas. Par ex. pour le texte n° 301, les métaux cuivre et or sont associés. Donc, l'affichage serait comme sur l'exemple ci-joint et on pourrait décocher/cocher selon nos souhaits de modification. Ensuite, je ferai un UPDATE. C'est juste cet affichage que je n'arrive pas à faire.
    Nom : Capture d’écran 2019-03-22 à 13.38.39.png
Affichages : 15
Taille : 9,3 Ko
    Merci par avance.
    Evelyne 31

  11. #11
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA & Dev PHP
    Inscrit en
    juin 2005
    Messages
    4 914
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA & Dev PHP
    Secteur : Service public

    Informations forums :
    Inscription : juin 2005
    Messages : 4 914
    Points : 11 000
    Points
    11 000

    Par défaut

    Bon je vais le dire comme je le pense, mais ta db est mal conceptualisé et cela va donc à chaque fois compliqué.

    Tu me montres comment tu fais tes checkbox , pour que j'adapte ton code ?

  12. #12
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA & Dev PHP
    Inscrit en
    juin 2005
    Messages
    4 914
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA & Dev PHP
    Secteur : Service public

    Informations forums :
    Inscription : juin 2005
    Messages : 4 914
    Points : 11 000
    Points
    11 000

    Par défaut

    En fait non voici, comment tu dois faire....tout cela est perfectible :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
     
    <?php
    $pdo = new PDO('connection à ma db');
     
    $sql = " 
            select met.nom_metal 
            from TEXTE as txt
            inner join AS_TEXTE_METAL as astxt
                on astxt.ID_texte = txt.ID_texte
            inner join METAL as met
                on met.ID_metal = astxt.ID_metal
            where txt.ID_texte = ? ";
     
    $stm = $pdo->prepare($sql);
    $stm->execute([$_SESSION['ID_texte']]);
    $r = $stm->fetchAll(PDO::FETCH_ASSOC);
    $metal = [];
    foreach ($r as $value){
        $metal[] = $value;
    }
     
    //partie html
     
    ?>
     
    <input type="checkbox" value="argent" <?php (in_array('argent',$metal))?'checked':'';?> >
    <input type="checkbox" value="bronze" <?php (in_array('bronze',$metal))?'checked':'';?> >
    <input type="checkbox" value="cuivre" <?php (in_array('cuivre',$metal))?'checked':'';?> >
    <input type="checkbox" value="etain" <?php (in_array('etain',$metal))?'checked':'';?> >
    <input type="checkbox" value="fer" <?php (in_array('fer',$metal))?'checked':'';?> >
    <input type="checkbox" value="or" <?php (in_array('or',$metal))?'checked':'';?> >
    <input type="checkbox" value="plomb" <?php (in_array('plomb',$metal))?'checked':'';?> >
    <input type="checkbox" value="autre" <?php (in_array('autre',$metal))?'checked':'';?> >

  13. #13
    Membre régulier
    Femme Profil pro
    Inscrit en
    juillet 2012
    Messages
    161
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Secteur : Service public

    Informations forums :
    Inscription : juillet 2012
    Messages : 161
    Points : 73
    Points
    73

    Par défaut

    Merci à nouveau MaitrePylos.
    Je viens de tester rapidement, apparemment il y a un souci de connexion à la bdd.
    Mais j'ai testé la requête directement dans Phpmyadmin et c'est OK.
    Mon fichier de connexion a été fait avec l'aide de ce forum et du tuto "PDO une soupe et au lit" et ça fonctionne très bien normalement.
    Donc je pense que le problème n'est pas grave et que je vais pouvoir me débrouiller. Je teste et reviens donner le résultat dès que possible.
    Bon après-midi,
    Evelyne31

    PS : si tu as un conseil à me donner pour améliorer la conception de cette partie de ma bdd je suis preneuse.

  14. #14
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA & Dev PHP
    Inscrit en
    juin 2005
    Messages
    4 914
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA & Dev PHP
    Secteur : Service public

    Informations forums :
    Inscription : juin 2005
    Messages : 4 914
    Points : 11 000
    Points
    11 000

    Par défaut

    Montre ton souci a ta db ?

  15. #15
    Rédacteur/Modérateur
    Avatar de jreaux62
    Homme Profil pro
    Webdesigner
    Inscrit en
    août 2008
    Messages
    14 475
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Webdesigner
    Secteur : Arts - Culture

    Informations forums :
    Inscription : août 2008
    Messages : 14 475
    Points : 29 288
    Points
    29 288

    Par défaut

    Bonjour Evelyne ("le retour !" )

    Je ne suis pas d'accord avec MaitrePylos.

    On NE peut PAS utiliser ]"... inner join AS_TEXTE_METAL...", car, si AUCUNE checkbox n'est cochée, alors on n'aura AUCUN résultat.

    Donc,
    1. SOIT on fait effectivement DEUX requêtes distinctes,
    2. SOIT il faut utiliser "... LEFT JOIN AS_TEXTE_METAL...".
    "Si tu suis le chemin qui s'appelle « plus tard », tu arriveras à la place qui s'appelle « jamais »."
    François Camille Prévot (1910-1996), instituteur puis Directeur d'école et... mon grand-père.
    "Pose ta question, tu seras idiot une seconde. Ne la pose pas, tu seras idiot toute ta vie."
    Albert Einstein (1879-1955).
    Mes tutos DVP
    Gestion-Affichage de Nouvelles
    Affichage en tableau HTML
    Fonctions de redimensionnement d'images

  16. #16
    Membre régulier
    Femme Profil pro
    Inscrit en
    juillet 2012
    Messages
    161
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Secteur : Service public

    Informations forums :
    Inscription : juillet 2012
    Messages : 161
    Points : 73
    Points
    73

    Par défaut

    Bonjour jreaux62 et merci MaitrePylos,
    Et oui, c'est le retour avec toujours mes problèmes tordus et mal ficelés

    En fait il ne s'affiche que 8 checkboxs vides et dans mon fichier php_error.log je n'ai pas d'erreur.
    Voici une copie d'écran plus parlante.
    Nom : Capture d’écran 2019-03-22 à 15.03.19.png
Affichages : 17
Taille : 8,0 Ko
    Dans le code de MaitrePylos j'ai juste changé $PDO par $base ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $stm = $base->prepare($sql);
    car voici la 1ère ligne de mon fichier de connexion :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $base = new PDO('mysql:host=localhost; ...
    et bien sûr j'ai supprimé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $pdo = new PDO('connection à ma db');
    Pour inner et left, je vais tester.
    A +
    Evelyne31

  17. #17
    Rédacteur/Modérateur
    Avatar de jreaux62
    Homme Profil pro
    Webdesigner
    Inscrit en
    août 2008
    Messages
    14 475
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Webdesigner
    Secteur : Arts - Culture

    Informations forums :
    Inscription : août 2008
    Messages : 14 475
    Points : 29 288
    Points
    29 288

    Par défaut

    Solution 1 (DEUX requêtes distinctes) :

    1- création d'un array des ID_metal cochés
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    <?php
    // recherche : array des checkbox cochée pour cet ID_texte
    $resultat = $base->prepare("
    	SELECT atm.ID_metal
    	FROM AS_TEXTE_METAL atm
    	INNER JOIN TEXTE t 
    	  ON t.ID_texte = atm.ID_texte
    	INNER JOIN METAL m 
    	  ON m.ID_metal = atm.ID_metal
    	WHERE atm.ID_texte = :ID_texte
    	") or die($dbh->errorInfo());			
    $resultat->execute([':ID_texte'=>$_SESSION['ID_texte']]);
     
    $array_IDs_metal = [];
    while($row = $resultat->fetch())
    {
    	$array_IDs_metal[] = $row['ID_metal']);	
    }
    var_dump ($array_IDs_metal);
    ?>
    2- Ensuite, lors de l'affichage des checkbox, on vérifie si l'ID_metal est inclus dans $array_IDs_metal :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <?php
    // -----------------
    // affichage : toute les checkbox
    $resultat2 = $base->query('
    	SELECT m.`ID_metal`, m.`NOM_metal` 
    	FROM METAL m
    	ORDER BY m.`NOM_metal`
    ') or die($dbh->errorInfo());
     
    while($row2 = $resultat2->fetch())
    {
    	$checked = ( in_array($row2['ID_metal'], $array_IDs_metal) )? ' checked="checked"' : ''; // cochée ?
    	echo '<label><input type="checkbox" name="metal[]" value="' . $row2['ID_metal'] . '"'.$checked.'/> '.$row2['NOM_metal'].'</label>'."\n";
    }

    3- TRAITEMENT du formulaire.
    On récupère un array des ID_metal cochés avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $array_IDs_metal = ( isset($_POST['metal']) )? $_POST['metal'] : ''; // array

    4- ENFIN, au moment de l'enregistrement des NOUVELLES VALEURS (NOUVELLES cases cochées ou cochées) :

    -> On NE fait PAS d'UPDATE de AS_TEXTE_METAL !

    1- On DELETE d'abord TOUTES les lignes de AS_TEXTE_METAL avec cet ID_texte ($_SESSION['ID_texte'])
    2- On INSERT les NOUVELLES LIGNES.




    [EDIT] Je viens de voir ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ') or die($mysqli->error.__LINE__);
    Or, tu utilises PDO !
    Tu ne peux pas mélanger avec $mysqli !

    "Si tu suis le chemin qui s'appelle « plus tard », tu arriveras à la place qui s'appelle « jamais »."
    François Camille Prévot (1910-1996), instituteur puis Directeur d'école et... mon grand-père.
    "Pose ta question, tu seras idiot une seconde. Ne la pose pas, tu seras idiot toute ta vie."
    Albert Einstein (1879-1955).
    Mes tutos DVP
    Gestion-Affichage de Nouvelles
    Affichage en tableau HTML
    Fonctions de redimensionnement d'images

  18. #18
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA & Dev PHP
    Inscrit en
    juin 2005
    Messages
    4 914
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA & Dev PHP
    Secteur : Service public

    Informations forums :
    Inscription : juin 2005
    Messages : 4 914
    Points : 11 000
    Points
    11 000

    Par défaut

    @jreaux42 ; j'ai dit que la base est mal ficelé.

    Maintenant si je regarde le DDL, je ne vois pas en quoi ce que je propose n'est pas bon:
    Nom : bdd_metal.png
Affichages : 13
Taille : 14,7 Ko


    Oui, si il n'y a rien dans la table pivot, alors effectivement il n'y a rien et donc aucune checkbox n'est selectionnée.

    Maintenant, si vous chercher à afficher le nom des métaux en plus de ce qui doit-être checké....il faut s'arrêter et reprendre correctement.

    @Evelyne31 que donne


  19. #19
    Rédacteur/Modérateur
    Avatar de jreaux62
    Homme Profil pro
    Webdesigner
    Inscrit en
    août 2008
    Messages
    14 475
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Webdesigner
    Secteur : Arts - Culture

    Informations forums :
    Inscription : août 2008
    Messages : 14 475
    Points : 29 288
    Points
    29 288

    Par défaut

    Citation Envoyé par MaitrePylos Voir le message
    @jreaux42 ; j'ai dit que la base est mal ficelé.
    Non.
    Au contraire. AS_TEXTE_METAL est bien une table de JOINTURE, correctement conçue.

    je ne vois pas en quoi ce que je propose n'est pas bon


    - INNER JOIN est INCLUSIF : il FAUT qu'il y ait (au moins) UNE correspondance dans AS_TEXTE_METAL) == AU MOINS UNE CASE cochée (ce qui n'est pas forcément le cas).
    Si AUCUNE case n'est cochée, on ne récupèrera PAS NON PLUs les données de TEXTE (alors qu'elle existent).

    - Alors qu'avec LEFT JOIN, MEME Si AUCUNE case n'est cochée, on récupèrera QUAND MEME les données de TEXTE.
    "Si tu suis le chemin qui s'appelle « plus tard », tu arriveras à la place qui s'appelle « jamais »."
    François Camille Prévot (1910-1996), instituteur puis Directeur d'école et... mon grand-père.
    "Pose ta question, tu seras idiot une seconde. Ne la pose pas, tu seras idiot toute ta vie."
    Albert Einstein (1879-1955).
    Mes tutos DVP
    Gestion-Affichage de Nouvelles
    Affichage en tableau HTML
    Fonctions de redimensionnement d'images

  20. #20
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA & Dev PHP
    Inscrit en
    juin 2005
    Messages
    4 914
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA & Dev PHP
    Secteur : Service public

    Informations forums :
    Inscription : juin 2005
    Messages : 4 914
    Points : 11 000
    Points
    11 000

    Par défaut

    Sauf qu'on est dans un verrou mortel et effectivement, un texte doit être au minimum lié à un métal....j'imagine que c'est pour ça qu'il y a 'autre' dans métal

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. ré-affichage checkbox depuis bdd
    Par nicomax34 dans le forum Formulaires
    Réponses: 6
    Dernier message: 12/07/2011, 17h47
  2. Update BDD SQL depuis BDD SQL
    Par dark_botsay dans le forum Langage SQL
    Réponses: 3
    Dernier message: 04/08/2010, 15h03
  3. Probleme récupération image bdd pour affichage
    Par kakahn dans le forum Struts 1
    Réponses: 6
    Dernier message: 03/01/2008, 19h47
  4. Réponses: 2
    Dernier message: 17/10/2007, 12h29
  5. [Système] Se passer d'une BDD pour l'affichage de news
    Par Kefass dans le forum Fonctions
    Réponses: 2
    Dernier message: 27/08/2007, 09h52

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo