Besoin d'aide pour une boucle For

Résolu
AjaxMan Messages postés 34 Date d'inscription   Statut Membre Dernière intervention   -  
AjaxMan Messages postés 34 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

J'aimerai faire un petit script qui génère 5 lettres & chiffres aléatoirement, j'ai déjà fait ce système mais j'aimerai faire en sorte que si ce que je vais générer existe déjà dans ma base de donnée, alors je re-génère une "clé", je suppose que ça se fait avec une boucle for mais je vois pas comment.

Merci
A voir également:

2 réponses

jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
Bonjour,

Ta question est trop vague... (tu ne nous dis pas sur quoi tu bloques exactement.. ni ce que tu as déjà commencé à coder....)

Mais je peux te donner le principe :
Pour commencer... tu dois te connecter à ta BDD
Si tu ne sais pas faire... regardes ici comment utiliser faire
https://www.commentcamarche.net/faq/44117-connexion-a-une-base-avec-pdo-mysqli
(perso.. je préfère la PDO)

Ensuite, tu fais une boucle .... (par exemple WHILE)
https://www.php.net/manual/fr/control-structures.while.php

Dans cette boucle, tu génères un numéro aléatoirement
Puis tu fais une requête (de type SELECT ) pour voir si le numéro existe déjà dans ta BDD ou non.
Si il existe déjà... tu recommences.... sinon.. tu sors de ta boucle.

Mais bon.. si ton but est de générer un "id" unique (et peu importe si il fait 13 caractères au lieu de 5...) dans ce cas tu peux utiliser : Uniqd
https://www.php.net/manual/fr/function.uniqid.php



0
AjaxMan Messages postés 34 Date d'inscription   Statut Membre Dernière intervention  
 
Re,

Merci de ta réponse, je vais être plus clair.
J'ai déjà fait mon système pour générer une chaîne, je me suis déjà connecté, et je vois pas comment faire pour faire le while :hum: Comment en sortir si c'est bon ? Comment faire re-générer une chaîne si ça existe déjà ?
0
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752 > AjaxMan Messages postés 34 Date d'inscription   Statut Membre Dernière intervention  
 
Colles nous le début de ton code.
A partir de là on pourra te proposer des solutions.

NB : penses à utiliser les balises de code : https://codes-sources.commentcamarche.net/faq/10686-le-nouveau-codes-sources-comment-ca-marche#balises-code

.
0
AjaxMan Messages postés 34 Date d'inscription   Statut Membre Dernière intervention  
 
Le reste de mon code est inutile, je peux te donner que ça d'intéressant :
$hash = substr(sha1(md5(rand())), 5, 13);
0
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752 > AjaxMan Messages postés 34 Date d'inscription   Statut Membre Dernière intervention  
 
...et la connexion a ta bdd... tu la fait comment ? (C'est ça le plus utile :-) )
0
AjaxMan Messages postés 34 Date d'inscription   Statut Membre Dernière intervention  
 
Je sais adapter un code au mien, ne t'en fais pas, la variable de connexion est $db, c'est un système fait maison que j'utilise j'ai pas très envie de la donner :-P
0
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
.... mouais....

Bon.. déjà... ton script... ne génère pas 5 caractères... mais 7
Ensuite... si ton but est de générer un code aléatoire et unique.. pourquoi ne pas utiliser la fonction UNIQID comme je te l'ai déjà indiqué ?

Pour finir..
voila à quoi pourrait ressembler ton code :
<?php
//Affichage des erreurs PHP
error_reporting(E_ALL);

//fichier de connexion à la BDD
require_once "cnxBdd.php";


function checkIfCodeExist($strCode){
 global $db;
 
 $sql = "SELECT *
         FROM tatable
   where code = :strCode ";
 $datas = array(":strCode"=>$strCode);
 
 try{
 
  $prep = $db->prepare($sql);
  $prep->execute($datas); 
  $res = $prep->fetchAll(); 
 }catch (Exception $e){
   echo "Erreur ! ".$e->getMessage(); 
 }
 return !empty($res) ? true : false ; 
}


// début du code ...


$hash = substr(sha1(md5(rand())), 5, 13);
echo "<br> code avant la boucle : ".$hash;
while(checkIfCodeExist($hash)){
 echo "<br> code dans la boucle : ".$hash;
 $hash = substr(sha1(md5(rand())), 5, 13);
}

echo "<br> code final (après la boucle) la boucle : ".$hash;

?>





Cordialement, 
Jordane                                                                 
0
AjaxMan Messages postés 34 Date d'inscription   Statut Membre Dernière intervention  
 
Hum intéressant, et ouais c'est vrai que c'est moins bête, uniqid joue avec le timestamp je suppose, pour ça que le début est le même mais le reste change .. je vais opter pour cette fonction merci :p
0