IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
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

Langage PHP Discussion :

ré-affichage checkbox depuis bdd


Sujet :

Langage PHP

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    161
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 161
    Points : 75
    Points
    75
    Par défaut ré-affichage checkbox depuis bdd
    Salutatous,

    j'ai un 1er fichier comportant un formulaire qui permet d'envoyer dans une bdd des choix à partir de case à cocher (checkbox).

    j'ai un 2e fichier qui permet d'afficher ces choix.

    jusque-là tout se passe bien

    j'ai ensuite un 3e fichier qui doit me permettre de modifier ces choix... et c'est là où je bloque car je n'arrive pas à ré-afficher ces choix dans les checkbox

    code de mon 1er fichier qui permet de cocher les checkbox :

    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 
    	require('traitement.php'); 
    ?>
     
    ... / ...
     
    <strong>PERMIS</strong><br />
          <input type="checkbox" value="Voiture" name="permis[]" <?php if (isset($_POST['permis']) && in_array('Voiture', $_POST['permis'])) echo 'checked="checked"'; ?>  />
          Voiture
    	&nbsp;&nbsp;&nbsp;
        <input type="checkbox" value="Bâteau" name="permis[]" <?php if (isset($_POST['permis']) && in_array('Bâteau', $_POST['permis'])) echo 'checked="checked"'; ?>  />
        B&acirc;teau
    	&nbsp;&nbsp;&nbsp;
        <input type="checkbox" value="Poids lourd" name="permis[]" <?php if (isset($_POST['permis']) && in_array('Poids lourd', $_POST['permis'])) echo 'checked="checked"'; ?>  />
        Poids lourd
    	&nbsp;&nbsp;&nbsp;
        <input type="checkbox" value="Plongée" name="permis[]" <?php if (isset($_POST['permis']) && in_array('Plongée', $_POST['permis'])) echo 'checked="checked"'; ?>  />
    code de mon fichier "traitement.php" qui permet l'enregistrement en base :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    // gestion message erreur si aucune case n'est cochée :
     
    if (!is_array($_POST['permis'])) {
    	$permis_liste = '';
     
    } else {
    	$permis_liste = implode(', ', $_POST['permis']);
    }
     
    // requete SQL
     
    $sql = 'INSERT INTO ma_table VALUES (
    	"'.$permis_liste.'"
    )';
    code de mon 3e fichier qui doit permettre la modification :

    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
    <?php
     
    $requete_sql = "SELECT permis FROM ma_table WHERE login='" . $_SESSION['login'] . "'";
     
    ... / ...
     
    while ( list ( $permis ) = mysql_fetch_array($requete_sql_bis)) {
     
    ?>
     
    ... / ...
     
    	<input type="checkbox" value="Voiture" name="permis[]" <?php if (isset($permis) && in_array('Voiture', $permis)) echo "checked"; ?>  />
          Voiture
    	&nbsp;&nbsp;&nbsp;
        <input type="checkbox" value="Bâteau" name="permis[]" <?php if (isset($permis) && in_array('Bâteau', $permis)) echo "checked"; ?>  />
        B&acirc;teau
    	&nbsp;&nbsp;&nbsp;
        <input type="checkbox" value="Poids lourd" name="permis[]" <?php if (isset($permis) && in_array('Poids lourd', $permis)) echo "checked"; ?>  />
        Poids lourd
    	&nbsp;&nbsp;&nbsp;
        <input type="checkbox" value="Plongée" name="permis[]" <?php if (isset($permis) && in_array('Plongée', $permis)) echo "checked"; ?>  />
     
    ... / ...
    si je fais un echo sur $permis, ça m'affiche bien mes choix comme ceci :
    Voiture, Bâteau, Plongée

    par contre ces choix ne se ré-affiche pas dans les cases à cocher correspondantes et j'ai le message d'erreur suivant :
    Warning: in_array() [function.in-array]: Wrong datatype for second argument in /blablabla/blablabla.php on line ...

    j'ai donc placer ce code juste avant mon formulaire de modification :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $permis = array();
     
    if (is_array($permis)) {
    	var_dump($permis);
    } else {
    	echo '<br /><br />ce n\'est pas un tableau<br /><br />';
    }
    je n'ai plus le message d'erreur
    et ça m'affiche ceci :
    array(0) { }

    par contre mes checkbox ne sont toujours pas cocher de mes choix : Voiture, Bâteau, Plongée

    une aide serait la bienvenue, merci d'avance...

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    182
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 182
    Points : 178
    Points
    178
    Par défaut
    bonjour,
    A première vue je partirai pour ton troisième fichier sur une structure de code plus proche de ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    $sql="SELECT * FROM permis WHERE detenteur=$id"; //ou la requete qui va bien pour tes infos
    $sql=mysql_query($sql);
    while($res=mysql_fetch_assoc($sql)){
    //on prépare la balise html
    $opt="<input type=\"checkbox\" value=\"".$res['name']."\" ";
    //si le permis est detenu on coche la case
     if($res[permis]=='oui')
    $opt.="checked=\"checked\"";
    //on ajoute la fin de balise
    $opt.=">";
    }

  3. #3
    Membre expert
    Avatar de ThomasR
    Homme Profil pro
    Directeur technique
    Inscrit en
    Décembre 2007
    Messages
    2 230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2007
    Messages : 2 230
    Points : 3 972
    Points
    3 972
    Par défaut
    Bonjour,

    tu enregistres tes "permis" sous forme d'une chaine de caractères et non d'un tableau (via la fonction implode), donc tout ceci est normal.

    Voici ce que tu devrais faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    while ( $row = mysql_fetch_array($requete_sql_bis)) {
        $permis = explode(',', $row['permis']);

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    161
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 161
    Points : 75
    Points
    75
    Par défaut
    Bonjour Thomas,

    dans mon fichier de modification je récupère la valeur des champs comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    while ( list (
     
    	  $prenom,
    	  $nom,
    	  $permis,
     
    	  ... / ...
     
    	  ) = mysql_fetch_array($requete_sql_bis)) {
     
    	  >> formulaire de modification <<
     
    }
    comment dois-je m'y prendre pour intégrer les autres champs ($prenom, $nom ...) à ton code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    while ( $row = mysql_fetch_array($requete_sql_bis)) {
     
        $permis = explode(',', $row['permis']);
     
    	>> formulaire de modification <<	  
    }

  5. #5
    Membre expert
    Avatar de ThomasR
    Homme Profil pro
    Directeur technique
    Inscrit en
    Décembre 2007
    Messages
    2 230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2007
    Messages : 2 230
    Points : 3 972
    Points
    3 972
    Par défaut
    omment dois-je m'y prendre pour intégrer les autres champs ($prenom, $nom ...) à ton code :
    Je pense que tu devrais lire la documentation de la fonction mysql_fetch_array : http://fr.php.net/mysql_fetch_array. Cette fonction comme son nom l'indique renvoie un tableau. Si tu veux voir ce qu'il y a dedans tu peux faire un var_dump($row);

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    // on va chercher tous les champs au lieu de uniquement "permis"
    // on pourrait faire SELECT permis, prenom, nom FROM ma_table aussi
    $requete_sql = "SELECT * FROM ma_table WHERE login='" . mysql_real_escape_string($_SESSION['login']) . "'";
    // on parcourt les enregistrements un à un
    while($row = mysql_fetch_array($requete_sql)){
        // on transforme la chaine "Voiture, Bateau" en un tableau de deux occurences
        $permis = explode(',', $row['permis'];
        echo $row['prenom'];
        echo $row['nom'];
    }

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    161
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 161
    Points : 75
    Points
    75
    Par défaut
    bon j'avance, lentement mais sûrement

    j'ai enfin réussi à réafficher mes checkbox cochés, comme ceci :

    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
     
    $requete_sql = "SELECT * FROM ma_table WHERE login='" . mysql_real_escape_string($_SESSION['login']) . "'";
     
    ... / ...
     
    while( $row = mysql_fetch_array($requete_sql_bis) ) {
     
    // transformation de la chaîne "voiture, moto, ..." en tableau
    $permis_array = explode(',', $row['permis']);
     
    foreach($permis_array as $valeur) {
     
    ?>
     
    <input type="checkbox" name="permis[]" value="<?php echo $valeur; ?>" <?php if (in_array($valeur, $permis_array)) echo "checked"; ?>  /> <?php echo $valeur; ?>&nbsp;&nbsp;&nbsp;
     
    <?php 
    } 
    ?>
    Petit souci tout de même :
    ça ne m'affiche que les checkbox qui ont été cochées, les checkbox non cochées ne s'affichant pas !

    Ayant 3 checkbox (voiture, moto, bâteau), je souhaiterais que ces 3 checkbox s'affichent, qu'elles soient cochées ou non

    Merci pour votre aide...

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    161
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 161
    Points : 75
    Points
    75
    Par défaut
    j'arrive maintenant à afficher chaque checkbox, cochée ou pas cochée... avec ceci :

    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
    <?php 
    	// transformation de la chaîne "voiture, bâteau, ..." en tableau
        	$permis_array = explode(',', $row['permis']);
    ?>
     
        <?php if (in_array("$permis_array[0]", $permis_array)) { $check = "checked"; } else { $check = ''; } ?> <input name="permis[]" type="checkbox" value="Voiture" <?php echo $check; ?> />
    	Voiture
        &nbsp;&nbsp;&nbsp;
     
        <?php if (in_array("$permis_array[1]", $permis_array)) { $check = "checked"; } else { $check = ''; } ?> <input name="permis[]" type="checkbox" value="Moto" <?php echo $check; ?> />
    	Moto
        &nbsp;&nbsp;&nbsp;
     
        <?php if (in_array("$permis_array[2]", $permis_array)) { $check = "checked"; } else { $check = ''; } ?> <input name="permis[]" type="checkbox" value="Bâteau" <?php echo $check; ?> />
    	Bâteau
        &nbsp;&nbsp;&nbsp;
    Ouf et merci à tous

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [1.x] Modifier affichage valeurs formulaires depuis BDD
    Par Passarinho44 dans le forum Symfony
    Réponses: 3
    Dernier message: 11/05/2011, 10h45
  2. [Tableaux] Affichage checkbox
    Par djinko dans le forum Langage
    Réponses: 5
    Dernier message: 29/03/2007, 17h03
  3. Affichage aléatoire depuis une table
    Par Winch44 dans le forum SQL Procédural
    Réponses: 1
    Dernier message: 11/01/2007, 17h54
  4. [validation]Erreur format texte depuis BDD
    Par Death83 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 18/02/2006, 19h49
  5. Affichage impossible depuis PhpMyAdmin
    Par Amélie Ladoque dans le forum Outils
    Réponses: 1
    Dernier message: 23/09/2005, 14h45

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