Avatar billede blach Nybegynder
06. december 2005 - 14:10 Der er 9 kommentarer og
1 løsning

ID tjekkes i løkke om det er unikt

Jeg genererer et ID således:

$random = md5(uniqid (""));
$booking_id = substr("$random", 0, 10);

Hvordan laver jeg en løkke, som laver et nyt ID, hvis den ligger i DB?
Kender godt SQL tjek:

$foresp = mysql_query("SELECT id FROM tabel WHERE kode='$HTTP_GET_VARS[kode]'");

if(mysql_num_rows($foresp)==0) {
Så er det fint
} else {
Så skal der laves et nyt ide!!
}
Avatar billede kourinsu Nybegynder
06. december 2005 - 14:14 #1
Jeg ville mene, at en do-while løkke ville være optimal.
Avatar billede ttopholm Nybegynder
06. december 2005 - 14:16 #2
function checkID($id)
{
  $foresp = mysql_query("SELECT id FROM tabel WHERE kode='$HTTP_GET_VARS[kode]'");
  if(mysql_num_rows($foresp)==0) {
    return $id;
  } else {
    $random = md5(uniqid (""));
    $booking_id = substr("$random", 0, 10);
    checkID($booking_id);
  }
}
$random = md5(uniqid (""));
$booking_id = substr("$random", 0, 10);
echo checkID($booking_id);
Avatar billede ttopholm Nybegynder
06. december 2005 - 14:16 #3
kan være der er lidt typo's, men det burde virke
Avatar billede blach Nybegynder
06. december 2005 - 18:59 #4
Dvs. at når jeg skal gemme et id, så er det checkID($booking_id) ?
Avatar billede blach Nybegynder
06. december 2005 - 19:13 #5
Kan jeg ikke få til at virke..
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in C...

Altså SQL tjek skal nok mere være sådan her:

$foresp = mysql_query("SELECT kode FROM tabel WHERE kode='$booking_id'");
Avatar billede ttopholm Nybegynder
06. december 2005 - 19:19 #6
$foresp = mysql_query("SELECT kode FROM tabel WHERE kode='$id'");
Avatar billede nielle Nybegynder
06. december 2005 - 19:21 #7
Jeg holder nu med kourinsu - brug en do-while:

do
{
    random = md5(uniqid(""));
    $booking_id = substr("$random", 0, 10);

    $sql = "SELECT count(*) AS antal FROM dinTabel WHERE booking_id='" . $booking_id . "'";
    $query = mysql_query($sql) or die(mysql_error());
    $row = mysql_fetch_assoc($query);
}
while ($row["antal"] > 0);
Avatar billede blach Nybegynder
06. december 2005 - 20:03 #8
Jeg ved ikke hvordan jeg skal teste om det virker, men det virker i hvert fald hurtigere :)
Ligger du et svar Nielle? Og tak :)
Avatar billede nielle Nybegynder
06. december 2005 - 20:11 #9
Du kan jo f.eks. teste det ved at temporært rette:

$booking_id = substr("$random", 0, 10);

- til:

$booking_id = substr("$random", 0, 2);

Så burde den begynde at få alvorlige vanskeligheder når alle 2-tegns kombier er ved at være brugt op.

... eller du kan jo også bare tage mit ord for det ;^)
Avatar billede blach Nybegynder
06. december 2005 - 23:13 #10
Jeg tror på dig, ellers kan jeg jo spørge igen :)

Mange tak for hjælpen, også til dig ttopholm!
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester