Requete en boucle si variable déjà présente d

Fermé
augustule - Modifié par augustule le 29/07/2010 à 23:52
arth Messages postés 9374 Date d'inscription mardi 27 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2016 - 30 juil. 2010 à 01:31
Bonsoir a tous,

Je cale sur un morceau de code pourtant simple.
Voila ce que je cherche a faire:

1- je génère un code aléatoire de 2 lettres et 3 chiffres (ex:ER457)
2- je vérifie dans la base si celui ci existe
3- si ce code existe je repasse à l'étape 1
4- si ce code n'est pas dans la base ==> je fais mon insert !

Voici un bout de mon code pour mieux comprendre:

/// on genere un code d'adherent aleatoire de 2 lettres 
  $chaine = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; 
  //nombre de caractères dans le mot de passe 
  $nb_caract = 2; 
   
  $gen = ""; 
  //on fait une boucle 
  for($u = 1; $u <= $nb_caract; $u++) { 
  //on compte le nombre de caractères présents dans notre chaine 
   $nb = strlen($chaine); 
  // on choisie un nombre au hasard entre 0 et le nombre de caractères de la chaine 
   $nb = mt_rand(0,($nb-1)); 
  // on ajoute la lettre a la valeur de $pass 
   $gen.=$chaine[$nb]; 
  } 
  
  
  $chaine2 = "0123456789"; 
  //nombre de caractères dans le mot de passe 
  $nb_caract2 = 3; 
  // on fait une variable contenant le futur pass 
  $gen2 = ""; 
  //on fait une boucle 
  for($u2 = 1; $u2 <= $nb_caract2; $u2++) { 
  //on compte le nombre de caractères présents dans notre chaine 
   $nb2 = strlen($chaine2); 
  // on choisie un nombre au hasard entre 0 et le nombre de caractères de la chaine 
   $nb2 = mt_rand(0,($nb2-1)); 
  // on ajoute la lettre a la valeur de $pass 
   $gen2.=$chaine2[$nb2]; 
  } 
  
   
  do{ 
  
  $num_adherent = $gen.$gen2; 
   
   
// on verifie si le code generé est existe deja dans la base 
$verif="SELECT num_adherent FROM adherents WHERE num_adherent = '".$num_adherent."'"; 
  $res = mysql_query($verif); 
  
  $verif_num = mysql_num_rows($res); 
   
   
  } while($verif_num != 0); 
  
    
  // si le code n'est pasdans la bdd, on insert 
  $sql = "INSERT INTO adherent (num_adherent, civilite, nom, prenom, sexe, date_naissance, profession, csp, competences, adresse,...............)"; 
        mysql_query($sql); 
  
  




1 réponse

arth Messages postés 9374 Date d'inscription mardi 27 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2016 1 291
30 juil. 2010 à 01:31
Pourquoi ne pas afficher un mode debug pour commencer, du type quelle est la valeur des variables avant la boucle MySQL, afficher quelle est la requête qui sera exécutée, valider la requête directement dans la database, afficher le nombre de rows une fois la requête exécutée.
1