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écupérer variable php pour contrôle cases à cocher dynamiques


Sujet :

Langage PHP

  1. #1
    Membre régulier
    Inscrit en
    Octobre 2008
    Messages
    329
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 329
    Points : 97
    Points
    97
    Par défaut Récupérer variable php pour contrôle cases à cocher dynamiques
    Bonjour

    Je suis en train de développer un formulaire avec des cases à cocher dont le nombre est dynamique. Les pays s'affichent grâce à la fonction "go", les régions s'affichent suivant le pays grâce à la fonction "go_regions". Par exemple pour la France il y a 22 régions, et pour la Belgique il y a 11 régions.





    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
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
     
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
     
    <script language="JavaScript">
     
    function verif_formulaire()
    {
    if (! checkbox_selected(22,'id_region_')){
    	alert("Veuillez entrer au moins une région ou vous exercez principalement");
    	document.form1.id_region_1.focus();
     	return false;
    }
     
    function checkbox_selected(nb,idBox)
    {
    var i;
    for (i=1;i<=nb;i++)
    {
    if (document.forms['form1'].elements[idBox+i].checked) return true;
    }
    return false;
    }
     
    // Pour lister les pays
    function go(){
    var xhr = getXhr();
    xhr.onreadystatechange = function()
    {
    if(xhr.readyState == 4 && xhr.status == 200){
    leselect = xhr.responseText;
    document.getElementById('id_villes').innerHTML = leselect;
    }
    }
    xhr.open("POST","lister_villes.php",true);
     
    xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
     
    sel = document.getElementById('id_pays');
    idpays = sel.options[sel.selectedIndex].value;
    xhr.send("id_pays="+idpays);
     
    go_regions();
    }
     
    // Pour lister les régions
    function go_regions(){
    var xhr = getXhr();
    xhr.onreadystatechange = function()
    {
    if(xhr.readyState == 4 && xhr.status == 200){
    	leselect = xhr.responseText;
    	document.getElementById('id_regions').innerHTML = leselect;
    	}
    }
    xhr.open("POST","lister_regions.php",true);
    xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
     
    sel = document.getElementById('id_pays');
    idpays = sel.options[sel.selectedIndex].value;
    xhr.send("id_pays="+idpays);
    }
     
    </script>
    </head>
    <body>
     
    <tr>
    <td align="left" class="Style4">Mon pays de résidence</td>
    <td align="left" valign="middle" class="Style4">
    <?php lister('pays','nom_pays');?></td>
    </tr>
     
    <tr>
    <td align="left" class="Style4">Ma ville de résidence</td>
    <td id="id_villes" align="left" valign="middle" class="Style4">
    <?php if((isset($_POST["id_pays"])) && (($_POST["id_pays"]) != 0))
    {require_once 'lister_villes.php';}
    else echo '<select name="id_ville" id="id_ville" style="width:200px">
    <option value="0" selected="selected">
    choisissez un pays</option></select>';?></td>
    </tr>
     
    <tr>
    <td width="209" height="120" align="left"><class="Style1">
    Je me déplace principalement dans les régions suivantes</td>
    <td id="id_regions" width="299" align="left" valign="middle" class="Style4">
    <?php if((isset($_POST["id_pays"])) && (($_POST["id_pays"]) != 0))
    {require_once 'lister_regions.php';}
    else echo '<select name="id_region" id="id_region" style="width:200px">
    <option value="0" selected="selected">
    choisissez un pays</option></select>';?></td>
    </tr>
     
    </body>
    </html>
    La fonction "lister.php" qui créé la liste déroulante des pays :
    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
     
    <?php
    function lister ($table,$nomchamp) {
    $requete = "select pays_id,$nomchamp from $table order by $nomchamp";
     
    $resultat = mysql_query($requete) or die('Erreur SQL !'.$sql.'<br>'.mysql_error());
     
    echo '<select name="'.'id_'.$table.'" id="'.'id_'.$table.'" style="width:200px" onchange="go()">';
     
    echo '<option value="0"';
    if(!isset($_POST['id_'.$table])) { echo ' selected="selected"';} 
     
    echo '>choisissez...</option>';
     
    while ($ligne = mysql_fetch_array($resultat)) {
    $pays_id = $ligne['pays_id'];
     
    echo '<option value="'.$pays_id.'"'; 
     
    if((isset($_POST['id_'.$table]))&&(($_POST['id_'.$table])== $pays_id)) { echo ' selected="selected"';} 
     
    echo '>'.$ligne[$nomchamp].'</option>';
     
    }
    echo'</select>';
    }
    ?>
    Le fichier "lister_regions.php" qui créé la liste déroulante des régions en fonction du pays et qui éxécute la fonction "nb_regions.php" :
    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
     
    <?php
    if((isset($_POST["id_pays"])) && (($_POST["id_pays"]) != 0)) {
    require_once 'connectbdd.php';
    require_once 'nb_regions.php';
     
    $pays = $_POST["id_pays"];
    $pays = donne_pays($pays);
     
    $resultat = mysql_query('SELECT region_id,nom_region FROM '.$pays.'_regions'.' ORDER BY nom_region') 
    or die('Erreur SQL !'.$sql.'<br>'.mysql_error());
     
    echo '<div style="width:98%;height:100px;overflow:auto;border:1px solid #CCCCCC;padding:2px;">';
     
    $i = 1;
     
    while ($ligne = mysql_fetch_array($resultat)) {
    $lettre = $ligne['region_id'];
    $region = $ligne['nom_region'];
     
    echo '<input type="checkbox" name="'.'id_region_'.$i.'" value="'.$lettre.'"'; 
     
    if((isset($_POST['id_region_'.$i])) && (($_POST['id_region_'.$i]) == $lettre)) 
    {echo ' checked="checked"';}	
     
    echo '/>'.$region.'<br/>';
     
    $i++;
    }
    echo'</div>';
    nb_regions();
    }
     
    else echo '<select name="id_region" id="id_region" style="width:200px"><option value="0" selected="selected">choisissez un pays</option></select>';
    ?>

    A la validation du formulaire, je fais un test pour savoir si au moins une région a été cochée avec les fonctions "verif_formulaire" et "checkbox_selected". S'il n'y a pas de région cochée, la fonction affiche une alerte.

    Avant ça fonctionnait bien, car je n'avais qu'un seul pays, la France, donc le nombre de région était statique (22). Je passais donc en argument 22 dans la fonction "checkbox_selected" et tout était ok.

    Mais maintenant quand l'utilisateur sélectionne la Belgique avec ses 11 régions, le test plante. Il faudrait que je passe en variable le nombre de régions en argument dans la fonction "verif_formulaire".

    J'ai donc créé en PHP la fonction "nb_regions.php". Cette fonction est lancée dans le fichier "lister_regions.php". Grace à Ajax je récupère la variable "$_POST["id_pays"]" et je compte le nombre de régions du pays correspondant, et je retourne la variable "$nb_regions".

    Fonction "nb_regions.php" qui renvoie le nombre de régions en fonction du pays :
    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
    Function nb_regions() {
    if((isset($_POST["id_pays"])) && (($_POST["id_pays"]) != 0)) {
    require_once 'connectbdd.php';
     
    $pays = $_POST["id_pays"];
    $pays = donne_pays($pays);
     
    $resultat = mysql_query('SELECT COUNT(*) FROM '.$pays.'_regions'.'') 
    or die('Erreur SQL !'.$sql.'<br>'.mysql_error());
    $row = mysql_fetch_row($resultat);
    $nb_regions = $row[0];
    return($nb_regions);
    }
    }
    ?>
    Le problème c'est que je ne sais pas quand et comment passer la variable PHP "$nb regions" dans ma fonction "verif_formulaire". Les scripts sont au début de ma page alors que la fonction "nb_regions" est lancée quand l'utilisateur change de pays.

    Je suis débutant je ne sais pas si mon raisonnement est bon. Il est peut-être possible de faire autrement.

    Merci de votre aide

  2. #2
    Modérateur
    Avatar de blueice
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2003
    Messages
    3 487
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2003
    Messages : 3 487
    Points : 5 134
    Points
    5 134
    Par défaut
    Ce n'est pas du Java, mais du Javascript...
    -_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_SIGNATURE -_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-
    Dans la mesure du possible, essayez de montrer votre problème en situation réelle en nous donnant une url, que l'on puisse tester.
    Pensez également à cocher

    Aucun problème ne doit être résolu en MP (Message Privé) le forum est là pour ça.

    Dimension Internet

  3. #3
    Expert confirmé
    Avatar de Thes32
    Homme Profil pro
    Développeur PHP, .Net, T-SQL
    Inscrit en
    Décembre 2006
    Messages
    2 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur PHP, .Net, T-SQL

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 379
    Points : 4 853
    Points
    4 853
    Par défaut
    Bonjour,

    Faire un simple de ta variable nb_regions et ensuite le passer comme variable de ta fonction Javascript ne tient pas ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    verif_formulaire(<?php echo $nb_regions ?>)
    Développeur | Zend Certified Engineer

    Étapes Pour mieux se servir du forum:
    1. Commencez par lire les cours et tutoriels ;
    2. Faites une recherche;
    3. Faites un post si rien trouvé dans les deux étapes précédentes en respectant les règles;

    Nix>_Rien n'est plus pratique que la théorie

  4. #4
    Membre régulier
    Inscrit en
    Octobre 2008
    Messages
    329
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 329
    Points : 97
    Points
    97
    Par défaut Marche pô...
    J'ai essayé cela dans ma fonction "verif_formulaire"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    function verif_formulaire()
    {
    if (! checkbox_selected(<?php if (isset ($nb_regions)) echo $nb_regions ?>,'id_region_')){
    alert("Veuillez entrer au moins une région ou vous exercez principalement");
    document.form1.id_region_1.focus();
    return false;
    }
    Mais ça ne marche pas. Quand je rajoute les instructions PHP en argument, les régions ne s'affiche plus quand je choisis le pays.



    En fait ça plante toute la partie javascript. Dans la fonction verif_formulaire il y a évidemment des contrôles sur tous les champs avec des alertes.
    Maintenant si je valide le formulaire avec tous les champs vides ça ne fait plus aucun contrôle et ne renvoie plus d'alertes.

  5. #5
    Expert confirmé
    Avatar de Thes32
    Homme Profil pro
    Développeur PHP, .Net, T-SQL
    Inscrit en
    Décembre 2006
    Messages
    2 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur PHP, .Net, T-SQL

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 379
    Points : 4 853
    Points
    4 853
    Par défaut
    Que ce qui est généré en html avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    checkbox_selected(<?php if (isset ($nb_regions)) echo $nb_regions ?>,'id_region_'))
    Développeur | Zend Certified Engineer

    Étapes Pour mieux se servir du forum:
    1. Commencez par lire les cours et tutoriels ;
    2. Faites une recherche;
    3. Faites un post si rien trouvé dans les deux étapes précédentes en respectant les règles;

    Nix>_Rien n'est plus pratique que la théorie

  6. #6
    Membre régulier
    Inscrit en
    Octobre 2008
    Messages
    329
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 329
    Points : 97
    Points
    97
    Par défaut ???
    Je ne comprends pas ce que tu veux dire...

  7. #7
    Membre expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 58
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Points : 3 627
    Points
    3 627
    Billets dans le blog
    8
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    checkbox_selected(<?php if (isset ($nb_regions)) echo $nb_regions ?>,'id_region_'))
    Dans ce bout de code, Pascal, tu as des balises php...

    Le php génère du html, selon les normes, les conditions ou la programmation que tu lui as écrites...

    Ici, tu lui dis (echo) affiche dans le html la variable nombre de région...

    Le fait-il ? Affiche-t-il quoi que ce soit, et si oui, est-ce bien ce que tu souhaites ? Vaste question !

    Comment le savoir ? Tu ouvres la page sur laquelle tu bosses via un navigateur (oui même en local), et dans ton navigateur, tu fais affichage puis 'code source' ou 'source' selon l'engin... Cela affiche le html chargé dans la page courante par ton navigateur... Le javascript aussi d'ailleurs... mais pas le PHP, qui est interprété avant le chargement de ta page, et transformé en bon vieux html que reconnait ton navigateur...
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

  8. #8
    Membre régulier
    Inscrit en
    Octobre 2008
    Messages
    329
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 329
    Points : 97
    Points
    97
    Par défaut
    Citation Envoyé par Dendrite Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    checkbox_selected(<?php if (isset ($nb_regions)) echo $nb_regions ?>,'id_region_'))
    Ici, tu lui dis (echo) affiche dans le html la variable nombre de région...

    Le fait-il ? Affiche-t-il quoi que ce soit, et si oui, est-ce bien ce que tu souhaites ? Vaste question !
    Il est bizarre ce post... J'essaie pourtant de soigner mes énoncés quand j'ai un souci...

    Evidemment que ça m'affiche tout comme il faut ! J'ai mis des copies d'écran dans mon post... et essayé de détailler le problème pour que tout le monde comprenne... Et j'écris dans mon énoncé :
    Avant ça fonctionnait bien, car je n'avais qu'un seul pays, la France, donc le nombre de région était statique (22). Je passais donc en argument 22 dans la fonction "checkbox_selected" et tout était ok.
    Le problème arrive quand j'essaie de passer la variable PHP dans le javascript avec cette instruction dans la fonction "verif_formulaire" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (! checkbox_selected(<?php if (isset ($nb_regions)) echo $nb_regions ?>,'id_region_'))
    Dès que je modifie cette ligne, ça me plante tout le javascript ! Plus de contrôle sur les champs (plus d'alertes à la validation du formulaire), et les régions ne s'affiche plus quand je choisis le pays (voir la copie d'écran de mon deuxième message).

    C'est comme si le javascript était désactivé...

  9. #9
    Membre expérimenté
    Avatar de Jumano
    Profil pro
    Inscrit en
    Février 2007
    Messages
    1 163
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 1 163
    Points : 1 595
    Points
    1 595
    Par défaut
    Bonjour,
    Essaye 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
    <script type="text/javascript">
    function verif_formulaire() 
    { 
    var isChecked=false;
    for (i=0; i<document.getElementsByTagName("input").length; i++)
    if (document.getElementsByTagName("input")[i].type=="checkbox")
    if (document.getElementsByTagName("input")[i].checked)
    isChecked=true;
    if (!isChecked)
    {
    alert('Veuillez entrer au moins une région ou vous exercez principalement !');
    return false;
    }
    }
    </script>

  10. #10
    Membre régulier
    Inscrit en
    Octobre 2008
    Messages
    329
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 329
    Points : 97
    Points
    97
    Par défaut Bonjour
    Bonjour, je ne suis pas très calé en javascript...

    Apparemment ça me remplacerait la fonction "checkbox_selected" ?

  11. #11
    Membre expérimenté
    Avatar de Jumano
    Profil pro
    Inscrit en
    Février 2007
    Messages
    1 163
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 1 163
    Points : 1 595
    Points
    1 595
    Par défaut
    Re,
    Remplace les deux fonction javascript.
    On fait une boucle sur tous les "input", on regarde ceux qui sont de type "checkbox", puis s'ils sont cochés.
    Si aucun n'est coché on affiche une alerte.
    Donc tu n'as plus besoin de connaitre le nombre de checkbox.

  12. #12
    Membre régulier
    Inscrit en
    Octobre 2008
    Messages
    329
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 329
    Points : 97
    Points
    97
    Par défaut Bon sang mais c'est bien sur...!
    C'est ce que j'avais cru comprendre... J'avais envisagé cette solution, mais étant nul en javascript...

    J'essaie de suite et je te tiens au courant !

  13. #13
    Membre régulier
    Inscrit en
    Octobre 2008
    Messages
    329
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 329
    Points : 97
    Points
    97
    Par défaut La solution
    Ca marche... !

    J'en suis sur le cul...!

    J'avais quand même laissé la fonction "checkbox_selected", car j'ai d'autres checkbox statiques dans ma fonction verif_formulaire et j'angoissais un peu...!

    Je l'ai laissé car ça me met une alerte personnalisée sur chaque champ vide...

    Merci Jumano c'est vraiment cool de m'avoir aidé !

    Je commençais à me demander si j'allais pas ouvrir le gaz...!

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

Discussions similaires

  1. Récupérer une variable php pour jquery
    Par chrozak dans le forum jQuery
    Réponses: 11
    Dernier message: 10/06/2013, 10h22
  2. [AJAX] Récupérer variable Ajax pour Php.
    Par Fabrice7627 dans le forum AJAX
    Réponses: 6
    Dernier message: 17/02/2011, 17h18
  3. Réponses: 0
    Dernier message: 20/10/2009, 23h35
  4. [HTML PHP] case à cocher dynamique
    Par baboun007 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 07/09/2006, 23h14
  5. Pb pour récupérer la velur d'une case à cocher
    Par muppetshow dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 15/04/2005, 21h23

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