Je pose cette question parce que je ne suis pas sûr de la meilleure façon de résoudre mon problème.
Problème: J'ai une liste déroulante pré-peuplée de 1 000 ou plusieurs numéros. Je dois limiter quels numéros apparaissent dans la liste déroulante sur la base de laquelle l'utilisateur utilise la liste déroulante. P>
Solution que j'ai pensé à: p>
permet de dire que c'est mon HTML STRY>: P> =======================
| User1 | 101 |
| User2 | 101 |
| User2 | 102 |
| User2 | 103 |
| User3 | 103 |
=======================
8 Réponses :
J'irais seulement avec les étapes 2-3 de votre approche; Cependant, je ne stockerais pas les chiffres de la manière dont vous avez montré. Une meilleure approche serait de les stocker dans une table appelée user_value -or quelque chose comme ça -: juste parce que vous pouvez ensuite ajouter / supprimer / supprimer / mettre à jour / mettre à jour les valeurs à l'avenir par opposition à la réalisation de Pour analyser la valeur délimitée par des virgules. P> J'éviterais d'utiliser JQuery pour simplement "masquer" des choses parce que JavaScript peut être désactivé par l'utilisateur et il peut finalement soumettre la valeur qu'il veut (visible ou invisible) - Ne faites jamais confiance à l'utilisateur utilisateur. P> en conclusion, faites ceci: p>
user_value code>. li>
ol> p>
Icarus a raison - cacher des choses à JQuery n'est pas du tout en sécurité surtout si les utilisateurs ne sont pas censés avoir accès à eux s'ils ne sont pas authentifiés comme un rôle spécifique / type d'utilisateur.
@LCARUS J'ai mis à jour ma table de base de données pour refléter votre suggestion. Et j'ai également ajouté une note sur la sécurité, à l'aide de Show / Hide est acceptable (mais je ne sais pas si c'est la meilleure façon) dans cet exemple spécifique.
Je suis toujours un peu confus sur vos contraintes, mais en fonction de votre commentaire: p>
La liste sera pré-peuplée côté client (à partir d'un serveur que je ne peux pas accéder / modifier), puis l'appel AJAX à une différence DB (simple, deux colonnes), puis renvoyez les valeurs à l'appel AJAX d'origine, où puis JS masque les valeurs non renvoyées (ou affichent les valeurs retournées, si elles sont initialement cachées.) P> blockQuote>
Pourquoi ne pas créer de service "unificateur" (sur un serveur) afin de ne faire qu'un appel AJAX (du client)? p>
http: //mysite/myservice.aspx/geoptionsforuser (101) code> p>
Ce service passerait aux deux bases de données une liste de la liste de l'option autorisée pour l'ID utilisateur donné. Cela permet au serveur de faire la majeure partie des lourdes levées et de réduire considérablement la quantité de jQuery sur le client. P>
Plus d'info: h3>
L'URL est ce que JQuery utilise pour faire l'appel Ajax. P>
La chose la plus simple à faire est: p>
- Créer une page Web appelée
http: //mysite/myservice.aspx code> li>
- Ajoutez une méthode publique appelée getOptionsForuser () qui accepte un entier et renvoie une liste de numéros. C'est la logique «unificateur» qui interroge les deux bases de données. Faire la méthode Ajax-appelable en ajoutant le webmethod < / a> attribut. li>
- Dans la page Web existante où vous souhaitez peupler vos déposées, vous faites un Ajax Appelez à
http: //mysite/myservice.aspx/geoptionsforuser code> et transmettez l'ID utilisateur comme paramètre AJAX. LI> ol>
Le service "unificateur" que vous parlez de sons génial, mais je suis assez perdu par cette réponse. Je ne connais pas le tout ajax ... alors je suppose que c'est pourquoi je ne comprends pas ce que myService / getOptionsForUser (101 ) est
Si c'est la table de base de données d'exemple et un exemple d'élément SELECT. Ensuite, je pense que la meilleure méthode serait de ne rien écrire sur votre propre strong> et laissez simplement la base de données choisir ce qu'il faut partager et où partager. Nous allons avec le codage. Je vais essayer d'expliquer ce que j'écris et comment j'écris; Puisque vous êtes un débutant: -) p> Le code HTML pour votre travail, serait simple comme ce p> code HTML pour vous h2>
Response.Write("Hello World!");
Grande réponse @afzaal. Merci pour toutes les explications. Je suis toujours un peu confus cependant. Pourriez-vous casser le code dans les fichiers? Cela peut m'aider à comprendre encore. Par exemple, je ne sais pas où mettre sweetecurity.currenttuserid; ... entre autres. Excellente explication, je suis juste aussi de nouveaubie pour l'obtenir!
Vous êtes le bienvenu! :-) J'ai expliqué le fonctionnement de la classe Websecurity code> de la classe et de ses méthodes et ses propriétés :-) Je pense que vous pouvez maintenant le comprendre mieux :-) .. plus suite, vous pouvez également vérifier certains liens MSDN Pour une meilleure explication, n'hésitez pas à revenir pour aider si vous ne trouvez pas facile de comprendre :)
J'ai décerné cela la prime parce que le temps était à court et c'était la réponse la plus utile et la plus détaillée.
@Brett, aww Merci beaucoup Brett :-) J'apprécie vraiment votre aide pour moi :)
Je pense qu'un bon moyen de le faire serait utiliser JSON pour tous les utilisateurs. Préparer une matrice JSON pour les utilisateurs avec des options et le rendre basé sur les utilisateurs pour peupler des options. par exemple.
var user1 = '["101","102","103"]';
Ceci est un exemple qui montre comment JQuery Ajax et PHP fonctionne pour rassembler:
Par exemple, lorsqu'un bouton a cliqué sur un AJAX Envoyer une commande à la langue latérale du serveur (PHP) et PHP PROCESS qui commandent et affiche une réponse appropriée : p> et voici le code PHP avec nom alerterme.php: p>
problème simple. Je vais essayer de répondre à votre manière dont vous avez pensé.
Les étapes 2, 3 et 4 partagent un bloc de code unique, alors combinez-les ensemble.
Depuis que vous dites cela - vous avez des entrées pré-peuplées, je serais passé avec cette approche -
Enregistrez d'abord tous les éléments d'une matrice JS à la page Load- P>
//getting the id of the user and passing to AJAX call $.ajax({ url: '', dataType: 'json', type: 'GET', success:function(data){ // other codes var userItemList = []; //list of items for this user [102,103, etc] $("select").empty(); $("select").append(alloptions[0]) //the first one since it is the null one for(var i = 0; i < userItemList.length; i++){ for(var j = 0; j < alloptions.length; j++){ if (parseInt($(alloptions[j]).val()) == userItemList[i]){ $("select").append(alloptions[j]); } } } } });
puis pour chaque ID utilisateur après avoir obtenu la liste des éléments, le montrer et les masquer comme suit - p>
var alloptions = $("select").find("option").get();
Si vous n'avez besoin que de renseigner une fois à la première page chargée, c'est la meilleure option de moi
Exemple: P>
HTML: <select id="auto-populated"> <?php //Next three lines you need if you dont have the user_id stored before in your code require('db.php'); session_start(); $user_id = $_SESSION['user_id']; //Selecting only the needed options to put here $sql = "SELECT dropdown_value, dropdown_option FROM tbl_dropdown WHERE dropdown_number='your-filter-kriteria-here'"; $result = mysql_query($sql, $db) or die(mysql_error().': '.$sql); //After you got the filtered results from database, print them in the <select> echo "<option value=' '>Please select one...</option>"; while ($item = mysql_fetch_assoc($result)) { echo "<option value='".$item['dropdown_value']."'>".$item['dropdown_option']."</option>"; } ?> </select>
Peu importe la route que vous allez, considérez que vous devez vérifier sur le côté serveur que l'utilisateur a sélectionné une option appropriée. Sinon, tout utilisateur peut utiliser les outils de débogage de leur navigateur pour sélectionner une option non valide, ce qui pourrait être un risque de sécurité.
@ Deason Merci pour la tête. Je garderai cela à l'esprit quand je (espérons-le) arriver à ce point!
Comment renduez-vous cette liste du côté serveur? Votre meilleur pari va remplir cette liste sur le côté serveur car vous devez savoir quelles autorisations chaque utilisateur a; Cela vous empêchera de devoir vous soucier de tout utilisateur intelligent qui tente d'abuser d'un appel Ajax.
Donc, il doit être pré-peuplé avec tous les numéros sur le serveur, puis certains numéros cachés côté client? Veuillez clarifier ce qui est autorisé à arriver où.
@nunzabar c'est correct. La liste sera pré-peuplée côté client (à partir d'un serveur que je ne peux pas accéder à / modifier), puis l'appel AJAX à un Différent B> DB (simple, deux colonnes) puis renvoie les valeurs à l'appel d'origine Ajax , où alors JS masque les valeurs non renvoyées (ou affiche les valeurs retournées, s'ils sont initialement cachés.) C'est comme ça que je vois que cela devait arriver, mais cela pourrait aller différemment s'il y a une solution différente. J'espère que cela aide, laissez-moi savoir si cela n'a pas clarifié.