Tom's Guide > Forum > Programmation > [Résolu] [php] 5 Entrer unique defini ! ! ! ( Titre a editer )

[Résolu] [php] 5 Entrer unique defini ! ! ! ( Titre a editer )

Forum Programmation : [Résolu] [php] 5 Entrer unique defini ! ! ! ( Titre a editer )

TomsGuide.com : 800 000 inscrits répondent à toutes vos questions high-tech et informatique. Pour obtenir de l'aide, inscrivez-vous gratuitement !

Lire la meilleure réponse, apportée par SiM07.

Mot :    Pseudo :           
 

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 !!!

------------------------------ XD --> peut aussi se dessiner --> XP
Microsoft se fout-il pas ne notre tete avec son XP ???
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 :
  1. CREATE TABLE ressource_dispo (
  2.   id SMALLINT(4) UNSIGNED NOT NULL,
  3.   port ENUM('8006', '8007', '8008', '8009', '8010') NOT NULL UNIQUE,
  4.   pseudo VARCHAR(64) NOT NULL,
  5.   password CHAR(32) NOT NULL,
  6.   PRIMARY KEY(id)
  7. ) ENGINE=InnoDB;



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 :
  1. SELECT port, pseudo, password FROM ressource_dispo ORDER BY RAND() LIMIT 1



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 :)

Liens sponsorisés
Inscrivez-vous ou connectez-vous pour masquer ceci.

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

Répondre à sylfeline

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.

Répondre à SiM07

Lire une table en PHP

 
Code :
  1. <?php
  2.     require "config.php";
  3.     mysql_connect(DB_HOST,DB_LOGIN,DB_PASS);
  4.     mysql_select_db(DB_BDD);
  5.     $sql="SELECT * FROM //la BDD// BY id DESC";
  6.     $req = mysql_query($sql);
  7.     while($data=mysql_fetch_assoc($req)){
  8.             echo "<br>Numéro: <b>{$data['//La BDD//']}</b><br>
  9. }
  10. ?>


Message édité par PGM_du_net le 09-09-2009 à 18:12:22
Répondre à PGM_du_net

Salut,

andrelec1 a écrit :

...
choisir une entrer disponible au hasard et crée une entrée dedans !!!


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 ... :heink:

------------------------------ Quand on lui marche sur les pieds, le serpent hausse les épaules.
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 ...

------------------------------ XD --> peut aussi se dessiner --> XP
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)

Répondre à SiM07
Meilleure 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 :
  1. CREATE TABLE ressource_dispo (
  2.   id SMALLINT(4) UNSIGNED NOT NULL,
  3.   port ENUM('8006', '8007', '8008', '8009', '8010') NOT NULL UNIQUE,
  4.   pseudo VARCHAR(64) NOT NULL,
  5.   password CHAR(32) NOT NULL,
  6.   PRIMARY KEY(id)
  7. ) ENGINE=InnoDB;



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 :
  1. SELECT port, pseudo, password FROM ressource_dispo ORDER BY RAND() LIMIT 1



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 :)

------------------------------ 20minutes.fr, l'information en continu.
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 ....

------------------------------ XD --> peut aussi se dessiner --> XP
Microsoft se fout-il pas ne notre tete avec son XP ???
Répondre à andrelec1
Tom's Guide > Forum > Programmation > [Résolu] [php] 5 Entrer unique defini ! ! ! ( Titre a editer )
Aller à :

Il y a 2273 utilisateurs connus et inconnus. Pour voir la liste des connectés connus, cliquez ici.

Liens