Faire un UPDATE uniquement pour les checkbox modifiées
cs_Surfsp33
Messages postés44Date d'inscriptionjeudi 27 décembre 2007StatutMembreDernière intervention27 février 2012
-
27 févr. 2012 à 09:52
flasher_13
Messages postés55Date d'inscriptionmercredi 2 février 2005StatutMembreDernière intervention 2 avril 2012
-
27 févr. 2012 à 18:27
Bonjour,
Je cherche une méthode pour faire un update via PHP mais uniquement des checkbox que la personne aura modifiés pas de l'ensemble des checkbox.
Voilà à quoi ressemble le formulaire:
Voilà à quoi ressemble ma base de données :
Et voilà mon code :
<?php
include('include/cnx_mysql.php');
// ON VERIFIE SI IL Y A DEJA DES DONNEES POUR CETTE PERSONNE
$sql 'SELECT COUNT(*) FROM test WHERE id_user "5"';
$req = mysql_query($sql) or die('Erreur SQL !
'.$sql.'
'.mysql_error());
$data_count = mysql_fetch_row($req);
$number_of_rows = $data_count[0];
mysql_free_result($req);
// ON RECUPERE LES DONNEES POUR COCHER LES CASES DEJA ENREGISTREES
if(isset($_POST['id_user'])) {
if (isset($_POST['plage1'])) {$plage1 = 1;} else {$plage1 = 0;}
if (isset($_POST['plage2'])) {$plage2 = 1;} else {$plage2 = 0;}
if (isset($_POST['plage3'])) {$plage3 = 1;} else {$plage3 = 0;}
if (isset($_POST['plage4'])) {$plage4 = 1;} else {$plage4 = 0;}
// SI LA PERSONNE A DEJA DES DONNEES ON FAIT UN UPDATE
if ($number_of_rows !=0) {
$sql = 'UPDATE test SET plage1="'.$plage1.'", plage2="'.$plage2.'", plage3="'.$plage3.'", plage4="'.$plage4.'" WHERE id_user=5';
mysql_query($sql) or die('Erreur SQL !'.$sql.'
'.mysql_error());
mysql_close();
echo "Modification effectuée";
}
// SI NON ON FAIT UN INSERT
else {
$sql = 'INSERT INTO test(id,id_user,plage1,plage2,plage3,plage4) VALUES("","5","'.$plage1.'","'.$plage2.'","'.$plage3.'","'.$$plage4.'")';
mysql_query($sql) or die('Erreur SQL !'.$sql.'
'.mysql_error());
mysql_close();
echo "Enregistrement effectué";
}}
if ($number_of_rows !=0) {
include('include/cnx_mysql.php');
$sql 'SELECT * FROM test WHERE id_user "5"';
$req = mysql_query($sql) or die('Erreur SQL !
'.$sql.'
'.mysql_error());
$data = mysql_fetch_assoc($req);
mysql_close();
}
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<!--[if lt IE 9]>
<script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->
<title>Test</title>
</head>
<form method="post" action="<?php echo $_SERVER['REQUEST_URI'];?>">
Cocher vos disponibilités :
/> <label for="plage1">00h - 06h</label>
/> <label for="plage2">06h - 12h</label>
/> <label for="plage3">12h - 18h</label>
/> <label for="plage4">18h - 00h</label>
</form>
</html>
Donc pour la partie :
$sql = 'UPDATE test SET plage1="'.$plage1.'", plage2="'.$plage2.'", plage3="'.$plage3.'", plage4="'.$plage4.'" WHERE id_user=5';
Comment arriver à ne faire l'UPDATE que sur les valeurs qui sont modifiées ?
Parce que là je vous ai simplifié le formulaire mais dans la réalité j'ai environ 50 checkbox différente et il serait inutile et lourd de faire l'update sur les 50 systématiquement. De plus je veux pouvoir envoyer un email d'information qui avertira des changements et uniquement des changements.
flasher_13
Messages postés55Date d'inscriptionmercredi 2 février 2005StatutMembreDernière intervention 2 avril 2012 27 févr. 2012 à 18:27
Bonjour, je pense qu'il faut que tu gère celà avec une chaine $sql qui se créée automatiquement comme suit:
<?php
// ON RECUPERE LES DONNEES POUR COCHER LES CASES DEJA ENREGISTREES
if(isset($_POST['id_user'])) {
$sql = 'UPDATE test SET';
if (isset($_POST['plage1'])) {$plage1 = 1;$sql.='plage1 ='.$plage1.',';} else {$plage1 = 0;}
if (isset($_POST['plage2'])) {$plage2 = 1;$sql.='plage2 ='.$plage2.',';} else {$plage2 = 0;}
if (isset($_POST['plage3'])) {$plage3 = 1;$sql.='plage3 ='.$plage3.',';} else {$plage3 = 0;}
if (isset($_POST['plage4'])) {$plage4 = 1;$sql.='plage4 ='.$plage4.',';} else {$plage4 = 0;}
//ON ENLEVE LA DERNIERE VIRGULE
$sql=substr($sql,0,strlen($sql)-1);
//ON TERMINE LA REQUETE
$sql.=" WHERE id_user=5";
//AFFICHAGE POUR VERIFIER UNIQUEMENT
exit('$sql'); // A suprimmer si ça fonctionne
// SI LA PERSONNE A DEJA DES DONNEES ON FAIT UN UPDATE
if ($number_of_rows !=0) {
mysql_query($sql) or die('Erreur SQL !'.$sql.'
'.mysql_error());
mysql_close();
?>