Avatar billede kgp43 Nybegynder
29. september 2004 - 21:28 Der er 4 kommentarer og
1 løsning

Indsæt værdi i mysql, men kun hvis værdien ikke findes

Hejsa,

Jeg har denne kode der laver en variabel med 8 tilfældige bogstaver:

//Create a random username
$rand_char = '';
while($i < 8) {
  $rand_char .= chr(rand(97,122));
  $i++;
}

Jeg anvender efterfølgende kode, for at sikre mig at username ikke allerede eksistere i databasen:

//Check is username exist
$user_check_query = mysql_query("SELECT * FROM hosting WHERE username='$rand_char' ") or die(mysql_error());
$user_check_fetch = mysql_num_rows($user_check_query);

if($user_check_fetch != 0){
  echo "Sorry, username already exist in our system";
  exit();
}

- Som i kan se, så stopper jeg scriptet hvis brugernavnet allerede findes. Kan man ikke ændre det sådan, at den bliver ved med at genere et username indtil den finder ét der ikke eksistere i databasen?
Avatar billede Slettet bruger
29. september 2004 - 22:00 #1
du kunne lave det til en funktion:

function tjek_my_username() {

//Create a random username
$rand_char = '';
while($i < 8) {
$rand_char .= chr(rand(97,122));
$i++;
}

//Check is username exist
$user_check_query = mysql_query("SELECT * FROM hosting WHERE username='$rand_char' ") or die(mysql_error());
$user_check_fetch = mysql_num_rows($user_check_query);

if($user_check_fetch != 0){
tjek_my_username();
} else {
echo "Du blev tildelt brugernavnet " . $rand_char;
}

}



og kalde den med

tjek_my_username();

(utestet)
Avatar billede coderdk Praktikant
29. september 2004 - 22:08 #2
Sådan, f.eks.:

while ( true )
{
  $rand_char = '';
  $i = 0;
  while($i < 8)
  {
    $rand_char .= chr(rand(97,122));
    $i++;
  }

  //Check is username exist
  $user_check_query = mysql_query("SELECT * FROM hosting WHERE username='$rand_char' ") or die(mysql_error());
  $user_check_fetch = mysql_num_rows($user_check_query);
  mysql_free_result( $user_check_query );
  if ( $user_check_fetch == 0 )
  {
    break;
  }
}
Avatar billede arne_v Ekspert
29. september 2004 - 22:15 #3
Ikke direkte relateret til spørgsmålet.

Men konceptet med SELECT og test er usundt.

Det duer ikke med flere samtidige brugere.

Et unikt index på brugernavns feltet og fang fejl ved insert er mere
sikkert.
Avatar billede coderdk Praktikant
29. september 2004 - 22:44 #4
arne_v, helt enig :)
Avatar billede kgp43 Nybegynder
02. oktober 2004 - 10:22 #5
arne_v; username er hermed blevet "unique" i mysql.

Valgte at anvende coderdk's eksempel :)
takker for hjælen
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