liste deroulante avec les données qui sont dans un champ

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 : liste deroulante avec les données qui sont dans un champ

par fabrice88250 » 03 déc. 2008, 18:21

effectivement nicolas ne peu pas faire de cadeau a nicolas mais si il est le dernier de la liste a faire le tirage et que tout les autres on deja étés tiré du coup nicolas ne fait de cadeau a personne.
Comment eviter qu'a la fin que le nom du tirreur soit le meme qu'il reste a tiré ?

pour le reste je part sur le principe que les gens sont suffisament inteligeant pour ne pas allé selectionné un autre nom que le leur dans la liste. Apres c'est vrai que de securisé la chose serait bien mais j'ai pas encore reflechi a ça. peut etre

par sadeq » 03 déc. 2008, 18:08

Je t'ai déjà donné la solution dans mon post précédent, pour éviter de faire un cadeau à soi-même.

Mais, revenons au problème de la liste : Imagine que pascal fasse un premier tirage, son nom va être donc retiré de la liste. Mais le problème est que pascal peut choisir n'importe quel autre prénom pour faire d'autres tirages tant que cette liste lui propose des prénoms !! d'autant plus que ton programme ne fait aucun contrôle la dessus. Et n'oublie pas que ton système va être multi-utilisateur.

par fabrice88250 » 03 déc. 2008, 17:54

ah oui deolé cette phrase n'a plus lieu d'être.
elle serra remplacée par : selectionne ton prénom dans la liste, clique sur ok afin de voir a qui tu dois faire un cadeau.

par exemple un fois que pascal a selectionné son prenom et qu'il a cliqué sur ok il saura donc a qui il doit faire un cadeau et du coup il n'a plus besoin de se trouvé dans la liste car c'est 1 cadeau 1 personne sachant qu'une personne ne peu pas faire plus de 1 cadeau (soit un tirage)

En bref c'est le principe du chapeau. pascal met sa main dans le chapeau, il tire un nom et c'est tout apres c'est a laetitia de tiré un nom qui se trouve dans le chapeau.

mais bon sur le principe tout fonctionne sauf le fait qu'il arrive que pascal doit faire un cadeau a pascal. :lol: y'a til un solution pour evité se genre de tirage ?

par sadeq » 03 déc. 2008, 16:00

Voilà comment :

Code : Tout sélectionner

SELECT prenom FROM tirage WHERE dispo=0 and prenom <> '".$_POST['prenom']."' ORDER BY RAND() LIMIT 1
m'enfin, je ne comprends pas bien ton système de tirage :boire4:

Bon, je vais déchiffrer les champs de la table tirage et la logique des tes scripts :
  • prenom = le prénom d'un mec ou d'une nana
    aqui = le prénom de celui qui doit offrir, par tirage au sort, un cadeau à ce mec ou à cette nana
    dispo = 1 ou 0 où 1 désigne que ce mec ou cette nana a déjà été tiré au sort au moins une fois
Donc:
Dans le programme de tirage au sort:
La requête SQL :

Code : Tout sélectionner

SELECT prenom FROM tirage WHERE dispo=0 and prenom <> '".$_POST['prenom']."' ORDER BY RAND() LIMIT 1
Tire au hasard un prenom d'un mec ou d'une nana qui n'a pas encore bénéficié d'une promesse de cadeau (dispo=0) et qui n'est pas le même que celui qui lance le tirage (prenom <> $_POST['prenom'])

La requête SQL:

Code : Tout sélectionner

UPDATE tirage SET dispo=1, aqui='".$_POST['prenom']."' WHERE prenom='".$row[0]
Enregistre que le prenom du mec ou de la nana tiré au hasard a bénéficié d'une promesse de cadeau, et pour cela on met "dispo=1", puis inscrit aussi le prénom de celui qui a lancé le tirage et donc qui doit offrir un cadeau à notre mec ou nana. C'est pour ça qu'on met son prénom dans "aqui"

De ce fait, on comprend que le rôle du formulaire est de permettre à un mec ou une nana de lancer une tirage au sort d'un prénom d'un mec ou à d'une nana à fin de lui offrir un cadeau.

Mais, ce qui me gène est la présence de cette liste déroulante. Si son rôle se limite à permettre à l'utilisateur de retrouver son prénom dans le tas, je n'en vois pas une nécessité. D'autant plus que tu veux enlever, de cette liste, les prénoms qui sont déjà enregistrés dans le champ "aqui" cela veut dire, pour moi, que tu veux qu'un mec ou une nana ne puisse tenter le tirage au sort qu'une seule fois.

Du coups, ma question est à quoi sert vraiment cette liste déroulante si le prénom du mec qui utilise ton formulaire n'est pas dedans ou encore pire, elle permettrait à tout utilisateur d'user le prénom d'autrui pour effectuer un tirage et enfin à quoi sert-elle pour un utilisateur qui connait son prénom? Puisque dans ton message sur le formulaire tu dis :

