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

Solutions (8)
Tags :
  • MySQL
  • table
  • Php
  • Script
  • Programmation
, Programmation (collector) |
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 !!!
Contenus similaires
  • Autres pages sur : php entrer unique defini titre editer
Meilleure solution
partage
, Ex-AdMiN |
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 à :

  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 :

  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 :) 
  • Commenter cette solution |
Score
0
òh
òi
, Programmation (collector) |
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 ....
  • Commenter cette réponse |
Score
0
òh
òi
, Ex-AdMiN |
Je mange et je te prépare une petite réponse ;)  (enfin la réponse)
  • Commenter cette réponse |
Score
0
òh
òi
, Programmation (collector) |
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 ...
  • Commenter cette réponse |
Score
0
òh
òi
|
Salut,
andrelec1 a dit :
...
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: 
  • Commenter cette réponse |
Score
0
òh
òi
|
Lire une table en PHP

  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. ?>
  • Commenter cette réponse |
Score
0
òh
òi
, Ex-AdMiN |
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.
  • Commenter cette réponse |
Score
0
òh
òi
|
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
  • Commenter cette réponse |

Ce n'est pas ce que vous cherchiez ?

Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS