Page 1 sur 1

soucis avec checkbox multiple

Posté : 02 juin 2015, 11:38
par bob60
Voici mon code actuel :
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<html>
<head>
	<title>PHP multiple checkbox</title>
	<link rel="stylesheet" href="css.css" />
</head>

<body>

<?php

	if(isset($_POST['envoie'])) 
    {
		if (isset($_POST['perm']) && count($_POST['perm']) > 0)
		{
			foreach($_POST['perm'] as $oui => $ok)
			{
				if (is_array($_POST['perm'][$oui]))
				{
					$ok = implode(', ', $ok);
					
				}

				
				echo 'Vous avez choisit ' .$oui. ' pour valeur ' .$ok. ' et pour acces <br />';
			}
		}
	}
		
       
?>
<form action="index.php" method="post">
	<table>
		<tr>
			<th rowspan="2">Pages</th>
			<th rowspan="2">Titre / Code / Nom</th>
			<th colspan="4" class="titre_tableau">Droits Attribués</th>
		</tr>
		<tr>
			<th class="sous_titre_tableau">Voir</th>
			<th class="sous_titre_tableau">Ajouter</th>
			<th class="sous_titre_tableau">Metrre à jour</th>
			<th class="sous_titre_tableau">Supprimer</th>
		</tr>
		
		<tr>
			<td>Page 1</td>
			<td>page numero 1</td>
			<td><input type="checkbox" name="perm[page1][]" value="voir" /></td>
			<td><input type="checkbox" name="perm[page1][]" value="ajouter" /></td>
			<td><input type="checkbox" name="perm[page1][]" value="mettre_a_jour" /></td>
			<td><input type="checkbox" name="perm[page1][]" value="supprimer" /></td>
		</tr>
		
		<tr>
			<td>Page 2</td>
			<td>page numero 2</td>
			<td><input type="checkbox" name="perm[page2][]" value="voir" /></td>
			<td><input type="checkbox" name="perm[page2][]" value="ajouter" /></td>
			<td><input type="checkbox" name="perm[page2][]" value="mettre_a_jour" /></td>
			<td><input type="checkbox" name="perm[page2][]" value="supprimer" /></td>
		</tr>
		
	</table>
	
	<input type="submit" name="envoie" value="Envoyer" />
</form>


</body>
</html>
Jusqu'à présent je sais récupérer les valeurs (value des checkbox cochés).
ce que je souhaite faire c'est cela :
si pour la page 1 : "voir" = coché, "ajouter" = non coché, "mettre a jour" = coché, "supprimer" = non coché
le niveau d'accès = 1;
si pour la page 1 : "voir" = coché, "ajouter" = coché, "mettre a jour" = coché, "supprimer" = coché
le niveau d'accès = 15;

bien sur si la page 2, à les mêmes checkbox coché et non coché que la page 1, le niveau d'accès doit être le même.

(Pour le moment je fait des essais sans base de données, quand cela fonctionnera j'enregistrerais les niveaux d'accès par pages dans la base.)

Ca fait deux semaines que je cherche et je ne trouve pas de solution.
Quelqu'un aurait-il une solution à proposer ?

Re: soucis avec checkbox multiple

Posté : 04 juin 2015, 09:22
par bob60
Personne à d'idée...

Re: soucis avec checkbox multiple

Posté : 06 juin 2015, 09:40
par bob60
Voilà où j'en suis. j'ai utilisé une fonction pour récupérer le niveau d'accès (permission pour chaque page) que voici :
function IsChecked($chkname,$name,$value)
    {
        if(!empty($_POST[$chkname][$name]))
        {
            foreach($_POST[$chkname][$name] as $chkval)
            {
                if($chkval == $value)
                {
                    return true;
                }
            }
        }
        return false;
    }

/* et je l'utilise ainsi */

$page = 'page1';
  
if(isset($_POST['envoie']))
{
    if (isset($_POST['perm']) && count($_POST['perm']) > 0)
    {
        foreach($_POST['perm'] as $oui => $ok)
        {
            if (is_array($_POST['perm'][$oui]))
            {
                $ok = implode(', ', $ok);
  
             }
  
                /* si tout est coché $a = 15 */
            if (IsChecked('perm',$page,'voir') && IsChecked('perm',$page,'ajouter') && IsChecked('perm',$page,'mettre_a_jour') && IsChecked('perm',$page,'supprimer'))
            {
                $a = 15;
        }
        /* si voir, ajouter et mettre_a_jour sont coché $a = 14 */
        if (IsChecked('perm',$page,'voir') && IsChecked('perm',$page,'ajouter') && IsChecked('perm',$page,'mettre_a_jour') && !IsChecked('perm',$page,'supprimer'))
        {
            $a = 14;
        }
        /* si voir, ajouter et supprimer sont coché $a = 13 */
        if (IsChecked('perm',$page,'voir') && IsChecked('perm',$page,'ajouter') && !IsChecked('perm',$page,'mettre_a_jour') && IsChecked('perm',$page,'supprimer'))
        {
            $a = 13;
         }
        /* ect */

echo 'Vous avez choisit ' .$oui. ' pour valeur ' .$ok. ' et pour acces ' .$a. ' <br />';
         }
     }
 }
Cette fonction et le code fonctionne correctement.

Le soucis c'est $page = 'page1'. Car si je veux les résultats du niveau d'accès de la page 2, il faut que je change manuellement le code ainsi

$page = 'page2', mais du coups je n'ai pu les valeurs de la page 1.

J'ai essayé avec un array comme ça :

$page = array()

$page = 'page1';

$page = 'page2';

ça ne marche pas!

Je ne sais pas comment faire pour retourner le resultat du niveau d'accès de la page 1 et de la page 2 en même temps.

Re: soucis avec checkbox multiple

Posté : 07 juin 2015, 09:29
par bob60
J'ai enfin résolu mon problème.

Pour ceux qui rencontre le même soucis, il faut faire un boucle for dans le foreach, comme ceci :
$a = ['oui'];
$b = count($a);
for ($i=0; $i<$b; $i++)
{
$page = $a[$i];
}