Se connecter

Informatique

Création de sites web

Sujet : [php]Case à décocher
1
Yechiko
Niveau 18
14 mars 2017 à 23:38:12

Bonsoir !

Voila mon problème :
Je souhaite faire une requête sql INSERT INTO sur les case que je coche, cela marche avec un onclick = "this.form.submit()" pour recuperer le $_post.

bref le problème c'est que je veux que quand je décoche la case , je récupère un $_post, sauf que $_post ne prend pas en compte les case décocher ...

du coup j'ai beau faire des if des else etc etc je ne recupère jamais la valeur du submit d'une case décocher ...

On parle souvent d'une technique ou l'on met un input hidden a coté d'une case a cocher , mais sans vraiment dire comment faire ...

en gros un exemple de code :

<?php 
foreach($_POST['Checkbox'] as $lettre) // Pour chaques case à cocher
	{
	if (!empty($lettre))// Si la case est n'es pas vide "AJOUT de l'appareil de mesure"
		{
		echo $lettre;
		$sql_query=mysql_query("SELECT * FROM `jointure_capteur_adm` WHERE `id_capteur`=".$_GET['capteur_id']." AND `id_di2`=".$_GET['di_id']." AND `lettre_adm`='$lettre'");			
		echo mysql_num_rows($sql_query);
		if (mysql_num_rows($sql_query) == 0)
			{
			$query = $DBcon->query("SELECT `nom`,`n_id`,`date_valide` FROM `appareil_de_mesures` WHERE `lettre_adm` = '$lettre'");
			$admRow=$query->fetch_array();
			$nom= $admRow['nom'];
			$id= $admRow['n_id'];
			$date= $admRow['date_valide'];
			$sql_query="INSERT INTO jointure_capteur_adm(id_capteur,id_di2,nom_adm,n_id_adm,lettre_adm,date_valide_adm) VALUES('".$_GET['capteur_id']."','".$_GET['di_id']."','$nom','$id','$lettre','$date')";
			mysql_query($sql_query);
			}
		} 
	else // sinon (si ma case est vide) "SUPPRESSION de l'appareil de mesure"
		{echo test;
		$sql_query=mysql_query("SELECT * FROM `jointure_capteur_adm` WHERE `id_capteur`=".$_GET['capteur_id']." AND `id_di2`=".$_GET['di_id']." AND `lettre_adm`='$lettre'");			
		if (mysql_num_rows($sql_query) == 1)
			{
			$sql_query="DELETE FROM `jointure_capteur_adm` WHERE `id_capteur`=".$_GET['capteur_id']." AND `id_di2`=".$_GET['di_id']." AND `lettre_adm`='$lettre'";
			mysql_query($sql_query);
			}
		}
	} 
?>

puis les cases :

<?php $result = mysql_query("SELECT lettre_adm FROM jointure_capteur_adm WHERE id_di2 = ".$_GET['di_id']." AND id_capteur = ".$_GET['capteur_id']." AND `lettre_adm` = 'A'");

				if (mysql_num_rows($result) == 0) { ?>
					<input name="Checkbox[]" onchange="this.form.submit()" type="checkbox" value="A">A</td>
				<td style="height: 23px"> 
				<?php }else{ ?>
				
					<input name="Checkbox[]" onchange="this.form.submit()" type="checkbox" checked="checked" value="A">A</td>
				<td style="height: 23px"> <?php } ?>

une case A , déja cocher au rafraichissement de page si ma requête dit qu'elle a déjà été cocher auparavent , sinon on affiche la case sans coche.

Merci !

darkiron_natty
Niveau 8
15 mars 2017 à 10:56:58

Si la case est coché elle sera à true dans post sinon non. Pour ça ta isset et array_key_exist [[sticker:p/1kkn]]

arsh222
Niveau 10
15 mars 2017 à 14:31:18

Tu pourrais faire un input caché pour chaque case case, dont la valeur serait la lettre. Le but ne serait pas d'associer un label hidden avec une case donnée mais de récupérer une liste des cases qui existent pour voir lesquelles manquent dans $_POST['Checkbox'].

affichage des checkbox

<input name="Checkbox[]" type="checkbox" value="A">A
<input name="NomsCheckbox[]" type="hidden" value="A">
// traitement du formulaire
foreach ($_POST['NomsCheckbox'] as $nom)
{
  if(in_array($nom,$_POST['Checkbox']))
  {
    //  ajout de l'appareil de mesure
  }
  else
  {
    // suppression de l'appareil de mesure
  }
}

ps : plutôt que de faire un submit dès qu'une checkbox change, ce serait plus avantageux de mettre un bouton submit qui envoie tout d'un coup

Yechiko
Niveau 18
15 mars 2017 à 17:44:12

Le 15 mars 2017 à 14:31:18 arsh222 a écrit :
Tu pourrais faire un input caché pour chaque case case, dont la valeur serait la lettre. Le but ne serait pas d'associer un label hidden avec une case donnée mais de récupérer une liste des cases qui existent pour voir lesquelles manquent dans $_POST['Checkbox'].

affichage des checkbox

<input name="Checkbox[]" type="checkbox" value="A">A
<input name="NomsCheckbox[]" type="hidden" value="A">
// traitement du formulaire
foreach ($_POST['NomsCheckbox'] as $nom)
{
  if(in_array($nom,$_POST['Checkbox']))
  {
    //  ajout de l'appareil de mesure
  }
  else
  {
    // suppression de l'appareil de mesure
  }
}

ps : plutôt que de faire un submit dès qu'une checkbox change, ce serait plus avantageux de mettre un bouton submit qui envoie tout d'un coup

Exacte ! mais c'est surtout pour l'utilisateur et l'ergonomie que je ne souhaite pas implémenter de bouton submit [[sticker:p/1kkr]]

En tout cas merci a vous deux , je vais essayer ça !

darkiron_natty
Niveau 8
15 mars 2017 à 20:09:16

Dans ce cas angular [[sticker:p/1kkn]]

Omeg[a]typez
Niveau 10
25 mars 2017 à 12:00:41

T'as pensé à ajax ?


<script type="text/javascript">
  $(document).ready(function(){
    var isChecked = $("input:checkbox").is(":checked") ? 1:0; 
    $.ajax({
            url: '...',
            type: 'POST',
            data: { strID:$("input:checkbox").attr("id"), strState:isChecked }
    });        
  });
</script>
Yechiko
Niveau 18
25 mars 2017 à 15:23:18

Le 25 mars 2017 à 12:00:41 Omeg[a]typez a écrit :
T'as pensé à ajax ?


<script type="text/javascript">
  $(document).ready(function(){
    var isChecked = $("input:checkbox").is(":checked") ? 1:0; 
    $.ajax({
            url: '...',
            type: 'POST',
            data: { strID:$("input:checkbox").attr("id"), strState:isChecked }
    });        
  });
</script>

J'y suis arriver avec du code PHP et l'input hidden [[sticker:p/1kkn]]

Mais merci !

1
Sujet : [php]Case à décocher
   Retour haut de page
Consulter la version web de cette page