You are not allowed to do this.
[reglé] id aléatoire et unique en php
Dernière réponse : dans Programmation
Salut tout le monde,
Je voudrais enregistrer un id compri entre 0 et 100 dans ma table à chaque fois qu' on accede à une de mes pages et il faut que cet id ne soit pas déja present dans ma table.
J'ai créé ce code qui execute ma page à l'infini jusqu'a qu'il trouve un id qui n'est pas deja present dans la table, mais c'est beaucoup trop lent:
Est-ce que quelqu'un à une solution?
Je voudrais enregistrer un id compri entre 0 et 100 dans ma table à chaque fois qu' on accede à une de mes pages et il faut que cet id ne soit pas déja present dans ma table.
J'ai créé ce code qui execute ma page à l'infini jusqu'a qu'il trouve un id qui n'est pas deja present dans la table, mais c'est beaucoup trop lent:
$id=rand(0,100); $req=mysql_db_query($sqlbdd,"SELEC * FROM $table where id=\"$id\"",$cnx)or die("erreur"); $num=mysql_num_rows($req); while($num!=0) { header("Location:cette_page.php"); }
Est-ce que quelqu'un à une solution?
Autres pages sur : regle aleatoire unique php
Lassé par la pub ? Créez un compte
lol, plus simple. tu charges toutes les valeurs de ta table dans une var.
ensuite tu generes ton id.
et la tu verifie s'il est pas dedans.
s'il est dedans tu regenere un id
et une fois que tu trouves un id qui n'est pas dans la table la seulement tu changes de page.
// requete sql qui charge les valeurs
//creation d'un id
//boucle while tant que l'id est deja present. + creation d'un nouvel id
// sortie de la boucle et suite de ton code.
PS : Mais l'id ? tu le mets pas dans la base de données apres ?
ca va vite limiter le nbr de fois que ta page va marcher lol
ensuite tu generes ton id.
et la tu verifie s'il est pas dedans.
s'il est dedans tu regenere un id
et une fois que tu trouves un id qui n'est pas dans la table la seulement tu changes de page.
// requete sql qui charge les valeurs
//creation d'un id
//boucle while tant que l'id est deja present. + creation d'un nouvel id
// sortie de la boucle et suite de ton code.
PS : Mais l'id ? tu le mets pas dans la base de données apres ?
ca va vite limiter le nbr de fois que ta page va marcher lol
Citation :
PoUaScAiLLe a écrit :
Ben dans ta table tu mets un champs id en auto increment et le sql va te gerer ca tout seul :-)
A ce que j'ai compris, tu veux faire une id unique et le plus petit possible, pou eviter d'avoir des 'AUTO INCREMENT' trop grand avec le temps (c'est vrai qu'il faut prendre ca en considération).
Donc une boucle derrière une requette SQL me semble pas mal, on va se baser sur un base SQL de ce type :
table = online
id (int 3)
lastseen (varchar 20)
script PHP :
$sql = "SELECT id FROM online ORDER BY id ASC"; $res = mysql_query($sql); $i = 1; while(($row = mysql_fetch_array($res)) && !$id){ if(($row["id"] != $i) && !$id){ $id = $i; } $i++; } $sql = "INSERT INTO online VALUES ('".$id."','".time()."')";
En sortie tu obtiendra $id qui sera l'id le plus bas non enregistré.
************************************
au depart:
tu fait un tableau de 100
chaque case a la valeur de son indice (tab = i)
pour chaque id nécessaire
random sur le tableau de (taille n)
recupération de la valeur
suppression de la case qui contient la valeur
(le tableau aura une taille de n-1)
*************************************
3 choses :
-je sais plus ce kon utilise pour faire les tableaux (ca fait kelke mois ke jai plus fait de php... j'ai oublié)
-je sais pas si c plus rapide (se trimbaler un tableau c pas génial, mais comme il est pas tres gros...)
edit :
-bein finalement ya pas de 3e
au depart:
tu fait un tableau de 100
chaque case a la valeur de son indice (tab = i)
pour chaque id nécessaire
random sur le tableau de (taille n)
recupération de la valeur
suppression de la case qui contient la valeur
(le tableau aura une taille de n-1)
*************************************
3 choses :
-je sais plus ce kon utilise pour faire les tableaux (ca fait kelke mois ke jai plus fait de php... j'ai oublié)
-je sais pas si c plus rapide (se trimbaler un tableau c pas génial, mais comme il est pas tres gros...)
edit :
-bein finalement ya pas de 3e
Je peux te le faire. A condition que tu postes une demande ici:
Digimag - Création des scripts gratuits
Sinon, je teconseille de réflechir et de faire ton programme (script) toi-même.
Digimag - Création des scripts gratuits
Sinon, je teconseille de réflechir et de faire ton programme (script) toi-même.
J'ai creer un post sur votre forum et vous m'avez donnée un code:
<html>
<head>
<title>Id aléatoire</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<body>
<?
echo "Patientez, calculs du id<br>\n"; //Je ne sais pas si ça va être vraiment utile; script assez rapide
//Connexion, lecture, enregistrements:
mysql_connect("hostname","username","password");
mysql_select_db("database name");
$table="table whis your ids";
$champ="name of the cols with your ids";
$res=mysql_query("SELECT $champ F ROM $table");
$tableau=mysql_num_rows($res);
mysql_close();
$table=""; $champ=""; $res=""; //On libére de la mémoire inutilisée
$possib=array(); $a=0;
for ($i=0;$i<=999999;$i++) //On met dans le tableau $possib[] toutes les possibilitées du nouveau id
{
$ok=TRUE;
for ($n=0;$n<count($tableau);$n++)
{
if ($tableau[$n]==$i)
{
$ok=FALSE;
}
}
if ($ok)
{
$possib[$a]=$i;
$a++;
}
}
$rnd=rand(0,count($possib)-1);
$id=$possib[$rnd];
echo "Votre id: $id<br>\n";
?>
</body>
</html>
Ce code renvoie des id qui existent deja dans la table, ce que j'ai expliqué il y a 5 jours sur votre forum, et depuis pas de réponse.
Si la seule chose que vous voulez c'est attirer du monde sur votre forum et empecher ceux qui savent de me repondre, en empechant chaque relance du sujet sur infos du net et en affirmant que votre code marche, je vous prierai de ne plus me repondre.
Citation :
<html>
<head>
<title>Id aléatoire</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<body>
<?
echo "Patientez, calculs du id<br>\n"; //Je ne sais pas si ça va être vraiment utile; script assez rapide
//Connexion, lecture, enregistrements:
mysql_connect("hostname","username","password");
mysql_select_db("database name");
$table="table whis your ids";
$champ="name of the cols with your ids";
$res=mysql_query("SELECT $champ F ROM $table");
$tableau=mysql_num_rows($res);
mysql_close();
$table=""; $champ=""; $res=""; //On libére de la mémoire inutilisée
$possib=array(); $a=0;
for ($i=0;$i<=999999;$i++) //On met dans le tableau $possib[] toutes les possibilitées du nouveau id
{
$ok=TRUE;
for ($n=0;$n<count($tableau);$n++)
{
if ($tableau[$n]==$i)
{
$ok=FALSE;
}
}
if ($ok)
{
$possib[$a]=$i;
$a++;
}
}
$rnd=rand(0,count($possib)-1);
$id=$possib[$rnd];
echo "Votre id: $id<br>\n";
?>
</body>
</html>
Ce code renvoie des id qui existent deja dans la table, ce que j'ai expliqué il y a 5 jours sur votre forum, et depuis pas de réponse.
Si la seule chose que vous voulez c'est attirer du monde sur votre forum et empecher ceux qui savent de me repondre, en empechant chaque relance du sujet sur infos du net et en affirmant que votre code marche, je vous prierai de ne plus me repondre.
Bon, vu que ca me bouffe mon script et que j'ai pas envie de modifier pour que ca passe et vu que c'est fait a la va vite. Je te met un lien vers un txt le contenant
ici
Ceci, n'insert pas la valeur trouver dans la table.
un ptit insert et c'est fini.
ici
Ceci, n'insert pas la valeur trouver dans la table.
un ptit insert et c'est fini.
Moi, je te dis: ce script enverra toujours un nombre aleatoire compris entre 0 et 100.
L'erreur est dans la boucle while:
$verif = "true"; veut dire que la condition de la boucle while ($verif=="false") n'est pas satisfaite, donc on sort de cette boucle tout de suite.
Je vais voir pourquoi chez moi ça marche pas.
L'erreur est dans la boucle while:
$verif = "true"; veut dire que la condition de la boucle while ($verif=="false") n'est pas satisfaite, donc on sort de cette boucle tout de suite.
Je vais voir pourquoi chez moi ça marche pas.
En regardant bien, il y a une autre boucle dans le while.
Tu devrais mieu regarder.
j'ai la flemme d'expliquer.
Si je me souviens bien, c'est toi qui te "vantait" de tes talents sur le topic des études pour devenir développeur ?
C'est pourtant du code de base.
edit : d'ailleur, il manque un "$" pour une var dans la boucle for justement de mon script
Y'a tjs de quoi apprendre en prog
Tu devrais mieu regarder.
j'ai la flemme d'expliquer.
Si je me souviens bien, c'est toi qui te "vantait" de tes talents sur le topic des études pour devenir développeur ?
C'est pourtant du code de base.
edit : d'ailleur, il manque un "$" pour une var dans la boucle for justement de mon script
Y'a tjs de quoi apprendre en prog
Oui, oui.
D'accord, je n'étais pas assez attentif.
Mais ton script, il cherche aléatoirement! Il mettra cent ans pour "boucher" le dernier id. Faire queque chose au pif n'est point une bonne methode. Et un beau zéro nous sert à rien s'il n'y a plus de id disponible!
Et puis toi-même, tu avoues que tu as fait une faute (oubli de $). Et pourtant ça aussi, c'est de l'initiation!
Alors ne m'attaquez pas. Je n'ai pas vu qu'un nouveau message est arrivé sur mon forum, donc je pensais que c'est réglé. Quand je m'en suis aperçu, j'ai fait tout de suite deux versions, car c'est ma propre faute.
Croyez toujours pas? Par là
D'accord, je n'étais pas assez attentif.
Mais ton script, il cherche aléatoirement! Il mettra cent ans pour "boucher" le dernier id. Faire queque chose au pif n'est point une bonne methode. Et un beau zéro nous sert à rien s'il n'y a plus de id disponible!
Et puis toi-même, tu avoues que tu as fait une faute (oubli de $). Et pourtant ça aussi, c'est de l'initiation!
Alors ne m'attaquez pas. Je n'ai pas vu qu'un nouveau message est arrivé sur mon forum, donc je pensais que c'est réglé. Quand je m'en suis aperçu, j'ai fait tout de suite deux versions, car c'est ma propre faute.
Croyez toujours pas? Par là
Qu'est-ce que ne m'a pas plu?
Tiens, pour vérifier (déjà queques nombres pris):
Test
Ca va de 0 à 100, tu peux cliquer et enregistrer sur un papier les résultats jusqu'à arriver à un message d'erreur. (Ca va pas être long: j'ai déjà cliqué une ventaine de fois)
Tiens, pour vérifier (déjà queques nombres pris):
Test
Ca va de 0 à 100, tu peux cliquer et enregistrer sur un papier les résultats jusqu'à arriver à un message d'erreur. (Ca va pas être long: j'ai déjà cliqué une ventaine de fois)
j'ai remplacé par
et
par
J'ai enregistrer le numero à chaque fois dans la table et la requette sql contient le nom de mon champs et de ma table.
C'est bizare, je vois pas ou j'ai fait une erreur
Citation :
for ($j=0; $j<=$i; j++)Citation :
for ($j=0; $j<=$i; $j++)et
Citation :
$id_trouver=rand(0,100);Citation :
$id_trouver=rand(0,10);J'ai enregistrer le numero à chaque fois dans la table et la requette sql contient le nom de mon champs et de ma table.
C'est bizare, je vois pas ou j'ai fait une erreur
Excuse moi resurectin ton script est genial et tres rapide.
Tu as souvent répondu aux quelques posts que j'ai créé sur ce forum et je t'en remerci. J'espere moi aussi pouvoir t'aider en quoi que ce soit.
Le nom de mon champs ne s'appelle pas "id" et j'avais oublier de modifier:
Désolé encore.
Tu as souvent répondu aux quelques posts que j'ai créé sur ce forum et je t'en remerci. J'espere moi aussi pouvoir t'aider en quoi que ce soit.
Le nom de mon champs ne s'appelle pas "id" et j'avais oublier de modifier:
Citation :
$indice[$i] = "$art->id";Désolé encore.
Effectivement, le script proposé par resurectin est rapide si on conte jusqu'à 999, par exemple.
Mais si ça va plus loin? Imaginons qu'il y a 1000000 possibilités dont 999999 sont déjà prises! Le script va essayer de trouver le seul nombre non-pris au pif et il mettra enormement du temps. Il y a une chance sur une mille pour tomber sur le bon nombre! Après la millieme tentative (en moyene - peut être plus (!) peut être moins) ça va être bon. Il peut arriver que le résultat sera affiché très vite (trouvé d'un seul coup) mais il peut bien arriver que le résultat sera trouvé seulement après queques dizaines de secondes.
A priori, ça va... mais il s'agit ici d'un "si jamais"...
Ce n'est pas la première fois que ce genre de problèmes m'arrive. J'ai déjà conçu un script pour un chercheur scientifique, qui, en gros, met un certain nombre des sphères de n'importe quelle dimension et n'importe où dans un espace 3D. Régle: il ne fat pas que ces sphères se touchent. Soit on choisit ces valeurs aléatoirement et ça va très vite au début et extra lentement à la fin soit on récalcule toutes les possiblités et on en choisit une aleatoirement à chaque fois. Dans la plupart des cas, la deuxième solution est plus rapide. (programme en QB 4.5 compilé à l'aide de brun45.exe)
Conclusion: Parfois, l'efficacité d'un script peut se voir seulement après un ou plusieurs tests.
Mais si ça va plus loin? Imaginons qu'il y a 1000000 possibilités dont 999999 sont déjà prises! Le script va essayer de trouver le seul nombre non-pris au pif et il mettra enormement du temps. Il y a une chance sur une mille pour tomber sur le bon nombre! Après la millieme tentative (en moyene - peut être plus (!) peut être moins) ça va être bon. Il peut arriver que le résultat sera affiché très vite (trouvé d'un seul coup) mais il peut bien arriver que le résultat sera trouvé seulement après queques dizaines de secondes.
A priori, ça va... mais il s'agit ici d'un "si jamais"...
Ce n'est pas la première fois que ce genre de problèmes m'arrive. J'ai déjà conçu un script pour un chercheur scientifique, qui, en gros, met un certain nombre des sphères de n'importe quelle dimension et n'importe où dans un espace 3D. Régle: il ne fat pas que ces sphères se touchent. Soit on choisit ces valeurs aléatoirement et ça va très vite au début et extra lentement à la fin soit on récalcule toutes les possiblités et on en choisit une aleatoirement à chaque fois. Dans la plupart des cas, la deuxième solution est plus rapide. (programme en QB 4.5 compilé à l'aide de brun45.exe)
Conclusion: Parfois, l'efficacité d'un script peut se voir seulement après un ou plusieurs tests.
Desolé de vous saouler mais je vais soumettre le meme probleme.
je reprends le site web d'une association qui gere les abonnements et cotisation. à chaque creation d'un adherent, je dois tester l'existance d'un ID unique en base avant insertion et gerer aussi le fait quele test doit partir du premier ID possible en base car parfois un adherent est supprimé et ca libere son ID qui peux etre utilisé à nouveau.
J'ai pris la ligne de code plus haut dans le post mais j'ai en retour un ID qui existe deja en base.
--------------------------
$my_sql= "SELECT id FROM $login WHERE 1" ;
$my_rep= mysql_query($my_sql);
$k=intval(substr($login,2,6))*10000;
// $k++;
while (( $myrep = mysql_fetch_array($my_rep)) && !$id){
if (( $myrep["id"] != $k) && !$id){
$id = $k;
}
$k++;
}
Je precise que je suis pas du tout bon en Dev bienque informaticien. Je comprends la logique du code ci-dessus mais je suis incapable de trouver l'erreur.
je reprends le site web d'une association qui gere les abonnements et cotisation. à chaque creation d'un adherent, je dois tester l'existance d'un ID unique en base avant insertion et gerer aussi le fait quele test doit partir du premier ID possible en base car parfois un adherent est supprimé et ca libere son ID qui peux etre utilisé à nouveau.
J'ai pris la ligne de code plus haut dans le post mais j'ai en retour un ID qui existe deja en base.
--------------------------
$my_sql= "SELECT id FROM $login WHERE 1" ;
$my_rep= mysql_query($my_sql);
$k=intval(substr($login,2,6))*10000;
// $k++;
while (( $myrep = mysql_fetch_array($my_rep)) && !$id){
if (( $myrep["id"] != $k) && !$id){
$id = $k;
}
$k++;
}
Je precise que je suis pas du tout bon en Dev bienque informaticien. Je comprends la logique du code ci-dessus mais je suis incapable de trouver l'erreur.
Lassé par la pub ? Créez un compte
- Contenus similaires :
- Forum(réglé) aide pour centrer une newsletter en php
- ForumFormulaire d'envoi d'email en PHP [ Réglé ]
- ForumCréer un programme en php qui affiche des prénoms aléatoires
- Forum[TOPIC UNIQUE ]Comment bien régler Emule et l'optimiser au mieux.
- Solutions[php] 5 Entrer unique defini ! ! ! ( Titre a editer )
- Forumphp comment faire pour les caractére aléatoires
- Forum[PhP]Blog aléatoire
- Forumaleatoire en php
- ForumPHP aléatoire
- Voir plus