Générer un login + vérifier son existence avant de l'enregistrer ?

Générer un login + vérifier son existence avant de l'enregistrer ? - PHP - Programmation

Marsh Posté le 23-12-2003 à 00:37:42    

Bonjour tout le monde,
 
Je voudrais générer, en PHP, un login à partir d'un nom et un prénom et le mettre ensuite dans la BDD MySQL après vérification de son absence de la base.
 
Pour ça, je concatène la 1ère lettre du prénom avec un underscore et le nom. Jusque là, pas de problème.
 
Là où je bloque depuis des heures, c'est quand il faut vérifier si le login généré n'est pas déjà dans la base.
-> si non : on le met dans la base.
-> si oui : on concatène avec un chiffre qui s'incrémente si besoin.
 
Autrement dit, si "login" existe alors on teste "login1".
Si celui-ci existe alors on teste "login2" puis "login3", etc. jusqu'à en trouver un valide.
 
Merci d'avance !
 
Voici mon script :
 
<?
$login='p_nom';
 
include ("Connect.php" );
while ($NumRows!==0)
{ $Sql="SELECT * FROM Custom WHERE LoginCustom LIKE '$nom'";
 $Req=mysql_query($Sql) or die($Sql.'<br>'.mysql_error());
 $NumRows=mysql_numrows($Req);
 $login0=$login;
 $login0.=$Num;
 $Num++;
}
$Sql1="INSERT INTO `customers` VALUES ('$login')";
$Req1=mysql_query($Sql1) or die($Sql1.'<br>'.mysql_error());
 
mysql_close();
?>

Reply

Marsh Posté le 23-12-2003 à 00:37:42   

Reply

Marsh Posté le 23-12-2003 à 00:53:56    

1- initialisation de $NumRows :??:
2- l'opérateur de différence c'est != si je suis pas encore trop nul
3- ta variable $nom change JAMAIS de valeur... c'est ptet $login0 qu'il faut mettre dans ta requete... sinon, ca va boucler infiniment meuchant.

Reply

Marsh Posté le 23-12-2003 à 01:37:02    

Oops ! Désolé, j'ai fait des erreurs en allégeant mon script après l'avoir copié-collé. Je le repost et je teste ce que tu dis demain !
 
<?
$nom='prenom_nom';
 
include ("Connect.php" );
while ($NumRows!==0)
{ $Sql="SELECT * FROM Custom WHERE LoginCustom LIKE '$nom0'";
 $Req=mysql_query($Sql) or die($Sql.'<br>'.mysql_error());
 $NumRows=mysql_numrows($Req);
 echo $NumRows;
 $nom0=$nom;
 $nom0.=$Num;
 $Num++;
 echo $nom0;
}
$Sql1="INSERT INTO `custom` VALUES ('$FamNameCustomR', '$FirstNameCustomR', '$nom', '$PasswordR', '$AdressCustomR', '$EMailCustomR', '$Date', '$CardNumCustomR')";
$Req1=mysql_query($Sql1) or die($Sql1.'<br>'.mysql_error());
 
mysql_close();
?>

Reply

Marsh Posté le 23-12-2003 à 10:14:57    

Encore une fois, AUCUNE unitialisation de variables... quand tu rentres dans ta boucle, $nom0 vaut quoi :??: $nom vaut quelque chose oui, mais $nom0 ??? et $NumROWS ? Initialise les bon sang :D
 
L'opérateur d'inégalité est toujours != et pas !== ...
 
Je suis sur que cela vient de l'initialisation de tes variables, que tu ne fais pas.
 
De plus, c'est l'égalité que tu cherches, pas la ressemblance, donc ce n'est pas LIKE mais bien = à utiliser dans ta requête.
 
Laisse moi deviner : tu as commencé la programmation avec php je me trompe ? :D


Message édité par Tetedeiench le 23-12-2003 à 10:16:07
Reply

Marsh Posté le 23-12-2003 à 10:42:53    

tetedeiench, !== ça existe en PHP : http://www.php.net/manual/en/langu [...] arison.php
 
Mais sur le fond, tu as raison : Il faut initialiser les variables !
 
Sinon, j'ai pas regardé :D Init des variables et on voit après :D


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
Reply

Marsh Posté le 23-12-2003 à 11:03:10    

pourquoi ne pas faire simplement

Code :
  1. $nom='prenom_nom';
  2.      $row = mysql_fetch_array( mysql_query( "SELECT count(*) as num FROM Custom WHERE LoginCustom LIKE '$nom%'" ));
  3.      $newNom = $nom.($row['num'] +1 );
  4.      ...


Le +1 à la fin dépendant de si tu commences à prenom_nom0 ou prenom_nom1.
Au moins tu evites de boucler et de faire des requetes pour rien!

Reply

Marsh Posté le 26-12-2003 à 11:52:41    

mara's dad a écrit :

tetedeiench, !== ça existe en PHP : http://www.php.net/manual/en/langu [...] arison.php
 
Mais sur le fond, tu as raison : Il faut initialiser les variables !
 
Sinon, j'ai pas regardé :D Init des variables et on voit après :D


 
oh milles confuses, connaissait pas, désolé.

Reply

Marsh Posté le 26-12-2003 à 15:58:29    

Merci tout le monde !
 
Effectivement, j'ai quelques lacunes en algo....
 
Effectivement, anapajari, ta solution m'a simplifié la vie !

Reply

Marsh Posté le 26-12-2003 à 22:29:25    

anapajari a écrit :

pourquoi ne pas faire simplement

Code :
  1. $nom='prenom_nom';
  2.      $row = mysql_fetch_array( mysql_query( "SELECT count(*) as num FROM Custom WHERE LoginCustom LIKE '$nom%'" ));
  3.      $newNom = $nom.($row['num'] +1 );
  4.      ...


Le +1 à la fin dépendant de si tu commences à prenom_nom0 ou prenom_nom1.
Au moins tu evites de boucler et de faire des requetes pour rien!


Il faut faire attention à cet algo, genre si le gars s'apelle al, il va compter les alfred comme numéros.

Reply

Marsh Posté le 26-12-2003 à 22:37:54    

C'est vrai ! Je n'avais pas vu mais ça suffira pour ce dont j'ai besoin pour l'instant. Tant que les logins sont uniques, c'est bon. Cela dit, si quelqu'un d'autre a un algo à proposer, je suis tout ouï.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed