2010-11-30 17 views
1

J'ai un site (comme beaucoup). Je veux montrer mais désactiver un formulaire particulier selon qu'ils sont connectés ou non. La façon dont je montre si l'utilisateur est connecté est via un cookie défini par PHP. Ce que je me demande est la meilleure façon de désactiver tous les éléments dans le formulaire lorsque l'utilisateur n'est pas connecté.La meilleure façon de désactiver la forme entière sur PHP condition?

La solution que j'ai pour le moment est d'obtenir PHP à echo un peu de JavaScript (jQuery pour être précis) à la page:

 
$("#form_name").children("input, textarea").attr("disabled", "disabled"); 

Est-ce la bonne façon de procéder, ou existe-t-il une meilleure façon de faire les choses?

+0

Cela me semble bon. Si vous avez des éléments supplémentaires (sélectionne/etc) vous pouvez simplement les ajouter dans votre fonction enfants. Bien qu'il y ait un moyen de désactiver le formulaire entier dans jquery que je ne sache pas sur – wajiw

+0

Vous devriez utiliser .find (..) au lieu de .children (..) que ce dernier recherche seulement les enfants immédiats – mikewasmike

Répondre

3

Si vous avez le jeu de cookies lorsque PHP génère votre page, il suffit de définir l'attribut désactivé sur l'élément HTML sans Javascript. Ensuite, si vous avez un formulaire de connexion ajaxy, vous pouvez analyser la réponse de connexion et activer le formulaire en fonction de cela. Si le login n'est pas ajaxy, PHP devrait définir le cookie pour vous et construire la page de manière appropriée.

+0

Parfait - merci! Je voulais être sûr que je le faisais correctement et que je ne manquais pas quelque chose qui fonctionnerait mieux. +1 pour vous mon brave homme merci pour la réponse rapide :-) – Bojangles

+0

Merci! Pour être clair, votre approche originale repose sur JS, mais je le mettrais dans le HTML en ligne. ' désactivé > Ce sera un peu plus bavard, mais ça marchera aussi si js est désactivé. – jxpx777

+0

Hmm bon point avec le manque de JavaScript. Le site que je développe est principalement destiné aux web-devs, et en 2009 seulement quelque chose comme 2,4% des utilisateurs ont désactivé JS, ce qui est acceptable. (http://smorgasbork.com/component/content/article/84-a-study-of-internet-users-cookie-and-javascript-settings) – Bojangles

2

En utilisant jQuery, vous pouvez trouver toutes les entrées, sélectionnez et éléments textarea qui ne sont pas actuellement désactivés et les désactiver, en utilisant le :enabled selector

$("#form_id").find("input:enabled, select:enabled, textarea:enabled").attr("disabled", "disabled"); 
+0

Ah j'ai raté l'étiquette 'select' - merci! De plus, comme tous les éléments de la page sont désactivés ou activés, la ligne ': enabled' n'a pas vraiment d'importance/d'application, mais merci pour la tête haute :-) – Bojangles

1

Si l'utilisateur ne supporte pas Javascript alors bien sûr cette réponse est : Ce n'est pas une bonne idée.

La deuxième utilisation d'entrées désactivées est également une mauvaise idée, un utilisateur malin peut modifier votre page et la réactiver facilement. Cela dit, tout va bien tant que vous vous assurez que les champs que vous voulez désactivé ne sont pas acceptés sur le poste côté serveur.

+0

Bon point avec le JS étant désactivé ... as pour peaufiner la page, le code exécuté lors de la soumission du formulaire vérifiera si l'utilisateur est connecté de toute façon, ce qui devrait être assez sûr je pense. – Bojangles