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 !
Si la case est coché elle sera à true dans post sinon non. Pour ça ta isset et array_key_exist
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
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
En tout cas merci a vous deux , je vais essayer ça !
Dans ce cas angular
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>
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
Mais merci !