Case à cocher.

Eléphant du PHP | 424 Messages

29 août 2011, 15:29

Bonjour,

Pourriez vous m'expliquer comment gérer des cases à cocher dans un tableau dynamique ? Si les cases sont cochées pas de problémes je peux traiter l'info dans ma base de données, en revanche si la case n'est pas cocher... comment traiter le fait qu'elle ne soit pas cocher ?

Merci pour votre aide !!!
Youpi Youpi Yo !

ViPHP
ViPHP | 2577 Messages

29 août 2011, 15:44

On peut utiliser isset($_POST['macaseacocher']) pour savoir si la case est cochée (ou avec $_GET).

Eléphanteau du PHP | 23 Messages

29 août 2011, 16:07

En fait dans ton formulaire tu dois spécifier la valeur de ta checkbox.
<input name="ads" type="checkbox" value="valeur" checked>
La checkbox n'aura cette valeur que si elle a été cochée à la base.
donc pour savoir si elle est cochée, suffit que tu vérifie si
le $_POST ou $_GET est égal à la valeur spécifiée... ou tout bonnement s'il contient quelque chose, comme mentionné par Mazarini.

Mammouth du PHP | 2278 Messages

29 août 2011, 16:10

L'autre solution serait d'ajouter une case avec aucun choix:
<input type= 'checkbox' selected = 'selected'  value ='Aucun choix'>
autre idée:
<html>
	<body>
		<form method = 'post' action =' lulu.php'>
			<label  for 'case1'>Cinéma</label>
				<input type = 'radio' name = 'case1' required =' required' value ='O' />O
                                <input type = 'radio' name = 'case1' required =' required' value ='N' />N
			<label  for 'case2'>Théâtre</label>
				<input type = 'radio' name = 'case2' required =' required' value ='O' />O
                               <input type = 'radio' name = 'case2' required =' required' value ='N' />N
			<label  for 'case3'>Bronzage</label>
				<input type = 'radio' name = 'case3' required =' required' value ='O' />O
                               <input type = 'radio' name = 'case3' required =' required' value ='N' />N
			<button type = 'submit'>OK</button>
		</form>
	</body>
</html>
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD

Eléphant du PHP | 424 Messages

29 août 2011, 16:25

Hmmmm en faite, quand la case est cochée elle me renvoi sa valeur mais quand elle ne l'est pas il n'y a pas de valeur....

Je n'arrive pas à traiter ces cases à cocher....

Est ce que ce code peut fonctionner ?
<?php require_once('../../Connections/cagnes.php'); 

$brule = $_GET["brule"];
$id = $_GET["id_membre"];

$db = mysql_connect('localhost', '****', '****')
or die('<font color=red>Désolé mais vous ne pouvez voir les infos de la data-base</font>');
mysql_select_db('uscagnes_cagnesbasket',$db);
foreach ($id as $valeur){
if (isset($_GET['brule']))
	$brule == 1;
if (!isset($_GET['brule']))
	$brule == 0;
$sql= "UPDATE tb_membres set brule = ".$brule." where id_membre = ".$valeur; 
$req= mysql_query($sql);
header('Location:ajouter_brule.php?action=good');
mysql_close();
exit;
}

?>
Youpi Youpi Yo !

Eléphanteau du PHP | 23 Messages

29 août 2011, 16:43

Hmmmm en faite, quand la case est cochée elle me renvoi sa valeur mais quand elle ne l'est pas il n'y a pas de valeur...
Donc
if ($_POST['caseAcocher'] == "valeurLorsqueCochée"){
        $variable = 1;
} else {
        $variable = 0;
}

Eléphant du PHP | 424 Messages

30 août 2011, 14:15

Bon la récupération de mes cases à cocher fonctionne... parfait merci pour votre aide....

En revanche peut on traiter l'enregistrement des données en faisant une boucle ? Parce que avec mon script il ne m'en enregistre qu'un.... Si oui quelle procédure je dois appliquer ?

Merci !
Youpi Youpi Yo !

ViPHP
AB
ViPHP | 5818 Messages

30 août 2011, 17:34

Essaies d'utiliser les tableaux, par exemple :
<?php
if (isset($_POST['my_check']))
{
foreach ($_POST['my_check'] as $key => $value) echo $key. ' = ' .$value.'<br />';
}
?>
<form method="post" action="#">
<input name="my_check['id1']" type="checkbox" value="1">
<input name="my_check['id2']" type="checkbox" value="2">
<input name="my_check['id3']" type="checkbox" value="3">
<input type="submit" value="ok">
</form>

ViPHP
ViPHP | 5462 Messages

