webForumDet fria alternativet

skapa unika id för användare

PHP

15 svar · 646 visningar · startad av pasca

Medlem sedan mars 200312 inlägg
Frågan#1

Håller på med en sida där folk behöver registrera sig för att komma in. Och jag skulle vilja ge alla en unik id liknande den som användarna på lunarstorm får (en massa bokstäver och siffror som skapas slumpmässigt).

Hur skapar man dessa id?
Använder mysql som databas att spara informationen i.

Medlem sedan nov. 2001274 inlägg
#2

För att göra så att ingen annan post i en kolumn kan ha samma värde som en annan så gör du fältet till primärnyckel. Dessutom så använder du attributet auto_increment på fältet när du skapar tabellen, så räknar det upp med ett automatiskt när du lägger till en ny post (användare) i tabellen.

Typ såhär

create table Anvandare (AnvandareId int auto_increment, primary key(AnvandareId))

Btw, välkommen som fan till WF! (första gången jag får säga det, känns lite speciellt) :)

Medlem sedan mars 200312 inlägg
#3

Jo, auto_increment känner jag till men jag vill att istället att ha en siffra som ökar med 1 hela tiden ha en unik id som består av siffror och bokstäver så som t ex. lunarstorm har (det är en kombination av 32 tecken med mellanstreck). Har inte hållit på med php och mysql på ett tag nu men vad jag kan minnas så skall det finnas en funktion för att skapa liknande id men kommer inte ihåg om det är en funktion i php eller mysql (kan inte hitta det iaf).

Tack för välkomnandet förresten :)

Medlem sedan aug. 2001226 inlägg
#4

har förmig att i access iaf hette de "Replikerings id", ngt sådant!

Over and Out
Pirro

PS.
Välkommen till wF!

Medlem sedan mars 200312 inlägg
#5

Så kanske det heter ja...
Någon som vet om det går att skapa dessa replikations id i mysql eller om det bara fungerar i access?

Medlem sedan dec. 200283 inlägg
#6

Den här funktionen har jag för mig skapar en helt unikt id.

$random_id 	= md5(uniqid(rand(),1));
Medlem sedan feb. 200399 inlägg
#7

det här skapar också ett unikt id:

<?php

function unique_id($delar = 4,$langd = array(4,5,6,5))
{
   // de bokstäver och siffror som ska vara med
   $bok = array('A','B','C','D','E','F',1,2,3,4,5,6,7,8,9);

   // seed till array_rand()
   srand((float) microtime() * 10000000);

   // loop
   for($i = 0; $i < $delar; $i++)
   {
      // slumparen
      $slump = array_rand($bok,$langd[$i]);

      // loop nummer 2
      for($j = 0; $j < $langd[$i]; $j++)
      {
         $id[$i] .= $bok[$slump[$j]];
      }
   }

   // skapa id:n
   $id = "{" . implode('-',$id) . "}";

   return $id;
}

?>
Medlem sedan juli 2002630 inlägg
#8

Vad är skillnaden/fördelen med ett "replikationsID" jämfört med ett vanligt heltalsID som auto_increment?
/M

Medlem sedan feb. 200399 inlägg
#9

om du använder dig av ett replikations-id så är det större chans att alla medlemmar har olika id:n... tror jag... =/

Medlem sedan juli 2002630 inlägg
#10

Men då "auto_increment" är en primärnyckel och därmed unik och även ett heltal kan man väl ha oändligt med medlemmar (givetvis förutsatt att man har alla användare i samma users-tabell)...

Medlem sedan feb. 200399 inlägg
#11

jo, jag kom på det efter mitt förra inlägg... jag tror nog inte att det spelar nån riktigt stor roll vilken metod man använder, men personligen tycker jag att det ser snyggare ut med id:n som ser ut ungefär som de som Lunarstorm använder sig av...

Medlem sedan mars 200312 inlägg
#12

