[Résolu] [php] 5 Entrer unique defini ! ! ! ( Titre a editer )
Forum Programmation : [Résolu] [php] 5 Entrer unique defini ! ! ! ( Titre a editer )
Lire la meilleure réponse, apportée par SiM07.
Bonjours a tous
mon probleme et un peut compliquer ^^
Donc voila je possède une table mysql
je voudrais un table avec dedans 5 entrer ces entrer comporte un champ qui peut prendre comme valeur 8006, 8007, 8008, 8009, 8010 et rien d'autre !
il a y un autre script qui tourne en parallèle qui lui supprimer les entrer de cette page ! ! !
le probleme est que je ne peut pas savoir quel entrer est disponible a l'avance ...
donc je cherche un script php
qui va aller lire la table
repérer quel entrer est disponible !
choisir une entrer disponible au hasard et crée une entrée dedans !!!
Microsoft se fout-il pas ne notre tete avec son XP ???
Pour avoir le problème de max 5 entrer, ce n'est pas simple sauf si port est unique. Ce qui d'après ce que tu as schématisé semble l'être. Au premier abord le port on pense à le stocker dans un entier, en l'occurrence un smallint(4) mais je pense qu'il est bon de le stocker dans un ENUM('8008','8009','8010', ...) NOT NULL UNIQUE. La contrainte UNIQUE et NOT NULL t'oblige à avoir au maximum 5 entrées dans ta table.
Au final tu as une table qui ressemble à :
Code :
|
J'ai mis un password CHAR(32) puisque je part du principe qu'un mot de passe est stocké sous forme hachée (32 caractère, c'est la longueur d'un md5(), pas besoin donc d'un VARCHAR. C'est de l'optimisation mais c'est toujours bon à savoir alors autant faire la remarque
Je ne connais pas tes besoins mais la colonne id me choque. Je vois absolument pas son intérêt et pour moi la clé primaire devrait plutôt être port. Dont on pourrait donc supprimer le unique, une clé primaire l'étant toujours. Enfin tu en as peut être besoin ailleurs, je ne sais pas.
J'ai pas trop compris la phrase :
| Citation : Remarque que le port 8009, et 8010 sont libre |
Il y a des ports qui sont prioritaire par rapport à d'autres ? si oui alors il serait bon de le rajouter dans la base de donnée. Je vais partir du principe qu'ils sont tous égaux pour la suite.
Si ils sont tous égaux, alors l'étape 4 est avant l'étape 3b qui est en fait un cas d'erreur de l'étape 4.
La requête SQL pour l'étape 4 est la suivante :
Code :
|
Cela va te ressortir une ressource, si il n'en ressort rien, alors il n'y a rien de dispo et tu as donc un message d'erreur à afficher. Sinon tu sais faire
J'aimerai bien t'aider ... mais j'ai rien compris à ce que tu as écris !
Si tu décris plus, peut-être je pourrais t'aider
Tu crois que tu vas trouver un script qui va te faire ça ... pourquoi ne pas le faire tout simplement ? ce n'est pas particulièrement compliqué.
Par contre tu as vraiment un gros problème d'orthographe ... la lecture de ton message en deviendrait presque chaotique.
Lire une table en PHP
Code :
|
Message édité par PGM_du_net le 09-09-2009 à 18:12:22
Salut,
| andrelec1 a écrit : ...
|
Lire une entrée au hasard parmi celles présentes, d'accord, mais ça veut dire quoi, "créer une entrée dedans" ?
La recopier dans une autre table ?
Le script qui tourne en parallèle qui supprime ces entrées le fait au hasard aussi ? Et à quel rythme, parce que ta table peut très bien être vide en permanence ?
C'est nébuleux tout ça ...
Répondre à DrSnake
dsl pour le retard j'ai eu des pb d'internet ...
alors la table comporte 5 entrer max !
on peut la représenter de manière suivante :
##########################
# id # port # champ 1 # champ 2 ....
##########################
# 1 # 8008 # speudo # pass # ...
# 8 # 8007 # speudo # pass # ...
# 9 # 8010 # speudo # pass # ...
# 42 # 8009 # speudo # pass # ...
#78 # 8006 # speudo # pass # ...
#############################
Donc le champ id et un champ id normal , avec auto-incrementation !
le champ port est unique avec comme valeur possible seulement 8006, 8007, 8008, 8009, 8010
le probleme n'est pas de faire le script ... mais de m'aider a réalisée des étape du script que je n'arrive pas faire ...
donc la table pourrais par exemple ressembler a ça :
##########################
# id # port # champ 1 # champ 2 ....
##########################
# 1 # 8008 # speudo # pass # ...
# 8 # 8007 # speudo # pass # ...
#78 # 8006 # speudo # pass # ...
#############################
le script :
1. Lie la table => pas compliquer je peut le faire
2. Analise le champ port
3. Remarque que le port 8009, et 8010 sont libre
3b. Si aucun port n'est disponible , on renvoi une erreur ...
4. En choisi un au hasard
5. Envoi la nouvelle ligne => je sais faire ^^
Mon probleme ce situe sur les action 2 3 3b et 4 ...
Merci de votre aide ...
Microsoft se fout-il pas ne notre tete avec son XP ???
Répondre à andrelec1
Je mange et je te prépare une petite réponse
(enfin la réponse)
Voici une piste à explorer, c'est en tout cas une voie que j'aurais essayer si je n'avais que du PHP et une base de donnée MySQL sous la main.
Pour avoir le problème de max 5 entrer, ce n'est pas simple sauf si port est unique. Ce qui d'après ce que tu as schématisé semble l'être. Au premier abord le port on pense à le stocker dans un entier, en l'occurrence un smallint(4) mais je pense qu'il est bon de le stocker dans un ENUM('8008','8009','8010', ...) NOT NULL UNIQUE. La contrainte UNIQUE et NOT NULL t'oblige à avoir au maximum 5 entrées dans ta table.
Au final tu as une table qui ressemble à :
Code :
|
J'ai mis un password CHAR(32) puisque je part du principe qu'un mot de passe est stocké sous forme hachée (32 caractère, c'est la longueur d'un md5(), pas besoin donc d'un VARCHAR. C'est de l'optimisation mais c'est toujours bon à savoir alors autant faire la remarque
Je ne connais pas tes besoins mais la colonne id me choque. Je vois absolument pas son intérêt et pour moi la clé primaire devrait plutôt être port. Dont on pourrait donc supprimer le unique, une clé primaire l'étant toujours. Enfin tu en as peut être besoin ailleurs, je ne sais pas.
J'ai pas trop compris la phrase :
| Citation : Remarque que le port 8009, et 8010 sont libre |
Il y a des ports qui sont prioritaire par rapport à d'autres ? si oui alors il serait bon de le rajouter dans la base de donnée. Je vais partir du principe qu'ils sont tous égaux pour la suite.
Si ils sont tous égaux, alors l'étape 4 est avant l'étape 3b qui est en fait un cas d'erreur de l'étape 4.
La requête SQL pour l'étape 4 est la suivante :
Code :
|
Cela va te ressortir une ressource, si il n'en ressort rien, alors il n'y a rien de dispo et tu as donc un message d'erreur à afficher. Sinon tu sais faire
Répondre à SiM07
Merci , bon la il es un peut tard ( ou tôt ^^ )
je vais bien analyser ce que tu me dit , et crée mon script ...
Merci , car je ne connaissais pas les ENUM et je ne savais pas que l'on pouvais avoir un RAND() dans une requête mysql ....
Microsoft se fout-il pas ne notre tete avec son XP ???
Répondre à andrelec1
Il y a 2273 utilisateurs connus et inconnus. Pour voir la liste des connectés connus, cliquez ici.