30 août 2011, 18:15

Essaies d'utiliser les tableaux, par exemple :
<?php
if (isset($_POST['my_check']))
{
foreach ($_POST['my_check'] as $key => $value) echo $key. ' = ' .$value.'<br />';
}
?>
<form method="post" action="#">
<input name="my_check['id1']" type="checkbox" value="1">
<input name="my_check['id2']" type="checkbox" value="2">
<input name="my_check['id3']" type="checkbox" value="3">
<input type="submit" value="ok">
</form>

y'a pas besoin de mettre les ' dans my_check['id1'], sinon ils apparaissent dans le POST ( ["'id1'"] ) :wink:

ViPHP
AB
ViPHP | 5818 Messages

30 août 2011, 18:18

Oui oui effectivement c'est une étourderie de ma part :)

Eléphant du PHP | 424 Messages

31 août 2011, 10:02

Je ne comprend pas.
Avec ta méthode je récupére l'id suivit du N° 0,1 2,3 ....

Mais comment lier l'id à la valeur de ma checkbox ?

id 1 -> Coché
id 2 -> Pas coché

etc....
Youpi Youpi Yo !

ViPHP
ViPHP | 2577 Messages

31 août 2011, 10:53

Bonjour,

Il faut faire attention aux cases qui ne sont pas retournée et qui doivent être remise à 0. Le risque est que tu ne traites que les cases cochée à mettre à 1.

Le plus simple est de faire un tableau avec toutes les cases à cocher avec la valeur 0 et d'alimenter à 1 les cases cochée dans ce tableau. Tu peux alors mettre à jour toute les cases.

Pour la mise à jour, tu peux faire un seul update au lieu d'un par case.

ViPHP
AB
ViPHP | 5818 Messages

01 sept. 2011, 02:06

Alors ça avance ? On peux faire un truc comme ça :
<?php
//tableau des checkbox 
$checkbox = array();
$checkbox['id1'] = 1;
$checkbox['id2'] = 1;
$checkbox['id3'] = 1;


if (isset($_POST['my_check']) && is_array($_POST['my_check']))
{
	function Checked (&$value, $key, $tab) 
	{
		$no_check = 0;
		$value = array_key_exists($key,$tab)? $value : $no_check;
	}
	
	$result_check = $checkbox;
	array_walk($result_check, 'Checked', $_POST['my_check']);
	
	
	foreach ($result_check as $key => $value)
	{
	 	echo $key. '=' .$value. '<br />';
	}
}
?>
<!--html-->
<form method="post" action="#">
<?php
foreach ($checkbox as $key => $value) echo '<input name="my_check['.$key.']" type="checkbox" value="'.$value.'" />';
?>
<input type="submit" value="ok" />
</form>
Ici toutes les checkbox ont la valeur 1 mais tu pourrais choisir autre chose. De même pour la variable "$no_check" de la fonction "Checked" qui défini la valeur pour les cases non cochées.

Pour faire le tableau de résultat j'ai utilisé "array_walk" associé à une fonction "Checked" mais tu pourrais aussi bien utiliser un classique foreach pour faire l'équivalent :
if (isset($_POST['my_check']) && is_array($_POST['my_check']))
{
	$no_check = 0;
	$result_check = array();

	foreach ($checkbox as $key => $value) 
	{
		$result_check[$key] = array_key_exists($key,$_POST['my_check'])? $value : $no_check;
	}
	
	foreach ($result_check as $key => $value)
	{
	 	echo $key. '=' .$value. '<br />';
	}
}

Eléphant du PHP | 424 Messages

01 sept. 2011, 11:38

Je te remercie !
Ton code m'aide beaucoup mais j'avoue être completement dépassé....

En faite ce qui me bloque c'est d'arriver dans un tableau dynamique à récuperer la valeur des checkbox associés à un id.

Il y a une logique que je n'arrive pas à saisir. Dans ton exemple tu pars d'un array "manuel" alors que moi mes checkbox sont "automatique" et créé à la volée, du coup je n'arrive pas à attribuer la valeur 1 à mes checkbox...
Comment enregistrer toutes les valeurs en boucle de mes checkbox dans ma bdd en tenant compte de l'id ? Je suis désolé mais je débute et la je bloque complétement...

Merci pour votre aide.
Youpi Youpi Yo !

ViPHP
AB
ViPHP | 5818 Messages

01 sept. 2011, 18:17

Tu les crée automatiquement comment ces checkbox ? Sans savoir on ne peut pas t'aider parce que les méthode pour résoudre de ton problème dépendent du problème en question. Montres nous le code de création de tes checkbox !