Code : Tout sélectionner

<p>Entre ton prénom pour savoir a qui tu dois faire un gros cadeau pour noël puis clique sur le bouton OK</p>
en faisant allusion à cette liste.

par fabrice88250 » 03 déc. 2008, 15:34

ah ben effectivement c'est pas de chance. j'ai fais le test 5 fois de suite et a chaque fois y'en a au moins un qui se tir lui meme.

existe - il une methode pour reglé ce probleme a part vidé la colonne aqui qui oblige a refaire le tirrage complet ? ?

par guilt92 » 03 déc. 2008, 14:38

A ce moment la je verrais bien quelque chose du style :

Code : Tout sélectionner

SELECT prenom FROM tirage WHERE prenom NOT IN (SELECT aqui FROM tirage)
Mais attention a bien faire tout le tirage pour etre sur de ne pas avoir une abérration ou il ne resterait que un prénom qui serait celui qui n'a pas encore tiré au sort... Si ce cas se présente il faut vider la colonne "aqui" et recommencer l ensemble du tirage...

par fabrice88250 » 03 déc. 2008, 13:34

voila ma table :

CREATE TABLE `tirage` (
`idtir` mediumint(2) unsigned NOT NULL auto_increment,
`prenom` varchar(16) character set latin1 collate latin1_german2_ci default NULL,
`dispo` varchar(2) character set latin1 collate latin1_german2_ci default NULL,
`aqui` varchar(16) default NULL,
PRIMARY KEY (`idtir`)
) ;

mon formualire :

Code : Tout sélectionner

<form action="tirage.php" method="post" name="tirage"> <p>Entre ton prenom pour savoir a qui tu dois faire un gros cadeau pour noel puis clique sur le bouton OK</p> <p> Prénom <select name="prenom"> <?php // exécuter la requête SQL $sql = "select * from tirage "; $result = mysql_query($sql); // lire le résultat while ($result && $row = mysql_fetch_array($result)){ // construire les options de la liste déroulante echo "<option value=\"" . $row['prenom'] . "\">" . $row['prenom'] . "</option>"; } ?> </select> <label> <input type="submit" name="ok" value="OK" /> </label> </p> </form>
ma page de validation
<?php 
$query = "SELECT prenom FROM tirage WHERE dispo=0 ORDER BY RAND() LIMIT 1";   
$result = mysql_query($query);   
$row = mysql_fetch_row($result);
   
if($row['prenom'] != $_POST['prenom'])
{
echo $_POST['prenom']; 
echo " tu devras faire un cadeau à  ";  
echo $row[0];   
$query = "UPDATE tirage SET dispo=1, aqui='".$_POST['prenom']."' WHERE prenom='".$row[0]."'";   
$result = mysql_query($query);   

mysql_close(); 
}
else
{ 
echo "choix impossible car c'est votre nom qui a été tiré au sort --> essai encore ";
}
?>

par guilt92 » 03 déc. 2008, 13:15

Bonjour,

Cela dépend de la structure de la table.

Si il y a pour chaque entrée de prénom un champ "prenom" avec la valeur et un champ "aqui" avec une valeur 0 ou 1 (1 quand le prénom est déjà acquis) alors il suffit dans la requete d'exclure les prénoms pour lesquels "aqui" vaut 1 (par exemple)
$sql = "select prenom from tirage WHERE aqui != 1"; 
Après si c'est une autre table "aqui" dans laquelle il y a tous les prénoms il faudra faire une sélection de la différence entre les deux tables...

Donne un peu plus de détails si possible la structure de la table notamment.

par fabrice88250 » 03 déc. 2008, 13:07

merci grace a vous j'avance ^^.
la liste s'affiche bien maintenant par contre comment faire en sorte d'exclure certains nom de la liste ?
la liste de prenom est donc créer avec un champ "prenom".

j'ai un autre champ dans le quel je stock les prenoms qui on deja voté "aqui".
je retrouve donc dans mon champ "aqui" des prenoms qui sont dans le champ "prenom"

donc comment faire pour que les prenoms qui sont dans le champ "aqui" diparraissent de la liste créé grace au champ prénom ?

par sadeq » 03 déc. 2008, 01:38

Oui, comme ça:
Prénom <select name="prenom">
<?php
// exécuter la requête SQL
$sql = "select * from tirage";
$result = mysql_query($sql);

// lire le résultat
while ($result && $row = mysql_fetch_array($result)){
   // construire les options de la liste déroulante
   echo "<option value=\"" . $row['prenom'] . "\">" . $row['prenom'] . "</option>";
}
?>
</select>

liste deroulante avec les données qui sont dans un champ

par fabrice88250 » 03 déc. 2008, 00:46

bonjour,
est il possible de créer un liste deroulante (pour un formulaire) avec les données qui seraient stockées dans un champ 'prenom' d'une table nommée 'tirage'?