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

PHP & Base de données Discussion :

Création aléatoire [MySQL]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 14
    Par défaut Création aléatoire
    Bonjour,
    je vais essayer d'expliquer mon problème le plus clairement possible.

    Alors, j'ai un fichier php qui a pour but de sélectionner dans une base sql les membres qui n'ont pas encore de loginftp et de passeftp.
    Le script génère alors aléatoirement ce login et mot de passe.

    Voici le code (enfin la partie qui m'intéresse):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
     
    	//Sélectionne les membres qui n'ont pas de compte ftp
    	$query = ("SELECT * FROM membre WHERE LoginFTP = 'en_attente' and PassFTP = 'en_attente'");
    	$result = mysql_query($query) ;
     
    	if($result>>0)
    	{
    		while ($row = mysql_fetch_array($result)) 
    		{			
     
    				//Création du login aléatoire à 8 caractères
    				$taille = 8;
    				$lettres = "abcdefghijklmnopqrstuvwxyz0123456789";
    				srand(time());
    				$loginftp = "";
    				$i=0;
    				while($i < $taille)
    				{
    				$loginftp.=substr($lettres,(rand()%(strlen($lettres))),1);
    				$i++;
    				}
    				//Création du pass aléatoire à 8 caractères
    				$passftp = "";
    				for ($i=0;$i<$taille;$i++)
    				{
    				$passftp.=substr($lettres,(rand()%(strlen($lettres))),1);
    				}
     
    				$login = $row["Login"];
     
    				//creation du compte ftp
     
    				echo $login . "  login : ". $loginftp ."  et passe : ". $passftp . "<br>";
    			  //Mise à jour des logins et pass dans la base
    				$attente = mysql_query("UPDATE membre SET LoginFTP='$loginftp', PassFTP='$passftp' WHERE Login='$login'");
    				$resulattente = mysql_query($attente);
     
    		}
       }
    Donc le problème est que quand il y a plusieurs utilisateurs, quand le script reboucle après le premier pour créer le loginftp et le passftp aléatoirement, ben c'est le même que pour le premier membre.
    En fait il ne regénère pas le loginftp et le passftp, il garde celui du premier.

    Merci de votre aide.

  2. #2
    Membre Expert

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 278
    Par défaut
    Peux-tu préciser, je ne comprend pas très bien l'erreur.
    Déjà, ta dernière ligne est fausse.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $resulattente = mysql_query($attente);
    sachant que $attente est l'id de résultat de la requête précédente, je serais curieux de savoir ce que renvoie cette dernière requête

  3. #3
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Par défaut
    Salut

    Puis-je te suggérer d'enlever i, l, 1, o et 0 de ta chaîne de lettres ?
    Sinon, tu peux utiliser mt_rand() qui est plus intéressant que srand(), de manière générale.
    Sache que tu peux utiliser les accolades plutôt que substr() pour aller chercher un seul caractère de la chaîne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    while($i < $taille)
    {
       $loginftp .= $lettres{rand()%(strlen($lettres))};
       ++$i;
    }
    Avec ma suggestion précédente, cela donne quelque chose comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    while($i < $taille)
    {
       $loginftp .= $lettres{mt_rand(0, strlen($lettres)-1)};
       $i++;
    }
    Enfin, tu peux mettre la ligne de concaténation pour le login dans la même boucle que celle du mot de passe puisque tu boucles autant de fois.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 14
    Par défaut
    Ok merci bien.

    j'ai mantenant le code final :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
     
    	//Sélectionne les membres qui n'ont pas de compte ftp
    	$query = ("SELECT * FROM membre WHERE LoginFTP = 'en_attente' and PassFTP = 'en_attente'");
    	$result = mysql_query($query) ;
    	$nb_result = mysql_num_rows($result);
     
    	if($result>>0)
    	{
    		while ($row = mysql_fetch_array($result)) 
    		{			
     
    				//Création du login aléatoire à 8 caractères
    				$taille = 8;
    				$lettres = "abcdefghjkmnpqrstuvwxyz123456789";
    				srand(time());
    				$loginftp = "";
    				$passftp = "";
    				$i=0;
    				while($i < $taille)
    				{
    				$loginftp .= $lettres{mt_rand(0, strlen($lettres)-1)};
    				$passftp .= $lettres{mt_rand(0, strlen($lettres)-1)};
     
    				$i++;
    				}
     
    				$login = $row["Login"];
     
    				//creation du compte ftp				
    				echo $login . "  login : ". $loginftp ."  et passe : ". $passftp . "<br>";
    			  //Mise à jour des logins et pass dans la base
    				$sql = "UPDATE membre SET LoginFTP='$loginftp', PassFTP='$passftp' WHERE Login='$login'";
    				$resulattente = mysql_query($sql);
     
    		}
     
    	}
    Et avec ça, tout marche.
    Merci à tous

    EDIT: ah oui et enlevé le i, le l, le o et le 0

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

Discussions similaires

  1. Création aléatoire d'une table sur certains serveurs
    Par pierre50 dans le forum Requêtes
    Réponses: 0
    Dernier message: 28/09/2014, 17h44
  2. Incapacité de création aléatoire d'organigramme de tâches
    Par jsuche dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 07/02/2013, 09h28
  3. Création d'image aléatoire
    Par xoum89 dans le forum Débuter
    Réponses: 3
    Dernier message: 02/03/2011, 13h35
  4. création d'un échantillon aléatoire
    Par waldoun dans le forum PL/SQL
    Réponses: 1
    Dernier message: 22/04/2009, 16h32
  5. Création d'un générateur d'exercices de calcul mental aléatoire
    Par Nono Sto dans le forum Algorithmes et structures de données
    Réponses: 9
    Dernier message: 18/03/2009, 14h02

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