Hmmm... har funderat lite på ovanstående förslag och vet inte riktigt om jag skall använda någon av dem.
nackdelen med att skapa ID kombinationen i PHP är ju att man måste först jämföra det med databasen så att det inte redan finns ett liknande (ingen stor risk ifs :) ingen stor nackdel ifs men det blir ju extra rader att skriva dit... (/me lat)

har lusläst i mysql manualen och kan inte hitta ngt om replikations id där så det finns väl inget då antar jag.

nåja, får väl fundera vidare hur jag skall göra.
Tack för alla förslag :)

Medlem sedan feb. 200399 inlägg
#13

jag själv använder mig av den funktionen jag visade längre upp, men det är ju bara jag... =P

Medlem sedan nov. 20025 inlägg
#14

En fråga (som egentligen inte har med sammanhanget at göra :)...

När jag har lagt till ett par rader i mitt 'table' och tar bort ngn, så blir det ju så att "auto_increment-funktionen" fortsätter att räkna på ett nummer efter senaste (var jag tillräckligt otydlig? :)...

ex.
--------------------
ID name
--------------------
1 olle
2 pär
3 stina
4 göran
5 knut
--------------------

Tar bort 3 & lägger till en usr....

--------------------
ID name
--------------------
1 olle
2 pär
4 göran
5 knut
6 rutger
--------------------

Hur kan man sk. "Nollställa", detta ?
(Har provat att --> Rensa tabellen ("FLUSH TABLE") <-- funkar inte...)

/Mvh.
Markus

Medlem sedan feb. 200399 inlägg
#15

du skulle ju kunna fixa ett eget skript som visar alla rader i en tabell, och sen kan du ju ha ett litet skript som t ex det här. det ska kallas så här:
fil.php?id=
id ska självklart vara radens ID!

// ta bort raden
$sql = "DELETE FROM tabell WHERE id='" . $_GET['id'] . "'";
$result = mysql_query($sql) or die(mysql_error());

// uppdatera
$sql = "UPDATE tabell SET id=id-1 WHERE id > " . $_GET['id'];
$result = mysql_query($sql) or die(mysql_error());
Medlem sedan feb. 20034 441 inlägg
#16

Morpheus skrev:

<?php

function unique_id($delar = 4,$langd = array(4,5,6,5))
{
   // de bokstäver och siffror som ska vara med
   $bok = array('A','B','C','D','E','F',1,2,3,4,5,6,7,8,9);

   // seed till array_rand()
   srand((float) microtime() * 10000000);

   // loop
   for($i = 0; $i < $delar; $i++)
   {
      // slumparen
      $slump = array_rand($bok,$langd[$i]);

      // loop nummer 2
      for($j = 0; $j < $langd[$i]; $j++)
      {
         $id[$i] .= $bok[$slump[$j]];
      }
   }

   // skapa id:n
   $id = "{" . implode('-',$id) . "}";

   return $id;
}

?>

Använder ovanstående kodsnutt, för att skapa en aktiveringsnyckel, som ska skickas i ett mail.
Problemet är att jag får:

Notice: Undefined variable: id in E:\Projekt\_Php\Reg\css\funcs.php on line 30
Notice: Undefined offset: 0 in E:\Projekt\_Php\Reg\css\funcs.php on line 30
Notice: Undefined offset: 1 in E:\Projekt\_Php\Reg\css\funcs.php on line 30
Notice: Undefined offset: 2 in E:\Projekt\_Php\Reg\css\funcs.php on line 30
Notice: Undefined offset: 3 in E:\Projekt\_Php\Reg\css\funcs.php on line 30

Koden jag använder för att testa det här är:

print("ID-Nummer: " . unique_id());

På rad 30 i min fil, finns kodstycket:

$id[$i] .= $bok[$slump[$j]];

Hur ska jag göra det för att slippa ovanstående felmeddelanden?

261 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
120 ms — deklarationer (db)
0 ms — hämta statistik (cache)
138 ms — hämta tråd, inlägg och bilagor (db)
120 ms — ändringar (db)