Besoin d'aide pour une boucle For

Résolu/Fermé
AjaxMan Messages postés 34 Date d'inscription lundi 25 juillet 2016 Statut Membre Dernière intervention 16 octobre 2016 - 24 sept. 2016 à 18:55
AjaxMan Messages postés 34 Date d'inscription lundi 25 juillet 2016 Statut Membre Dernière intervention 16 octobre 2016 - 24 sept. 2016 à 22:49
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 38346 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 16 décembre 2024 4 717
24 sept. 2016 à 20:30
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 lundi 25 juillet 2016 Statut Membre Dernière intervention 16 octobre 2016
24 sept. 2016 à 20:42
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 38346 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 16 décembre 2024 4 717 > AjaxMan Messages postés 34 Date d'inscription lundi 25 juillet 2016 Statut Membre Dernière intervention 16 octobre 2016
24 sept. 2016 à 20:44
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 lundi 25 juillet 2016 Statut Membre Dernière intervention 16 octobre 2016
24 sept. 2016 à 21:00
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 38346 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 16 décembre 2024 4 717 > AjaxMan Messages postés 34 Date d'inscription lundi 25 juillet 2016 Statut Membre Dernière intervention 16 octobre 2016
24 sept. 2016 à 21:02
...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 lundi 25 juillet 2016 Statut Membre Dernière intervention 16 octobre 2016
24 sept. 2016 à 21:23
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 38346 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 16 décembre 2024 4 717
Modifié par jordane45 le 24/09/2016 à 21:47
.... 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 lundi 25 juillet 2016 Statut Membre Dernière intervention 16 octobre 2016
24 sept. 2016 à 22:49
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