Re-initilisation d'objet

Petit nouveau ! | 2 Messages

14 avr. 2010, 11:09

Bonjour,

Je possède une table d'utilisateurs. Je souhaite mettre à jour tous les noms d'utilisateurs et mots de passe en utilisant une classe qui me génère des identifiants aléatoires.
Pour chaque enregistrement lors du "balayage" de la table, je supposais que l'emploi de "new" lors de l'appel de la classe créait une nouvelle instance de celle-ci et donc de nouveaux identifiants. Or, je constate que du premier au dernier enregistrement les mêmes utilisants sont utilisés dans mon update de la première à la dernière ligne.

Merci de m'aider à créer une nouvelle instance de l'objet pour chaque enregistrement

$SQL_SelectAllUsers = "SELECT * FROM OLR_USERS";
	
	$st = $dbh->query($SQL_SelectAllUsers);
	$List_USERs = $st->fetchAll();
	
		
	foreach ($List_USERs as $i => $Curr_USER) {
		$USER = $Curr_USER['Row_ID'];

		$Cls_Helper = new Generic_Utilities();
	
		$Random_UName = $Cls_Helper->RandomPassword(3);
		$Random_PWD = $Cls_Helper->RandomPassword(7);
		$SQL_Update = "UPDATE OLR_USERS SET User_Name = '$Random_UName', User_PWD = '$Random_PWD' WHERE Row_ID = $USER ";

		$dbh->exec($SQL_Update);
		}
Merci d'avance pour votre aide,

Michel

Mammouth du PHP | 672 Messages

14 avr. 2010, 13:06

Bonjour.

Je viens de tester avec une classe simple, histoire de vérifier et on a bien création d'un nouvel objet à chaque passage :
class test {
	var $retour;
	function test () {
		$this->retour = rand(1,10);	
	}
}

for ($i = 0; $i < 10; $i++) {
	$test = new test;
	echo $test->retour."<br />";
}
Tu devrais regarder du côté de ta fonction RandomPassword(). Si ça tombe elle utilise la date (ou quelque chose du même tonneau) pour faire sa génération aléatoire, et du coup ça foire...
En attendant, tu peux déjà :
- Afficher les RandomPassword() générés au lieu de passer ta requête.
- Mettre un sleep() dans ta boucle.

Petit nouveau ! | 2 Messages

14 avr. 2010, 13:41

Merci pour ton aide. Sur cette base j'ai revu le code de la classe et désactivé une ligne qui était marquée comme non nécessaire après PHP 4.2.0 (voir ci-dessous). La fonctionnalité est OK maintenant

Source: http://wiki.jumba.com.au/wiki/PHP_Gener ... m_password

function RandomPassword($PwdLength=8, $PwdType='standard')
    {
    // $PwdType can be one of these:
    //    test .. .. .. always returns the same password = "test"
    //    any  .. .. .. returns a random password, which can contain strange characters
    //    alphanum . .. returns a random password containing alphanumerics only
    //    standard . .. same as alphanum, but not including l10O (lower L, one, zero, upper O)
    //
    $Ranges='';
 
    if('test'==$PwdType)         return 'test';
    elseif('standard'==$PwdType) $Ranges='65-78,80-90,97-107,109-122,50-57';
    elseif('alphanum'==$PwdType) $Ranges='65-90,97-122,48-57';
    elseif('any'==$PwdType)      $Ranges='40-59,61-91,93-126';
 
    if($Ranges<>'')
        {
        $Range=explode(',',$Ranges);
        $NumRanges=count($Range);
        mt_srand(time()); //not required after PHP v4.2.0
        $p='';
        for ($i = 1; $i <= $PwdLength; $i++)
            {
            $r=mt_rand(0,$NumRanges-1);
            list($min,$max)=explode('-',$Range[$r]);
            $p.=chr(mt_rand($min,$max));
            }
        return $p;			
        }
    }

Mammouth du PHP | 672 Messages

14 avr. 2010, 14:35

N'oublie pas de marquer le sujet comme "Résolu" (un petit bouton en forme de V vert sur ton premier message)