MySQL et PHP - sélectionner / listes option et montrant des données aux utilisateurs qui me permet encore de générer des requêtes
-
23-09-2019 - |
Question
Désolé pour le titre peu claire, un exemple va éclaircir les choses:
TABLE: Scenario_victories
ID scenid timestamp userid side playdate
1 RtBr001 2010-03-15 17:13:36 7 1 2010-03-10
2 RtBr001 2010-03-15 17:13:36 7 1 2010-03-10
3 RtBr001 2010-03-15 17:13:51 7 2 2010-03-10
ID
et timestamp
sont insertions automatiquement par la base de données lorsque les 4 autres champs sont ajoutés.
La première chose à noter est qu'un utilisateur peut enregistrer plusieurs playings du même scénario (scenid) à la même date (playdate) peut-être avec le même résultat (côté = gagnant). D'où la nécessité pour l'ID unique et horodatages pour faire bonne mesure.
Maintenant, sur leur page d'utilisateur, j'afficher leur histoire de jeu enregistrée sous forme de liste <select><option>...
avec 2 boutons à la fin - Delete Record
et Go to Scenario
Mon script prend la scenid
et après avoir frappé quelques autres tables revient avec quelque chose de plus convivial comme:
(playdate) (from scenid) (from side)
#########################################################
# 2010-03-10 Road to Berlin #1 -- Germany, Hungary won #
# 2010-03-10 Road to Berlin #1 -- Germany, Hungary won #
# 2010-03-10 Road to Berlin #1 -- Soviet Union won #
#########################################################
[Delete Record] [Go To Scenario]
en HTML:
<select name="history" size=3>
<option>2010-03-10 Road to Berlin #1 -- Germany, Hungary won</option>
<option>2010-03-10 Road to Berlin #1 -- Germany, Hungary won</option>
<option>2010-03-10 Road to Berlin #1 -- Soviet Union won</option>
</select>
Maintenant, si vous deviez mettre en évidence le premier enregistrement et cliquez sur Go to Scenario
il y a assez d'informations là pour moi pour analyser et produire le scénario exact que vous voulez voir. Toutefois, si vous deviez choisir Delete Record
il n'y a pas -. Je le playdate
et je peux analyser le scenid
et side
de ce qui est énuméré, mais dans cet exemple les trois documents aurait le même résultat
Je me apparais avoir peint dans un coin. Quelqu'un at-il une suggestion quant à la façon dont je peux obtenir des données uniques d'identification (ID
et / ou timestamp
) pour monter le long de ce formulaire sans montrer à l'utilisateur?
PHP uniquement s'il vous plaît, je dois être conforme NoScript!
La solution
Vous pouvez définir un attribut value
sur vos options et faire contenir la ID
(qui est unique) de vos données:
<select name="history" size=3>
<option value="1">2010-03-10 Road to Berlin #1 -- Germany, Hungary won</option>
<option value="2">2010-03-10 Road to Berlin #1 -- Germany, Hungary won</option>
<option value="3">2010-03-10 Road to Berlin #1 -- Soviet Union won</option>
</select>
Ensuite, lors de la réception des données qui a été affiché, $_POST['history']
contiendra les ID
qui correspondent à l'entrée choisie par l'utilisateur.
Et, comme ce ID
est unique, vous pouvez utiliser pour identifier, sans aucun doute, vos données.
Le contenu de l'attribut value
, lorsqu'il est réglé, est transmis au serveur lorsque le formulaire est soumis -. Il n'est pas affiché à l'utilisateur
Si aucun value
est défini pour une option, le navigateur passera le contenu de cette option sur le serveur, lorsque le formulaire est soumis -. Qui est ce que vous obtenez
En sidenote: comme avec tout soumis d'un utilisateur, vous devez vérifier que la valeur reçue pour $_POST['history']
est valable, sûr, et tout ce qui - il doit être un entier, il devrait être une une des valeurs que l'utilisateur peut accès, ...