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 :

Validation Checkbox imbriquées


Sujet :

Langage PHP

  1. #1
    Membre habitué
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2012
    Messages
    284
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2012
    Messages : 284
    Points : 132
    Points
    132
    Par défaut Validation Checkbox imbriquées
    Bonjour,

    J'ai un tableau qui se présente comme ci-dessous :

    5 colonnes, des checkbox (coché = YES) (pas coché = NO)

    ID | A PATCHER | SERVEUR |     IP       | A REBOOTER
    -----------------------------------------------------
    1  |   []      |TOTO     | 192.168.0.1  |    []
    2  |   [X]     |TITI     | 192.168.0.2  |    [X]
    3  |   []      |TATA     | 192.168.0.3  |    []
    4  |   [X]     |TUTU     | 192.168.0.4  |    []
    Mon tableau est crée automatiquement en lisant un fichier texte avec les champs correspondant séparés par des ";"

    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
    If ($champs[4] == "Yes")
    {
    	$SelectedReboot = " checked=\"checked\"";
    	$valueReboot ="YES";
    }
    Else
    {
    	$SelectedReboot =" ";
    	$valueReboot ="NO";
    }
     
    If ($champs[1] == "")
    {
    	$SelectedPatch = "";
    	$valuePatch ="NO";
    }
    Else
    {
    	$SelectedPatch = " class = 'toto' checked=\"checked\"";
    	$valuePatch ="YES";
    }
     
     
    "<tr>
    <td>".$champs[0]."</td>
    <td><input type='checkbox' name='srv_patch_[]' id='srv_check' value='".$valuePatch."' ".$SelectedPatch."></td>
    <td>".$champs[2]."</td>
    <td>".$champs[3]."</td>										
    <td><input type='checkbox' name='srv_reboot_[]' id='srv_reb' value='".$valueReboot."' ".$SelectedReboot."></td>									
    </tr>";
    La règle est la suivante, si la case "A PATCHER" est cochée alors je vais vérifier la valeur de la checkbox A REBOOTER (coché = YES) (pas coché = NO)

    Puis j'affiche ID+SERVEUR+ YES/NO

    si la case "A PATCHER" n'est pas cochée alors je fait rien.

    J'arrive bien à récupere mes checkbox " A PATCHER" cochées (2 au total dasn l'exemple) , mais pour les checkbox "A REBOOTER" ca m'affiche les 4 checkbox (NO YES NO NO) ...

    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
     
    	if(!empty($_POST['srv_check_']))
    	{
    		foreach($_POST['srv_check_'] as $ID_SERVER)
    		{
    			echo $ID_SERVER;
     
    			foreach($_POST['srv_reboot_'.$ID_SERVER] as $ID_REB)
    			{
    				echo $ID_REB;
     
    			} 	
     
    		}
    	}
    Avez vous une idée ????

    Merci d'avance.

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Oui.

    1/ Evite d'écrire $champs[1], $champs[4],...
    Ca prête très vite à confusion et erreurs (il suffit que tu changes l'ordre ou que tu rajoutes un champ dans la requête pour que ce ne soit plus bon)
    En plus, ça ne nous aide pas à comprendre...

    Nomme explicitement les champs :
    $champs['de_ble'], $champs['de_noel'],...

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    	if(!empty($_POST['srv_check_']))
    	{
    		foreach($_POST['srv_check_'] as $index => $ID_SERVER)
    		{
    			echo $ID_SERVER;
     
    			$ID_REB = $_POST['srv_reboot_'][$index];
    			echo $ID_REB;
     
    		}
    	}

  3. #3
    Membre habitué
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2012
    Messages
    284
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2012
    Messages : 284
    Points : 132
    Points
    132
    Par défaut
    le problème c'est que je fais un "explode" d'un fichier texte je ne vois pas comment nommer mes champs.

    Dans mon fichier texte j'ai :

    1;;TOTO;192.168.0.1;NO
    2;OK;TITI;192.168.0.2;YES
    3;;TATA;192.168.0.3;NO
    4;OK;TUTU;192.168.0.4;NO
    ID = $champs[0] (ex : 1)
    SRV A PATCHER = $champs[1] (ex : Si Vide ne pas patcher, sinon patcher)
    SERVEUR = $champs[2] (ex : TOTO)
    IP = $champs[3] (192.168.0.1)
    REBOOT = $champs[4] (ex : NO)
    Ce qui donne pour la génération de mon tableau :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    "<tr>
    <td>".$champs[0]."</td>
    <td><input type='checkbox' name='srv_patch_[]' id='srv_check' value='".$valuePatch."' ".$SelectedPatch."></td>
    <td>".$champs[2]."</td>
    <td>".$champs[3]."</td>									
    <td><input type='checkbox' name='srv_reboot_[]' id='srv_reb' value='".$valueReboot."' ".$SelectedReboot."></td>									
    </tr>";
    Merci d'avance.

  4. #4
    Invité
    Invité(e)
    Par défaut
    Si on reprend ton code depuis le début :
    Fichier texte :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ID | A PATCHER | SERVEUR | IP | A REBOOTER
    1;;TOTO;192.168.0.1;NO
    2;OK;TITI;192.168.0.2;YES
    3;;TATA;192.168.0.3;NO
    4;OK;TUTU;192.168.0.4;NO
    formulaire.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
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    <form method="post" action="traitement.php">
    <table>
    <thead>
    	<tr>
    	<th>ID</th>
    	<th>Patch</th>
    	<th>NOM</th>
    	<th>IP</th>
    	<th>Reboot</th>
    	</tr>
    </thead>
    <tbody>
    <?php
    $handle1 = fopen('./bdd.txt', 'r');
    $line=0;
    //Si on a réussi à ouvrir le fichier
    if($handle1)
    {
    	//Tant que l'on est pas à la fin du fichier
    	while (!feof($handle1))
    	{
    		//On incrémente
    		$line++;
    		//On lit la ligne courante
    		$buffer= fgets($handle1);
    		//On saute la 1ère ligne, car c'est le titre
    		if ($line != 1)
    		{
    			//on enlève les " et espaces (IMPORTANT : surtout à la fin de la ligne)
    			$buffer = trim(str_replace('"', '', $buffer));
    			//on coupe a chaque ;
    			$champs= explode(";", $buffer);
     
    			$checkedPatch = ($champs[1] == "OK")? "class='toto' checked='checked'" : "";
    			$checkedReboot = ($champs[4] == "YES")? "checked='checked'" : "";
    			echo
    			"<tr>
    			<td>".$champs[0]."</td>
    			<td><input type='checkbox' name='srv_patch_[".$champs[0]."]' value='OK' ".$checkedPatch."/></td>
    			<td>".$champs[2]."</td>
    			<td>".$champs[3]."</td>
    			<td><input type='checkbox' name='srv_reboot_[".$champs[0]."]' value='YES' ".$checkedReboot."/></td>
    			</tr>";
    		}
    	}
    	fclose($handle1);
    }
    ?>
    </tbody>
    </table>
    <input type="submit" name="EnvoyerOK" value="Envoyer" />
    </form>
    A NOTER (IMPORTANT) :
    • $buffer = trim(str_replace('"', '', $buffer));
      => on enlève les " et espaces (IMPORTANT : surtout à la fin de la ligne)
    • ...name='srv_patch_[".$champs[0]."]...
      ...name='srv_reboot_[".$champs[0]."]...
      => $champs[0] étant l'ID (qu'on suppose unique !), les deux checkbox sont bien identifiées


    traitement.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
    <?php // TRAITEMENT
    if(isset($_POST['EnvoyerOK']))
    {
    	if(!empty($_POST['srv_patch_']))
    	{
    		foreach($_POST['srv_patch_'] as $srv_ID => $patch_check)
    		{
    			echo "Serveur " . $srv_ID . "-> patch : " . $patch_check; // OK
    			if(!empty($_POST['srv_reboot_'][$srv_ID]))
    			{
    				echo " -> Reboot : " . $_POST['srv_reboot_'][$srv_ID]; // YES ou RIEN
    			}
    			echo '<br />';
    		}
    	}
    }
    ?>
    A NOTER (IMPORTANT) : concernant les checkbox
    • Seules les checkbox COCHEES sont envoyées par $_POST !
      Les autres (non-cochées) sont ignorées.
    Dernière modification par Invité ; 15/08/2013 à 13h03.

  5. #5
    Invité
    Invité(e)
    Par défaut
    Je te propose une amélioration :
    => séparer la lecture du fichier et l'affichage des données.

    1/ FONCTION : lecture du fichier et création d'un array multi-dimension
    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
    <?php
    // FONCTION : lecture du fichier et création d'un array multi-dimension
    function read_file_and_create_array_bdd(){
    	$handle1 = fopen('./bdd.txt', 'r');
    	$line=0;
    	$champs_array = array();
    	//Si on a réussi à ouvrir le fichier
    	if($handle1)
    	{
    		//Tant que l'on est pas à la fin du fichier
    		while (!feof($handle1))
    		{
    			//On incrémente
    			$line++;
    			//On lit la ligne courante
    			$buffer= fgets($handle1);
    			//On saute la 1ère ligne, car c'est le titre
    			if ($line != 1)
    			{
    				//on enlève les " et espaces (surtout à la fin de la ligne)
    				$buffer = trim(str_replace('"', '', $buffer));
    				//on coupe a chaque ;
    				$champs_array[] = explode(";", $buffer);
     
    			}
    		}
    		fclose($handle1);
    	}
    	return $champs_array;
    }
    ?>
    2/ Appel de la fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $champs_array = read_file_and_create_array_bdd();
    var_dump($champs_array); // pour TEST !!
    le var_dump donne :
    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
    array
      0 => 
        array
          0 => string '1' (length=1)
          1 => string '' (length=0)
          2 => string 'TOTO' (length=4)
          3 => string '192.168.0.1' (length=11)
          4 => string 'NO' (length=2)
      1 => 
        array
          0 => string '2' (length=1)
          1 => string 'OK' (length=2)
          2 => string 'TITI' (length=4)
          3 => string '192.168.0.2' (length=11)
          4 => string 'YES' (length=3)
      2 => 
        array
          0 => string '3' (length=1)
          1 => string '' (length=0)
          2 => string 'TATA' (length=4)
          3 => string '192.168.0.3' (length=11)
          4 => string 'NO' (length=2)
      3 => 
        array
          0 => string '4' (length=1)
          1 => string 'OK' (length=2)
          2 => string 'TUTU' (length=4)
          3 => string '192.168.0.4' (length=11)
          4 => string 'NO' (length=2)

    3/ Affichage :
    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
    // 2/ On appelle d abord la fonction (lecture du fichier et création d'un array multi-dimension)
    $champs_array = read_file_and_create_array_bdd();
    3/ Affichage
    foreach($champs_array as $champs){
    			$checkedPatch = ($champs[1] == "OK")? "class='toto' checked='checked'" : "";
    			$checkedReboot = ($champs[4] == "YES")? "checked='checked'" : "";
    			echo
    			"<tr>
    			<td>".$champs[0]."</td>
    			<td><input type='checkbox' name='srv_patch_[".$champs[0]."]' value='OK' ".$checkedPatch."/></td>
    			<td>".$champs[2]."</td>
    			<td>".$champs[3]."</td>
    			<td><input type='checkbox' name='srv_reboot_[".$champs[0]."]' value='YES' ".$checkedReboot."/></td>
    			</tr>";
    }
    ?>

  6. #6
    Membre habitué
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2012
    Messages
    284
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2012
    Messages : 284
    Points : 132
    Points
    132
    Par défaut
    merci jérome

    Je ne t'en demandais pas autant

    Merci bcp je test ca ce soir ou demain matin

    Merci encore !!!!!!!

  7. #7
    Invité
    Invité(e)
    Par défaut
    Voici une version optimisée de la fonction :
    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
    // FONCTION : lecture du fichier et création d'un array multi-dimension
    function read_file_and_create_array_bdd(){
    	$champs_array = array();
    	$lines_array = file('./bdd.txt'); // mettre le CHEMIN correct vers le fichier
    	// on supprime la 1ère ligne (celle contenant les titres)
    	unset($lines_array[0]);
    	// on sépare ensuite les éléments de chaque ligne
    	foreach($lines_array as $line){
    		//on enlève les " et espaces (surtout à la fin de la ligne)
    		$line = trim(str_replace('"', '', $line));
    		//on coupe a chaque ;
    		$champs_array[] = explode(";", $line);
    	}
    	return $champs_array;
    }
    ?>

  8. #8
    Membre habitué
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2012
    Messages
    284
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2012
    Messages : 284
    Points : 132
    Points
    132
    Par défaut
    Tu déchires Jérôme, merci, c'est exactement ce que je voulais ...

    J'ai utilisé la fonction c’est top merci

    Longue vie à developpez.net

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

Discussions similaires

  1. [1.x] validation form imbriqué
    Par DevForFun dans le forum Symfony
    Réponses: 1
    Dernier message: 05/11/2010, 11h16
  2. Valider checkbox avant envoi
    Par voyageurdumonde dans le forum Général JavaScript
    Réponses: 13
    Dernier message: 09/10/2010, 10h38
  3. [XL-2007] désactivation de sub par validation checkbox
    Par commetuveux dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 30/05/2010, 14h01
  4. validator checkbox textbox
    Par bilouz93 dans le forum ASP.NET
    Réponses: 10
    Dernier message: 06/05/2008, 14h26
  5. [c#] Remplir un CheckBox imbriqué dans un Repeater
    Par Filippo dans le forum ASP.NET
    Réponses: 8
    Dernier message: 04/05/2007, 19h37

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