Update avec des cases à cocher (php / sql)
3 messages
• Page 1 sur 1
-

supeva - WRInaute discret

- Messages: 211
- Inscription: 8 Juil 2008
Update avec des cases à cocher (php / sql)
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
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é

- Messages: 1407
- Inscription: 28 Nov 2003
Re: Update avec des cases à cocher (php / sql)
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.
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é

- Messages: 1369
- Inscription: 27 Mai 2004
Re: Update avec des cases à cocher (php / sql)
Un algo :
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é.
- 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é.
3 messages
• Page 1 sur 1
Lectures recommandées sur ce thème :
- Cases à cocher et PHP
- Open Office 2 : insérer des cases à cocher (et les cocher !)
- XHTML, HTML et cases à cocher
- DREAMWEAVER Probleme cases à cocher dynamique
- Case à cocher + update instantané des infos
- update sql passer :wink: à ;) dans phpbb_posts_text
- UPDATE SQL : nom de champ indiqué par une variable ?
- update php 5 -> php 5.2 date_format
- Erreur php Update
- Php - update de données
Qui est en ligne
Utilisateurs parcourant ce forum: Google Adsense [Bot] et 2 invités
