prise de tête avec foreach, sql et case à cocher

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : prise de tête avec foreach, sql et case à cocher

par webaida » 24 mars 2009, 17:48

Construits ton formulaire à partir d'une liste associant des ID aux noms des programmes.
Lors de ton traitement, s'il manque des éléments par rapport à ta liste, ça veut dire qu'ils étaient en disabled.

par NHL92 » 24 mars 2009, 17:21

Salut webaida,

Merci pour ta solution mais perso je voyais plus une solution PHP/SQL sur la page de traitement car si le poste client refuse le javascript (même si c'est rare, je te le concède) ta solution devient caduque :)

J'file me cramer quelques neurones :lol:

par webaida » 24 mars 2009, 17:07

Je ferai un traitement en amont en javascript. En fonction de ce que l'internaute coche, tu modifies le contenu d'une ou plusieurs variables cachées et ce sont ces variables que tu traites coté serveur.

Ex :
[ ] Excel (non coché)
[x] Word (coché)
[/] Paintbrush (disabled)

hidden_excel = 0
hidden_word = 1
hidden_paintbrush = 0

Et en cliquant sur la boite a cocher Excel, ca mettrait hidden_excel à 1.
Tu regardes ensuite toutes les variables 'hidden_', tu as le nom du programme et son état. Ou alors tu associes les noms des programmes a des ID etc.

par NHL92 » 24 mars 2009, 16:50

Re,

J'y ai pensé, c'est d'ailleurs ce que j'ai fait mais j'ai un autre souci.

J'ai une date butoire sur la case à cocher et l'internaute n'a plus le droit d'agir à partir de cette date, la date à cocher se grise mais comme je la "disable", elle n'est plus prise en compte par le foreach ce qui fait que l'insert ne se fait plus. Vous voyez le blème ?

Merci de votre aide. Je vois pas comment faire :s

NHL92

par julian » 20 mars 2009, 18:32

Une solution, peut être un peu plus barbare, mais tout aussi efficace (et qui te permettra également de supprimer les éléments desquels il se "désabonne") consiste à ne pas te poser de question, et à tout supprimer au moment de la validation, pour ensuite pouvoir réinsérer les cases cochées sans chercher à savoir si elles étaient déjà cochées avant ou pas :)
C'est peut-être même mieux ça...

par Ryle » 20 mars 2009, 13:08

Une solution, peut être un peu plus barbare, mais tout aussi efficace (et qui te permettra également de supprimer les éléments desquels il se "désabonne") consiste à ne pas te poser de question, et à tout supprimer au moment de la validation, pour ensuite pouvoir réinsérer les cases cochées sans chercher à savoir si elles étaient déjà cochées avant ou pas :)

par NHL92 » 20 mars 2009, 10:53

Bonjour julian et merci de t'être penché sur mon problème.
Je n'ai pas moyen de tester ça tout de suite mais je reviens vers toi pour te dire ce qu'il en est.
Intéressante solution

NHL92

par julian » 20 mars 2009, 09:51

MySQL propose une syntaxe REPLACE similaire à celle d'un INSERT.
L'avantage, c'est qu'avec REPLACE, il va vérifier l'existance d'une ligne avant insertion, et si elle existe déjà, il remplace.

http://dev.mysql.com/doc/refman/5.0/fr/replace.html

prise de tête avec foreach, sql et case à cocher

par NHL92 » 20 mars 2009, 01:25

Bonsoir,

Pouvez-vous m'aider car j'ai un peu mal à la tête comme un palet dans les gencives, ca fait pas du bien je peux vous assurer :)

Voilà j'ai une page avec une série de programmes auxquels je peux m'abonner. En face de chaque programme une case à cocher.

Mon but : Au moment ou l'internaute clique sur le bouton, j'aimerai que

- si son choix n'est pas en base qu'on fasse un insert

- si il y a déjà une valeur pour ce programme qu'on update en fonction de ce qu'il aura fait

Je ne sais pas si c'est clair.

Pour le moment j'ai traité le tout en 2 opérations mon formulaire d'un côté, mon script php de l'autre.

Ci-dessous un extrait du code :
if ($_POST["programme"]) { //case cochée ?
foreach($_POST["programme"] as $index => $valeur) {
//ici les paramètres de connexion
$query = "INSERT INTO programmes (id_liaison,id_client,id_programme) values ('',".$_SESSION["id"].",".$valeur.")"; //j'alimente ma table de liaison
$result = mysql_query($query);
}
Je teste si la case est cochée mais je dois tester même les non cochées...

Merci de votre aide.

Cordialement,

NHL92