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 :

Checkbox qui update la page


Sujet :

Langage PHP

  1. #1
    Membre régulier
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    151
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 151
    Points : 87
    Points
    87
    Par défaut Checkbox qui update la page
    Bonjour à tous !

    Je dispose d'un tableau avec une trentaine de paramètres booléen qui peuvent être modifiés par l'utilisateur puis envoyés à la base de données via un bouton submit. Jusque là, pas de problème.
    Maintenant je souhaiterai avoir une checkbox qui permette de tout sélectionner d'un coup lorsqu'elle est cochée.

    Il semblerai d’après mes recherches que du simple code html/php ne suffise pas, et j'ai du mal à trouver une solution qui m'aide.
    J'ai essayé d'appeler une fonction php via du javascript mais sans succès. au mieux j'ai réussi à afficher un message d'alerte lorsque je coche la checkbox (en javascript donc).

    PS: Si cela simplifie le code, un bouton à la place de la checkbox peut faire l'affaire.

  2. #2
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 098
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 098
    Points : 8 207
    Points
    8 207
    Billets dans le blog
    17
    Par défaut
    Si si, tu peux le faire en PHP au prix d'un rechargement de page et de quelques contorsions. Ce qui n'est pas forcément pertinent.

    Le mieux est d'utiliser du JS et de cocher tes checkboxes "programmatiquement" lorsque le bouton (ou la case à cocher) est cliqué.

    Cela pourrait donner :

    Code html : 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
    <script type="module">
        document.getElementById("check-all").addEventListener("click", event => {
            for (const element of event.target.form.elements) {
                if (element.type.toLowerCase() === "checkbox") {
                    element.checked = true;
                }
            }
        });
    </script>
    <form>
        <button type="button" id="check-all">Tout cocher</button>
        <input type="checkbox" ...>
        <input type="checkbox" ...>
        <input type="checkbox" ...>
        ...
    </form>
    Un problème exposé clairement est déjà à moitié résolu
    Keep It Smart and Simple

  3. #3
    Modérateur
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 077
    Points : 17 175
    Points
    17 175
    Par défaut
    Salut

    Moi en JavaScript j'en suis à cette solution
    Code html : 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
    <!DOCTYPE html>
    <html lang="fr"><!-- MultiChecked.html -->
    	<head>
    		<meta http-equiv="content-type" content="text/html"; charset="utf-8"/>
     	</head>
     	<body>
          <input type="checkbox" id="vehicle1" name="vehicle1" onchange="ActuEtat(this)" value="velo">
          <label for="vehicle1">j'ai un vélo</label><br>
          <input type="checkbox" id="vehicle2" name="vehicle2" onchange="ActuEtat(this)" value="voiture">
          <label for="vehicle2">j'ai une voiture</label><br>
          <input type="checkbox" id="vehicle3" name="vehicle3" onchange="ActuEtat(this)" value="bateau">
          <label for="vehicle3">j'ai un bateau</label><br>
          <input type="checkbox" id="vehicle4" name="vehicle4" onchange="ActuEtat(this)" value="avion">
          <label for="vehicle4">j'ai un avion</label><br>
          <input type="checkbox" id="vehicleS" name="vehicleS" onchange="cohertous()"value="tous">
          <label for="vehicleS" style="color:LimeGreen" >j'ai tous ses véhicules</label><br>
     
          <script>
                  function ActuEtat(elem){
                    if (elem.checked===false){
                      document.getElementById("vehicleS").checked = false;
                    }
                    const matches = document.querySelectorAll("input[type='checkbox']");
                    let NbrEtatTrue = 0;
                    matches.forEach((elem) => {
                       if (elem.checked === true){
                         NbrEtatTrue += 1;
                       }
                     });
                     //console.log("NbrEtatTrue"+NbrEtatTrue);
                     if (NbrEtatTrue === matches.length-1){
                       document.getElementById("vehicleS").checked = true;;
                     }
                  }
                  function cohertous(){
                    const matches = document.querySelectorAll("input[type='checkbox']");
                    //console.log("matches",matches);
                    //console.log("matches",matches.length);
                    //console.log("matches[matches.length-1]",matches[3].checked);
                 
                    matches.forEach((elem) => {
                      if (elem.id !== "vehicleS") {
                        if (matches[matches.length-1].checked === true){
                          elem.checked = true;
                          }else{
                          elem.checked = false;
                        }
                     }
                    });
                  }
          </script>
       </body>
    </html>
    mais je suis toujours en apprentissage.
    Soyez sympa, pensez -y
    Balises[CODE]...[/CODE]
    Balises[CODE=NomDuLangage]...[/CODE] quand vous mettez du code d'un autre langage que celui du forum ou vous postez.
    Balises[C]...[/C] code intégré dans une phrase.
    Balises[C=NomDuLangage]...[/C] code intégré dans une phrase quand vous mettez du code d'un autre langage que celui du forum ou vous postez.
    Le bouton en fin de discussion, quand vous avez obtenu l'aide attendue.
    ......... et pourquoi pas, pour remercier, un pour celui/ceux qui vous ont dépannés.
    👉 → → Ma page perso sur DVP ← ← 👈

  4. #4
    Membre régulier
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    151
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 151
    Points : 87
    Points
    87
    Par défaut
    Je vous remercie pour vos réponse,
    Bien que l'approche soit différente, je vois qu'il y a moyen d'aboutir à quelque chose dans les 2 cas.

    Mais néanmoins ce n'est pas si simple...

    Premièrement, j'ai oublié de le préciser, mais je n'ai jamais fait de javascipt, donc certains points ici ne me sont pas du tout familier... (Je connais C++/C#, java et php)

    Deuxièmement, je ne pensais pas que cela aurait de l'importance, mais en fait je me rencontre que si:
    Les éléments dans ma page ne sont pas des checkbox mais des radioboutons (donc soit un choix soit l'autre), je ne peux donc pas simplement coder "coche toutes les checkbox" comme proposé...

  5. #5
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 098
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 098
    Points : 8 207
    Points
    8 207
    Billets dans le blog
    17
    Par défaut
    Citation Envoyé par BartRoX Voir le message
    Premièrement, j'ai oublié de le préciser, mais je n'ai jamais fait de javascipt, donc certains points ici ne me sont pas du tout familier... (Je connais C++/C#, java et php)
    C'est le moment de t'y mettre

    Deuxièmement, je ne pensais pas que cela aurait de l'importance, mais en fait je me rencontre que si:
    Les éléments dans ma page ne sont pas des checkbox mais des radioboutons (donc soit un choix soit l'autre), je ne peux donc pas simplement coder "coche toutes les checkbox" comme proposé...
    En effet, ça change tout. Tu veux cocher quels boutons radio ? Ils ont un point commun ? Donne des infos.
    Un problème exposé clairement est déjà à moitié résolu
    Keep It Smart and Simple

  6. #6
    Membre régulier
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    151
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 151
    Points : 87
    Points
    87
    Par défaut
    Oui, je m'y mets !

    Hum...
    J'ai 3 colonnes.
    La première est composée de 2 radio-boutons par ligne, les 2 autres en ont 3 (un seul choix possible par colonne bien évidemment).
    Le choix du radio bouton lors de la coche de la checkbox est défini.
    Le nombre de ligne est variable ( ) donc le nom du radio bouton (name) possède un indice à la fin (provenant de la variable d'itération de la boucle $i).

    J'ai donc quelque chose comme ca:
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <input type="radio" name="MonRadio<?php echo $i;?>" <?php if(...mes conditions...){ echo "checked='checked'";}?>value="0">O
    <input type="radio" name="MonRadio<?php echo $i;?>" <?php if(...mes conditions inverses...){ echo "checked='checked'";}?>value="X">X</td>

    La "value" à sélectionner est commune au 2 premières colonne mais différente pour la 3ème.

  7. #7
    Membre régulier
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    151
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 151
    Points : 87
    Points
    87
    Par défaut
    Du coup j’ai fini par remplacer la checkbox par un bouton submit qui met à jour ma base de données et rafraichi la page. Le résultat correspond à ce que je voulais et c'est facile à mettre en oeuvre en php.

    Merci tout de même pour votre aide !

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

Discussions similaires

  1. Cochez un checkbox qui est sur une autre page
    Par fabien14 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 27/09/2009, 12h27
  2. CheckBox qui agit sur une même page
    Par Antho42 dans le forum Langage
    Réponses: 3
    Dernier message: 25/08/2009, 11h20
  3. quels sont les checkbox qui sont cochés?
    Par debutant.informatique dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 16/03/2006, 21h18
  4. fonction javascript qui convertit 1 page web(html) en pdf!!
    Par allaoua dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 19/02/2006, 23h59
  5. Boutons Radios qui charge une page php différente
    Par nebule dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 18/11/2004, 15h25

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