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

Langage PHP Discussion :

Génération des mots de passe pour plusieurs utilisateurs


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Inscrit en
    Octobre 2007
    Messages
    67
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 67
    Points : 52
    Points
    52
    Par défaut Génération des mots de passe pour plusieurs utilisateurs
    Bonjour,

    Je travail sur une fonction pour but de mettre des mots de pass pour tous les utilisateurs.
    Si je travaille sur un grand base de donnes ou j'ai plus que 500 users, alors j'ai besoin de mettre 500 mot de pass, alors j'ai créé cette fonction et le problème avec c'est de mettre le même mot de pass pour tous.
    Voici mon code :
    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
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    <?PHP
    function generatePassword($length=9, $strength=0) { // Fonction pour creer des mot de pass
    	$vowels = 'aeuy';
    	$consonants = 'bdghjmnpqrstvz';
    	if ($strength & 1) {
    		$consonants .= 'BDGHJLMNPQRSTVWXZ';
    	}
    	if ($strength & 2) {
    		$vowels .= "AEUY";
    	}
    	if ($strength & 4) {
    		$consonants .= '123456789';
    	}
    	if ($strength & 8) {
    		$consonants .= '@#$%';
    	}
     
    	$password = '';
    	$alt = time() % 2;
    	
    	for ($i = 0; $i < $length; $i++) {
    		if ($alt == 1) {
    			$password .= $consonants[(rand() % strlen($consonants))];
    			$alt = 0;
    		} else {
    			$password .= $vowels[(rand() % strlen($vowels))];
    			$alt = 1;
    		}
    	}
    	return $password;
    }
    
    require("conn.php");
    
    // sending query
    $result = mysql_query("SELECT * FROM users");
    if (!$result) {
        die("Query to show fields from table failed");
    }
    
    $fields_num = mysql_num_fields($result);
    
    echo "<table border='1' width='30%' align='center'  bordercolor='#FF9900'>";
    
     while($row = mysql_fetch_assoc($result))
    {
        echo "<tr>";
    	echo "<td align='center'>".$row['ID_user']."</td>"; // ID de users
    	echo "<td align='center'>".$row['username']."</td>"; 
    	echo "<td align='center'>".$row['password']."</td>"; // 
    	echo "<td align='center'>".$row['type_pass']."</td>"; // type :etudiant, enseignent, admin ...
    	$sql_insert = ("UPDATE users SET password = '".generatePassword()."'"); // generation des mots de pass pour tous les utilisateurs
    	$result_insert = mysql_query($sql_insert);
        echo "</tr>\n";
    } 
    mysql_free_result($result);  
    
    ?>
    A l'exécution de ce code, il m'a donne le même mot pour tous les users....
    Comment je peux mettre un mot de pass différent pour chaque utilisateur ?

    Merci d'avance

  2. #2
    Membre émérite Avatar de Madfrix
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 326
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 326
    Points : 2 566
    Points
    2 566
    Par défaut
    Honnetement, tu te compliques bien la vie

    Tu fais un md5 ou sha1 sur un microtime() et tu auras un mdp unique

  3. #3
    Membre du Club
    Inscrit en
    Octobre 2007
    Messages
    67
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 67
    Points : 52
    Points
    52
    Par défaut
    Mais il me donne la même résultat dans la base de donnes, un mot de pass pour tous, voici ma base de donnes pièce jointe.
    le problème c'est qu'il fait un update pour tous les users en même temps.

    Citation Envoyé par Madfrix Voir le message
    Honnêtement, tu te compliques bien la vie

    Tu fais un md5 ou sha1 sur un microtime() et tu auras un mdp unique

  4. #4
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    Citation Envoyé par Triste
    le problème c'est qu'il fait un update pour tous les users en même temps.
    C'est normal. Mais pire, car le UPDATE est exécuté autant de fois qu'il y a de users, car il est effectué dans la boucle de tous les users.

    Il vaut mieux ne pas mélanger les choses.
    Un UPDATE, c'est du traitement Php pure, alors que des echo c'est fait pour générer du HTML, c'est la couche interface.

    Le UPDATE, fait le en tout 1er, et 1 seule fois, au tout début, avant le moindre echo ou élément HTML.
    Enfin, si c'est cela que tu recherche.


    Je rejoins aussi Madfrix sur le fait que tu te prends la tête à générer un mot de passe unique, sa solution est bien plus simple, de même qu'il existe une fonction Php qui le fait : uniqid()
    Un coup de md5 et l'affaire est réglée
    Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
    Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]

  5. #5
    Membre régulier
    Homme Profil pro
    Inscrit en
    Octobre 2006
    Messages
    124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 124
    Points : 120
    Points
    120
    Par défaut
    Citation Envoyé par Triste Voir le message
    $sql_insert = ("UPDATE users SET password = '".generatePassword()."'");
    Ta requête UPDATE met à jour le mot de passe de tous les utilisateurs à chaque fois avec le mot de passe que tu as généré pour l'utilisateur en cours de traitement dans ta boucle.

    Lorsque tu génères ton mot de passe, il faut que tu fasses un update dans ta base uniquement pour l'utilisateur que tu traites.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    UPDATE users SET password = '".generatePassword()."'" WHERE ID_user = $row['ID_user']

Discussions similaires

  1. Gestion des mots de passe entre plusieurs site
    Par lenaingurdil dans le forum Général Conception Web
    Réponses: 2
    Dernier message: 12/11/2012, 14h14
  2. Réponses: 0
    Dernier message: 15/03/2010, 09h26
  3. ssh accès sans mot de passe pour un utilisateur
    Par hammag dans le forum Sécurité
    Réponses: 2
    Dernier message: 21/05/2008, 09h04
  4. Pb pour récupérer des mots de passe
    Par m@thieu84 dans le forum SQL Procédural
    Réponses: 5
    Dernier message: 26/05/2006, 18h07

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