Update avec des cases à cocher (php / sql)


supeva
WRInaute discret
WRInaute discret
 
Messages: 211
Inscription: 8 Juil 2008

Update avec des cases à cocher (php / sql)

Message le Lun Fév 23, 2009 11:56

Bonjour,
je suis embêter avec une mise à jour de cases à cocher.
ça fait un bon moment que je fais des maj sur les boutons radio, listes déroulantes... mais le problème des cases à cocher vient d'être posé et tout s'embrouille dans ma tête :?...

Je vous explique rapidement.

J'ai une table ABONNE, SEGMENT et LIENSEGMENT
Un abonné peut être associé à plusieurs segment d'où le fait la table LIENSEGMENT qui rassemble l'ensemble de lien entre ces 2 tables.

LIENSEGMENT(num_lien, num_abo, num_seg);

J'arrive à afficher les segments liés à l'abonné mais comme je vous le disais pour mettre à jour c'est une autre paire de manche :) !

J'avais penser à la solution de tout effacer et tout réécrire mais bon pas très optimiser je trouve.

Voici ce que j'avais fait...merci de votre aide :)

Code: Tout sélectionner
$req_seg = mysql_query("SELECT num_seg FROM segment");

$req_lien_seg = mysql_query("SELECT num_seg
                             FROM liensegment
                       WHERE num_abo = ".$_GET['idabo']."
                      ORDER BY num_seg");

$nb_seg = mysql_num_rows($req_seg);
$nb_lien = mysql_num_rows($req_lien_seg);
         
for ($i=1;$i<=$nb_seg;$i++) // on parcourt le nb de segment enregistré dans la base pour connâitre le nombre de boucle à faire.
   {
     for ($p=1;$p<=$nb_lien;$p++) // on parcour le nb de lien enregistré avec cet utilisateur
       {
          if ($_POST['checkbox'.$i.''] <> mysql_result($req_lien_seg,($p-1),0)) //si on trouve la checkbox cochée associée à l'abo
          {
          // delete
            }
         
        if ($_POST['checkbox'.$i.''])
         {
          // insert
         }
         }         
    }

tonguide
WRInaute passionné
WRInaute passionné
 
Messages: 1407
Inscription: 28 Nov 2003

Re: Update avec des cases à cocher (php / sql)

Message le Lun Fév 23, 2009 14:05

Une petite remarque, le "num_lien" de ta table "LIENSEGMENT" ne sert à première vue à rien du tout.
Tu devrais juste garder "num_abo" et "num_seg" et les mettre tous les 2 en clé primaire (afin que la liaison soit unique).

Ensuite, même si tu ne trouves pas ça optimisé, j'opterai quand même pour la suppression et un multi insert ensuite.

Ça ne va pas de générer de clé auto incrémenté étant donné que tu n'aura plus de "num_lien" et tu fais finalement moins de requete (une ou tu supprimes tout, et une ou tu insères tout).

Attention également à ton <num_abo=".$_GET['idabo']."> si ton $_GET n'est pas contrôlé, c'est une faille assez grossière et facile à détecter.


Bacteries
WRInaute passionné
WRInaute passionné
 
Messages: 1369
Inscription: 27 Mai 2004

Re: Update avec des cases à cocher (php / sql)

Message le Lun Fév 23, 2009 14:08

Un algo :
Code: Tout sélectionner
listeCaseCochee = getCaseCochee(); ## ton formulaire quoi
listAbonnement = getListeAbonemment(); ## ce que tu as en base

Pour chaque abonnement de listAbonnement {
  Si non présent dans listeCaseCochee alors
     Suppression du lien
}
Pour chaque caseCochee de listeCacheCochee {
  Si non présent ans listAbonnement alors
    Création du lien;
}


Donc en gros tu auras un tableau des case cochées, un autre la liste des assos en base, tu regarde les différence pour créer ou supprimer ce qui a changé.


Si vous avez aimé cette discussion, partagez-la sur vos réseaux sociaux préférés :

Lectures recommandées sur ce thème :



Qui est en ligne

Utilisateurs parcourant ce forum: Google Adsense [Bot] et 2 invités