Posez votre question Signaler

[PHP&SQL] Générer ID différent des précédents

gugusco - Dernière réponse le 2 nov. 2011 à 11:22
Bonjour,
J'ai créee une base de données (SQL) qui gère des d'annonces qui ont un chacun un ID unique. Actuellement je passe par l'option AUTO INCREMENT et PRIMARY et cela génère des ID 1 puis 2,3,4,5
Moi ce que je voudrais c'est avoir un nombre aléatoire à 8 chiffres par exemple.
J'ai vu que l'on peut utiliser la fonction php "uniqid(rand(8), true)".
Mais il se pourrait alors que ce nombre soit par malchance déjà présent dans la base de donnée associé à une annonce ?
Comment y remédier
Merci d'avance
Lire la suite 

[PHP&SQL] Générer ID différent des précédents »

3 réponses
Réponse
+0
moins plus
Bonjour,
Oui il est possible que ce nombre aléatoire soit déjà présent dans la base de données !
Pour éviter ça, une méthode pas très compliqué est de générer un nombre aléatoire en php, exécuter une requête SELECT sur la base de données en sélectionnant les lignes qui ont cette ID (si il y en a) avec la condition WHERE. Si une ligne est retourné, l'ID existe déjà (on génère alors un autre nombre aléatoire et on recommence), sinon si aucunes lignes n'est retourné, en peut enregistrer !
Ajouter un commentaire
Réponse
+0
moins plus
Ah évidemment je n'y avais pas pensé, merci. c'est plus long que ce que je ne pensais mais ce n'est effectivement pas compliqué.

Je vous mets le code que j'ai trouvé si ca peut en aider d'autres
(J'ai fait une boucle afin que tant qu'il n'y ait pas de nombre unique, il continue d'en chercher un (= tant que $ID_unique =false)

//par défaut on n'a pas encore de ID unique crée
		$ID_unique = false;
		while($ID_unique == true)
		{
			// on génère un nombre à huits chiffres au hasard via php
			$nbre = rand(8);
			//on regarde si il existe via une requete
			$req0 = $bdd->prepare('SELECT ad_ID FROM adsmain WHERE ad_ID = :ad_ID');
			$req0->execute(array('ad_ID'=> $nbre));
			$ID = $req0->fetch();
			$ID = $ID['ad_ID'];
			
			//si oui on arrete la boucle en mettant TRUE
			
			if(isset($ID)) // la requete nous dit qu'une ID identique existe déjà
			{
				$ID_unique = false;
			}
			else // sinon on peut arrêter la boucle en satisfaisant la condition en mettant TRUE
			{
				$ID_unique = true;
			}	
		}
		// quand la boucle se sera arreté on aura trouver un nbre unique, on l'inscrit dans la variable.
		$ad_ID = $nbre;
jojo673- 2 nov. 2011 à 11:22
Parfait :)
Ajouter un commentaire
Ce document intitulé « [PHP&SQL] Générer ID différent des précédents » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
Passage au tout numérique : quel coût pour les particuliers ?