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
    149
    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 : 149
    Points : 71
    Points
    71

    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 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : développeur

    Informations forums :
    Inscription : octobre 2013
    Messages : 1 154
    Points : 1 408
    Points
    1 408

    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
    149
    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 : 149
    Points : 71
    Points
    71

    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
    149
    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 : 149
    Points : 71
    Points
    71

    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 : 21
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 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : développeur

    Informations forums :
    Inscription : octobre 2013
    Messages : 1 154
    Points : 1 408
    Points
    1 408

    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?

Discussions similaires

  1. ré-affichage checkbox depuis bdd
    Par nicomax34 dans le forum Formulaires
    Réponses: 6
    Dernier message: 12/07/2011, 18h47
  2. Update BDD SQL depuis BDD SQL
    Par dark_botsay dans le forum Langage SQL
    Réponses: 3
    Dernier message: 04/08/2010, 16h03
  3. Probleme récupération image bdd pour affichage
    Par kakahn dans le forum Struts 1
    Réponses: 6
    Dernier message: 03/01/2008, 20h47
  4. Réponses: 2
    Dernier message: 17/10/2007, 13h29
  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, 10h52

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