Avatar billede cpfrande Nybegynder
03. juli 2003 - 17:59 Der er 5 kommentarer og
2 løsninger

Generering af 6 tal, men den ska kun genere 5.

Hej !

Jeg har følgende kode:
function make_nummer() {
  srand ((double) microtime() * 10000);
  do {
    $pos_chars = "1234567890";
    $nummer = substr($pos_chars, rand(0, strlen($pos_chars)-2), 1);
    for($i = 1; $i <= 5; $i++) {
      $nummer .= substr($pos_chars, rand(0, strlen($pos_chars)-1), 1);
    }
  } while(check_nummer($nummer));
  return $nummer;
}

function check_nummer($nummer) {
  $res_check_nummer = mysql_query("SELECT nummer FROM medlemsnumre WHERE nummer='$nummer'");
  if (mysql_num_rows($res_check_nummer) == "0" && $nummer != "00000") {
    return false;
  }
  else {
    return true;
  }
}

$nummer = make_nummer();

Den burde, efter min mening kun lave 5 tal (sætter jeg med $i <= 5 i min for()). Men den laver 6 tal.

Hvorfor???

- frande
Avatar billede ahv Nybegynder
03. juli 2003 - 18:01 #1
Godt spm. jeg kan ikke lige se hvorfor, du bruger ikke variablen i skal noget, prøv ->

for($i = 0; $i < 5; $i++) {
Avatar billede opperen Nybegynder
03. juli 2003 - 18:04 #2
Det er fordi løkken kører fem gange. I femte gennemløb lægger du osse et extra tal til og så stopper løkken. Det vil altså sige at det bliver 6 tal langt. prøv <= 4 i stedet :-)
Avatar billede cpfrande Nybegynder
03. juli 2003 - 18:10 #3
Tak for hjælpen.

Jeg fordeler points halvt over.
Dvs 5 til hver.

Godt nok var ahv hurtigst, men jeg fik en forklaring på mit problem af opperen.

Tak for hjælpen !
Avatar billede tipsen Nybegynder
03. juli 2003 - 18:34 #4
I stedet for alle de løkker og finurligheder - hvorfor så ikke bare:

function make_nummer() {
  do {
    $nummer = mt_rand(10000, 99999);
  } while(check_nummer($nummer));
  return $nummer;
}
Avatar billede tipsen Nybegynder
03. juli 2003 - 18:35 #5
- du behøver jo ikke spilde *hele* processor-kraften på unødvendigt arbejde ;-)
Avatar billede tipsen Nybegynder
03. juli 2003 - 18:38 #6
måske endda noget i retning af følgende query er mulig:

SELECT FLOOR(90000*RAND()+10000) AS nytnummer FROM medlemsnumre WHERE nummer!=nytnummer
Avatar billede cpfrande Nybegynder
03. juli 2003 - 20:54 #7
Vil jeg da se på tipsen.

Tak for hjælpen.
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