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

PHP & Base de données Discussion :

Formulaire de Modification : Checkbox déjà cochées !


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Avril 2007
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 25
    Par défaut Formulaire de Modification : Checkbox déjà cochées !
    Bonjour,

    je débute en php et j'ai presque tout fini à mon formulaire.
    Je coince sur une problématique sur laquelle j'ai essayé de reflechir, lire les forums et utiliser les problèmes déjà evoqués, mais pas de solution.

    Besoin :

    Quand l'utilisateur ouvre la page de modification d'un enregistrement (j'utilise une base mysql), que les cases cochées (checkbox) ou les liste de choix soient déjà cochées ou preselectionnées selon les données de la bdd, qui emanent evidement du choix fait lors de la creation de l'enregistrement.

    Problème :

    J'arrive à récupérer les champs de type text ou texarea mais pas celui des checkbox ou liste de choix.

    Merci d'avance pour votre aide.

  2. #2
    Membre averti
    Inscrit en
    Avril 2007
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 25
    Par défaut
    Ci-joint un extrait du code de mon formulaire :

    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
    53
    54
    55
     
    <?php
    //conexion a la base
    include('connection.php');
     
    //verification que l'id est renseigné
    $id=isset($_GET['id']) ? $_GET['id'] : '';
     
    // on se connecte à la bdd pour récupérer les informations de la fiche
    $sql = mysql_query(" SELECT * FROM incident WHERE id = '".$id."' ");
    // si un enregistrement correspond
    $incident = mysql_fetch_array($sql);
    if(@mysql_num_rows($sql) > 0)
    {
     
    ?>
    			<div id="corpForm">
    	<fieldset>
    <p>
    <span class="messageAlerte"></span>
    <label for="statut" title="Veuillez Indiquer le Statut de l'Incident" class="oblig">* Statut :</label>
    					<select name="statut" id="statut" title="Veuillez Indiquer le Statut de l'Incident" tabindex="1" onfocus="this.className='focus';" onblur="this.className='normal';">
    							<option value=""></option>
    							<option value="Ouvert">Ouvert</option>
    							<option value="En Charge">En Charge</option>
    							<option value="Ferme">Ferme</option>
    					</select>
    </p>
     
    <p>
    <span class="messageAlerte"></span>
    <label for="signal" title="Veuillez saisir " class="oblig">* Date & Heure du Signalement :</label>
    	<input type="text" name="signal" id="signal" title="Veuillez Indiquer l'heure de Signalement" tabindex="2" onfocus="this.className='focus';" onblur="this.className='normal';" value="<?=$incident['signal'];?>" />
    </p>
     
    <p>
    <span class="messageAlerte"></span>
    <label for="delai" title="Veuillez saisir " class="oblig">* Delai de Resolution Estime :</label>
    	<input type="text" name="delai" id="delai" title="Veuillez Indiquer le délai de Resolution éstimé" tabindex="3" onfocus="this.className='focus';" onblur="this.className='normal';" value="<?=$incident['delai'];?>" />
    </p>
     
    </fieldset>
     
    <fieldset>
     
    <p>
    <span class="messageAlerte"></span>
    <label for="criticite" title="Veuillez " class="oblig">* Niveau de Criticite :</label>
        <select name="criticite" tabindex="6">
    	  <option value=""></option>
          <option value="MAJEUR">Majeur</option>
          <option value="MINEUR">Mineur</option>
          <option value="CRITIQUE">Critique</option>
        </select>
    </p>
    Comment faire pour que la bonne option soit cochée pour le niveau de criticité par exemple, sachant que celui-ci sera forcément présent dans la Bdd.

    Merci !

  3. #3
    Membre émérite
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    1 012
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 012
    Par défaut
    déjà, un checkbox se fait comme suit :
    Code HTML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <input type="checkbox" name="majeur" tabindex="70" /> Majeur
    <input type="checkbox" name="mineur" tabindex="71" /> Mineur
    dans criticité, je ne trouve pas ce genre de code

    pour le cocher, il faut rajouter la propriété checked
    Code HTML : Sélectionner tout - Visualiser dans une fenêtre à part
    <input type="checkbox" name="majeur" checked="checked" tabindex="70" /> Majeur
    à afficher via un echo en fonction de ta bdd

  4. #4
    Membre averti
    Inscrit en
    Avril 2007
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 25
    Par défaut
    Pardon je me suis trompé d'exemple LOL.

    En fait le problème se pose pour les Checkbox ET pour les Select :

    Mes checkbox se presentent ainsi, plusieurs choix sont possibles :
    Code HTML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
      <label>Type  </label>
        <input type="checkbox" name="type[]" value="Type 1" />Type 1
        <input type="checkbox" name="type[]" value="Type 2" />Type 2
        <input type="checkbox" name="type[]" value="Type 3" />Type 3<br />

    Pour précocher une checkbox, pas de soucis, mais pour precocher les Checkbox selon les valeurs de la BDD, c'est là que je coince.

    Exemple : en creant mon enregistrement, j'ai coché Type 1 et Type 2.

    Dans ma base, via mon fichier de traitement, il va bien implementer les valeurs Type 1, Type 2 dans le champs type.

    Comment faire pour qu'il coche automatiquement ces 2 checkbox quand je veux editer mon enregistrement.

    J'ai le même soucis avec les select.

    En fait je dois lui exprimer procéder de la manière suivante (je suppose).
    1) recup des valeurs (sachant qu'il peut y en avoir plusieurs)
    (ça je sais le faire, vu que les affiche sans soucis)

    2) coché une checkbox ou selectionner un select si une des valeurs est bien présente.
    ça je sais pas comment faire

  5. #5
    Membre émérite
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    1 012
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 012
    Par défaut
    si j'ai bien compris ....

    tu utilises un bête if :

    tu dis avoir coché Type1 et Type2 dans ta base
    je ne sais pas ce que veut dire cocher quelque chose dans une base

    donc, supposons que tu aies créé un champ type1 dans ta base contenant les valeurs Yes (pour coché) ou No (pour non coché)
    lorsque tu lis les champs de ta base, tu sais si type1 est Yes ou No
    Supposons que la valeur de ce champ soit stockée dans l'array meschamps avec l'indice type1

    tu fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <input type="checkbox" name="type[1]" <?php if (meschamps['type1']=='yes') echo 'checked="checked" '; ?>value="Type 1" />Type 1
    et ainsi de suite, pour chaque champ type1, type2, etc

    si tu as tout stocké dans un même champ type, tu l'as fait suivant un algorithme que seul tu connais. il faut créer l'algorithme inverse pour savoir si c'est type1 ou type2 qui a été coché.

  6. #6
    Membre averti
    Inscrit en
    Avril 2007
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 25
    Par défaut
    Bonjour et merci beaucoup.

    J'ai bien avancé et presque reussi .


    Je donne la solution elle pourra servir a quelqu'un d'autre .

    Pour les Select :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    <?
    $criticite = isset($incident['criticite']) ? $incident['criticite'] : '';
    ?>
        <select name="criticite" tabindex="6">
          <option value="" <?php if($criticite == "") { echo 'selected'; } ?> ></option>
          <option value="MAJEUR" <?php if($criticite == "MAJEUR") { echo 'selected'; } ?> >Majeur</option>
          <option value="MINEUR" <?php if($criticite == "MINEUR") { echo 'selected'; } ?> >Mineur</option>
          <option value="CRITIQUE" <?php if($criticite == "CRITIQUE") { echo 'selected'; } ?> >Critique</option>
        </select>
    Pour les Select ça fonctionne à merveille.

    Pour les Chekbox :

    J'ai utilisé ce tutorial , la partie 4 _ Cases à Cocher.

    après avoir adapté le script à mon formulaire voilà mon code :

    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
     
    <?php
    $type = $incident['type'];
     
    if (isset($incident['type'])) {
        echo "Le Type Choisi :";
        for ($i = 0, $c = count($incident['type']); $i < $c; $i++) {
            echo "<br/><b>" . $incident['type'][$i] . "</b>";
        }
    }
     
    // Renvoie vrai si $option fait partie du résultat
    function est_selectionne($option) {
        if (!isset($incident['type'])) {
                return FALSE;
        }
        for ($i = 0, $c = count($incident['type']); $i < $c; $i++) {
            if ($incident['type'][$i] == $option) {
                return TRUE;
            }
        }
        return FALSE;
    }
     
    ?>
     
    <label for="type" title="Veuillez " class="oblig">* Type Equipement :</label>
    	<input type="checkbox" name="type[]"  <? if ($type=="Type 1"){echo "checked=checked";} ?> value="Type 1" />Type 1
        <input type="checkbox" name="type[]"  <? if ($type=="Type 2"){echo "checked=checked";} ?> value="Type 2" />Type 2
        <input type="checkbox" name="type[]"  <? if ($type=="Type 3"){echo "checked=checked";} ?> value="Type 3" />Type 3
    Voila le probleme :

    si 1 seule checkbox est cochée lors de la creation de l'incident, et donc si une seule valeur est implémentée dans ma base, quand j'edite mon enregistrement, la bonne checkbox est bien recochée.

    si plusieurs checkbox sont cochées lors de la creation de l'incident, et donc si plusieurs valeurs sont implémentées dans le champs type de ma base, quand j'edite mon enregistrement, aucune checkbox ne sera recochée à l'edition.

    Je crois comprendre que ce code verifie si la valeur de $type = "type n" de manière absolue (ça ou rien) et pas si "type n" fait partie de la chaine de valeur (ce dont j'ai besoin).

    Je remarque d'ailleurs un truc un peu "bizarre".

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    echo "<br/><b>" . $incident['type'][$i] . "</b>";
    renvoi seulement la premiere lettre d'une des valeurs presente dans ma bdd.

    J'espere que ce que je dis est clair et comprehensible.

    D'avance merci !

    Je passerais la balise résolu quand j'aurais tout fini ;-)

  7. #7
    Membre émérite
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Juin 2003
    Messages
    909
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 909
    Par défaut alors là je comprends pas
    Citation Envoyé par mellosmoothe
    Quand l'utilisateur ouvre la page de modification d'un enregistrement (j'utilise une base mysql), que les cases cochées (checkbox) ou les liste de choix soient déjà cochées ou preselectionnées selon les données de la bdd, qui emanent evidement du choix fait lors de la creation de l'enregistrement.
    Et comment tu veux faire sans te connecter à la BDD alors?

  8. #8
    Membre averti
    Inscrit en
    Avril 2007
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 25
    Par défaut
    LOL.

    je t'explique que je suis bien connecté à ma BDD sur ma page de modification d'enregistrement, puisque mes autres champs (les select par exemple), recuperent bien les valeurs de ma BDD !

    J'affiche aussi des valeurs emanant d'une requête à cette Bdd donc aucun soucis la dessus.

    Je n'ai pas de soucis pour recuperer la valeur d'un champs, j'ai plutot des soucis pour conditionner une action selon les valeurs de ce champ !

    Je vais etre precis.

    si mon champ1 = valeur 1
    j'arrive a conditionner que si champ1 = valeur 1, alors il faut cocher valeur 1.

    si mon champ1 = valeur1 valeur 2 valeur 3 (checkbox ou liste de choix multiple)

    je n'arrive pas à conditionner que si la valeur 1 apparait dans le champ 1 (parmis d'autres), alors il faut cocher valeur 1.. puis valeur 2 ou 3 si presentes elles aussi ?

    J'espere que ce que je raconte est clair

  9. #9
    Membre émérite
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Juin 2003
    Messages
    909
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 909
    Par défaut les plus courtes sont les meilleures
    Comme quoi les explications les plus courtes sont bien souvent les meilleures. Effectivement, j'ai compris ce que tu veux faire.

    Si tes valeurs sont séparées par un séparateur commun (espace, virgule, etc.) alors tu explodes ton champs pour récupérer les valeurs dans un tableau.

    Ensuite tu fais un foreach pour checker chaque valeur et voilà.

  10. #10
    Membre averti
    Inscrit en
    Avril 2007
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 25
    Par défaut
    non je n'utilise pas de séparateur, sinon un espace.

    sinon c'est ce que j'ai essayé mais ça ne fonctionne pas je ne comprends pas pourquoi !

    (zieute mon code plus haut ;-) )

  11. #11
    Membre émérite
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    1 012
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 012
    Par défaut
    il est tard je n'ai pas envie de tout lire

    mais dans le code que tu nous a présenté, il y a une fonction est_selectionne

    Tu l'utilises quand ?
    Et comment cette fonction connait-elle la valeur de $incident ?

  12. #12
    Membre émérite
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Juin 2003
    Messages
    909
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 909
    Par défaut ? ? ?
    Citation Envoyé par mellosmoothe
    non je n'utilise pas de séparateur, sinon un espace.
    Et depuis quand un espace n'est pas un séparateur?

    Citation Envoyé par mellosmoothe
    sinon c'est ce que j'ai essayé mais ça ne fonctionne pas je ne comprends pas pourquoi !
    Et tu n'as jamais pensé que l'erreur venait de toi et pas de PHP? J'utilise cette méthode de nombreuses fois et ça fonctionne toujours. Je ne pense pas avoir un PHP différent des autres

Discussions similaires

  1. Réponses: 20
    Dernier message: 07/08/2012, 09h41
  2. [MySQL] Problème avec checkbox - cases cochées par défaut avec formulaire
    Par kenjiendo dans le forum PHP & Base de données
    Réponses: 65
    Dernier message: 21/08/2011, 14h36
  3. activer fonction quand checkbox est cochée dans formulaire php
    Par knebhi dans le forum Général JavaScript
    Réponses: 0
    Dernier message: 06/10/2010, 11h26
  4. formulaire de recherche + checkbox
    Par jarod71 dans le forum Langage
    Réponses: 3
    Dernier message: 02/02/2006, 17h11
  5. Vérifier si checkbox est cochée
    Par MYster dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 24/11/2005, 19h10

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