[RESOLU] soucis avec checkbox multiple

Eléphanteau du PHP | 23 Messages

02 juin 2015, 11:38

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 ?

Eléphanteau du PHP | 23 Messages

04 juin 2015, 09:22

Personne à d'idée...

Eléphanteau du PHP | 23 Messages

06 juin 2015, 09:40

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.

Eléphanteau du PHP | 23 Messages

07 juin 2015, 09:29

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];
}