IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Requêtes MySQL Discussion :

rand


Sujet :

Requêtes MySQL

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    519
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 519
    Points : 298
    Points
    298
    Par défaut rand
    Bonour,

    Je voudrais donner un mot de passe aux usr qui s'incrive sur mon site (et donc sur la base de données).

    Jusqu'a present, j'utilise la fonction rand() de php, et je fais un test sur la table MySQL pour verifier que la valeur n'est pas deja attribuée.
    Finalement.. j'ai l'impression que c'est idiot.

    Est-ce qu'en une ligne du type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $requete="INSERT INTO matable (email, mdp) VALUES ('$email', ROUND(CEIL(1000000*RAND())))";
    while (!mysql_query($requete)) {
    }
    Avec une condition d'unicité du type UNIQUE(mdp).
    ca marche ?

    Est-ce que ca va bien renvoyer un FALSE a mysql_query a cause de la condition d'unicite si la valeur aleatoire a deja ete attribué à un autre mdp ? (et donc retenter la requete avec un autre mdp, automatiquement ?)

    Et surtout, est-ce que c'est plus rapide que de faire ma boucle en php qui genere un rand() et verifie avec un SELECT s'il existe deja ou non et qui ensuite fait l'INSERT ?

    merci!

  2. #2
    Membre expert
    Avatar de trotters213
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 571
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 571
    Points : 3 145
    Points
    3 145
    Par défaut

    pourquoi tu ne mets pas le @ mail crypté en md5 comme password, ça t'éviterais un paquets de test (vu que toutes les @ mail son différrentes) :

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    519
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 519
    Points : 298
    Points
    298
    Par défaut hummm
    je me trompe peut-etre, mais si je fais ca, et que tu t'inscris sur mon site.
    Un de tes amis qui connaitre ton email, peut faire le md5 de ton email et avoir ton mot de passe, non ?

  4. #4
    Membre expert
    Avatar de trotters213
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 571
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 571
    Points : 3 145
    Points
    3 145
    Par défaut
    puai mais il faut savoir que c'est ça le truc.
    Ou alors tu peux coupler le mail avec un identifiant que toi tu lui donnes lors de sa première connexion et crupter le tout.

  5. #5
    Membre actif
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    519
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 519
    Points : 298
    Points
    298
    Par défaut oui
    ca revient a mettre un rand en fin de compte, je pense ...

  6. #6
    Membre actif
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    519
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 519
    Points : 298
    Points
    298
    Par défaut Re: rand
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $requete="INSERT INTO matable (email, mdp) VALUES ('$email', ROUND(CEIL(1000000*RAND())))";
    while (!mysql_query($requete)) {
    }
    Ca marche bien.
    avec une table de type:
    CREATE TABLE matable (
    id INT UNSIGNED AUTO_INCREMENT NOT NULL,
    email VARCHAR(50),
    mdp INT UNSIGNED UNIQUE,
    PRIMARY KEY (id));

    est-ce que qqu'un sait si sur des grosses tables (10 colonnes et 1 million de ligne) ca marche bcp mieux que la bidouille en php expliquée au dessus ?

  7. #7
    Membre émérite Avatar de Maximil ian
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 622
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 622
    Points : 2 973
    Points
    2 973
    Par défaut Re: rand
    Citation Envoyé par bibile
    Est-ce que ca va bien renvoyer un FALSE a mysql_query a cause de la condition d'unicite si la valeur aleatoire a deja ete attribué à un autre mdp ? (et donc retenter la requete avec un autre mdp, automatiquement ?)
    Oui, tu peux même vérifier l'erreur générée avec mysql_error() ou mysql_error_no().

    Citation Envoyé par bibile
    Et surtout, est-ce que c'est plus rapide que de faire ma boucle en php qui genere un rand() et verifie avec un SELECT s'il existe deja ou non et qui ensuite fait l'INSERT ?
    C'est non seulement plus rapide mais aussi plus sûr.
    Avec ta méthode en PHP il y a un délai entre le SELECT et l'INSERT, délai certes court mais (dans le cas de tables ne supportant pas les transactions comme les tables MyISAM) suffisant pour que quelqu'un insère à ce moment-là une ligne contenant la même valeur. Du coup la première requête INSERT échoue.

    La contrainte d'unicité sert justement à ça, autant s'en servir

    Citation Envoyé par bibile
    est-ce que qqu'un sait si sur des grosses tables (10 colonnes et 1 million de ligne) ca marche bcp mieux que la bidouille en php expliquée au dessus ?
    Ca ne dépend pas du nombre de lignes dans la table mais de la charge du serveur. Avec une requête au lieu de 2, la deuxième solution est plus économique mais avec un serveur peu sollicité, la différence ne sera pas très visible.
    Pensez au bouton

  8. #8
    Membre actif
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    519
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 519
    Points : 298
    Points
    298
    Par défaut merci
    merci

  9. #9
    Membre actif
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    519
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 519
    Points : 298
    Points
    298
    Par défaut oups ..
    j'enleve le tag [resolue], juste pour ajouter une petite question ...

    je fais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $requete="INSERT INTO matable (p1, p2) VALUES (CEIL(RAND()*10), CEIL(RAND()*10))";
    $i=0;
    while (!mysql_query($requete) && ($i<30)) {
    	$i=$i+1;
    }
    Est-ce qu'il est possible de recuperer la valuer de p1 apres ca ?
    J'ai essayé avec mysql_field_name(), mais y a rien eu a faire. ca semble fonctionner qu'apres un SELECT.

    Est-ce qu'il y a une autre facon de faire ?

    Etant donné que mes cles primaires sont p1 et p2, ..... j'arrive plus a les connaitre apres les avoir entré dans la base ...

  10. #10
    Membre actif
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    519
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 519
    Points : 298
    Points
    298
    Par défaut up!
    juste un petit up pour donner une chance a ma derniere question.

    j'en ferai pas d'autre, meme si le topic tombe au fond du forum,
    promis !

  11. #11
    Membre émérite Avatar de Maximil ian
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 622
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 622
    Points : 2 973
    Points
    2 973
    Par défaut Re: oups ..
    Citation Envoyé par bibile
    Est-ce qu'il est possible de recuperer la valuer de p1 apres ca ?
    Si la table contient une clé primaire auto-incrémentée, on peut retrouver la dernière ligne insérée avec LAST_INSERT_ID().

    Sinon je ne pense pas.
    Pensez au bouton

  12. #12
    Membre actif
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    519
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 519
    Points : 298
    Points
    298
    Par défaut merci
    domage pour moi ..
    merci !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [C++]pb de rand
    Par lalaurie40 dans le forum MFC
    Réponses: 1
    Dernier message: 16/05/2005, 19h09
  2. Erreur de Rand avec Microsoft visual c++ 6.0
    Par yoadsl dans le forum Visual C++
    Réponses: 9
    Dernier message: 15/03/2005, 20h59
  3. Pb de rand() qui tourne en boucle
    Par MadChris dans le forum MFC
    Réponses: 3
    Dernier message: 26/06/2004, 16h24
  4. Probleme de tirage avec rand ?
    Par sunshine33 dans le forum MFC
    Réponses: 5
    Dernier message: 14/01/2004, 15h57
  5. rand
    Par drKzs dans le forum C
    Réponses: 6
    Dernier message: 21/09/2003, 16h39

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo