Faire un UPDATE uniquement pour les checkbox modifiées

cs_Surfsp33 Messages postés 44 Date d'inscription jeudi 27 décembre 2007 Statut Membre Dernière intervention 27 février 2012 - 27 févr. 2012 à 09:52
flasher_13 Messages postés 55 Date d'inscription mercredi 2 février 2005 Statut Membre Derniè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.

Comment faire ?

Merci d'avance.

1 réponse

flasher_13 Messages postés 55 Date d'inscription mercredi 2 février 2005 Statut Membre Derniè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();
?>


J'espère t'avoir apporter une solution correcte,

Cdt,

Flasher
0
Rejoignez-nous