Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php]Generator 6 znakow jakie jest prawdopodobienstwo powtozenia ?
Forum PHP.pl > Forum > Przedszkole
andy84
czesc moze mi ktos powiedziec jakie moge miec prawdopodobienstwo powtorzenia w tym skrypcie questionmark.gifquestionmark.gif

generuje on 6znakowy kod za kazdym uruchomeiniem inny, ale czy moze sie np zdazyc ze w 100 wygenerowanych kodach beddzie powtorka ?


  1. <?
  2. $alphanum = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
  3. $rand = substr(str_shuffle($alphanum), 0, 6); 
  4. echo "$rand";
  5. ?>
strife
To pytanie to raczej z matematyką jest związane, a nie z php, poczytaj sobie na temat prawdopodobieństwa. http://pl.wikipedia.org/wiki/Prawdopodobieństwo to będziesz znał odpowiedź na pytanie.

Cytat
generuje on 6znakowy kod za kazdym uruchomeiniem inny, ale czy moze sie np zdazyc ze w 100 wygenerowanych kodach beddzie powtorka ?


PS.
  1. <?php
  2. echo "$rand";
  3. ?>
- niepotrzebnie używasz ciapków ( " ).
andy84
Cytat(strife @ 26.06.2007, 21:17:02 ) *
To pytanie to raczej z matematyką jest związane, a nie z php, poczytaj sobie na temat prawdopodobieństwa. http://pl.wikipedia.org/wiki/Prawdopodobieństwo to będziesz znał odpowiedź na pytanie.
PS.
  1. <?php
  2. echo "$rand";
  3. ?>
- niepotrzebnie używasz ciapków ( " ).

@strife hehe nie nawidze prawdopodobienstwa smile.gif ale dzieki za linka smile.gif
strife
Cytat(andy84 @ 26.06.2007, 22:21:11 ) *
@strife hehe nie nawidze prawdopodobienstwa smile.gif ale dzieki za linka smile.gif


No ja też nie, ale jak trzeba to trzeba, ponieważ chcesz znać odpowiedź na pytanie:

Cytat
czesc moze mi ktos powiedziec jakie moge miec prawdopodobienstwo powtorzenia w tym skrypcie questionmark.gifquestionmark.gif


Więc wiesz winksmiley.jpg Nie mniej jednak z własnego doświadczenia mogę Ci powiedzieć, że prawdopodobieństwo wygenerowania takiego samego kodu będzie dosyć niewielkie. Może lepiej napisz co to ma być, do czego chcesz tego użyć to podamy Ci inne może lepsze rozwiązanie smile.gif
andy84
@strife robie wlasnie system zamowien w ktorym beda kupony - tzn firma bedzie wysylala losowo wygenerowane kupony do 500 klientow miesiecznie, kazdy kupon musi byc inny i nie powtarzac sie 6 znakow alfa/num wielkosc liter nie ma znaczenia , mam juz formularz caly zrobiony z pelna rejestracja uzytkownika ktory podaje go itp: tabele w bazie ktora sprawdza mi czy sie kuponu nr nie bedzie powtarzal jesli bedzie raz uzyty to zostaje wylaczony, wiec tylko cos do dobrej generacji z mala bardzo mala iloscia powtorzen zostalo smile.gif

qde sory jak za bardzo naplatalem ;/
strife
No teraz już lepiej smile.gif

Ja bym to rozwiązał w ten sposób tworzysz sobie tabele, w której masz jeden klucz unikalny (z ID kuponu), a druga wartość to powtórzenie przyjmujące wartość logiczną true/false w zależności czy ten kupon został już użyty.

A kupon możesz losować w bardzo prosty sposób korzystając z md5" title="Zobacz w manualu PHP" target="_manual.

  1. <?php
  2. $generate = strtoupper(md5(microtime()));
  3. $result  = substr($generate, 0, 6 );
  4. echo $result;
  5. ?>


W pętli oczywiście, i dodajesz kody do bazy. Jak sprawdzisz czy kody się rzeczywiście nie powtarzają? Pole unikalne w bazie. smile.gif

Ot cała filozofia.

Pozdrawiam.
andy84
Ja bym to rozwiązał w ten sposób tworzysz sobie tabele, w której masz jeden klucz unikalny (z ID kuponu), a druga wartość to powtórzenie przyjmujące wartość logiczną true/false w zależności czy ten kupon został już użyty. -

@strife: to juz mam smile.gif

zostalo mi tylko generowanie tych unikalnych kluczy i jeszce musze zrobic ich liczenie ze jezeli wygeneruje 500kluczy to zeby przestal je wpisywac mozesz z tym mi cos poroadzic pewnie wypadalo by zroibc sprawdzanie przy pomocy count w bazie i jak count bedzie sie =500 to mu zrobic wyjscie z petli questionmark.gifquestionmark.gif dobrze mysle ?
strife
Cytat
zostalo mi tylko generowanie tych unikalnych kluczy i jeszce musze zrobic ich liczenie ze jezeli wygeneruje 500kluczy to zeby przestal je wpisywac mozesz z tym mi cos poroadzic pewnie wypadalo by zroibc sprawdzanie przy pomocy count w bazie i jak count bedzie sie =500 to mu zrobic wyjscie z petli questionmark.gifquestionmark.gif dobrze mysle ?


Dokładnie.

  1. <?php
  2. $ile = 500;
  3. while( $i < $ile ) {
  4. $generate = strtoupper(md5(microtime()+$i));
  5. $result  = substr($generate, 0, 6 );
  6. // tutaj wykonujesz zapytanie dodajac $result
  7. $i++;
  8. }
  9. ?>


Pozdrawiam.
kwiateusz
zalezy czy poprzednie kupony bedą usuwane czy pozostaną i mogą być wykorzystane w dowolnym terminie... jeśli zostaną to daj fora do 500 smile.gif
andy84
ok sluchajcie zroiblem skrypt do generowania i wpisania tych rekordow do bazy
  1. <?php
  2. $i=0;
  3. while($i < 500){
  4. $generate = strtoupper(md5(microtime()));
  5. $result  = substr($generate, 0, 6 );
  6. $query="INSERT INTO vouchers VALUES ('0','".$result."','0')";
  7. mysql_query($query) or die (mysql_error());
  8. $i++;
  9. }
  10. ?>


ale kurcze wstawiajac to w ten sposob wszystkie ID mam = 0

uzywam takiego wstawiania do bazy ( z 0 ) ale poza petla i wszystko dziala moze mi ktorys z was podpowiedziec jak ustawic dodawanie aby zawsze ID prawidlowo sie wpisywalo po koleji questionmark.gifquestionmark.gif - moge napisac skrypt ktory bedzie co petle dodawal 1 do liczby ID ale czy to jest rozwiazaniem ?
kwiateusz
a id w bazie masz auto_increment? on powinie nsie zapoiekowac tym że id bedzie większe o 1
strife
Cytat(kwiateusz @ 26.06.2007, 23:15:47 ) *
a id w bazie masz auto_increment? on powinie nsie zapoiekowac tym że id bedzie większe o 1


Ale po co dodatkowe pole ? Unikalne ID to będzie ten wygenerowany kupon, chyba lepiej :roll2:

  1. <?php
  2. $query="INSERT INTO vouchers VALUES ('0','".$result."','0')";
  3. ?>


Jak widzę, dajesz zero w zapytaniu na pierwszej pozycji przed przecinkiem, także nie dziw się, że wszystkie masz z wartością zero. Ja bym to rozwiązał tak, tworzymy tabele gdzie ID jest unikalne typu varchar(6).

Kod
ID | DISABLED


A potem:

  1. <?php
  2. $query="INSERT INTO vouchers VALUES ('$result',0)";
  3. ?>


snitch.gif
andy84
zeczywiscie male nie dopatrzenie ale juz jest ok autoincrement braklo i sie dziwie smile.gif biggrin.gif to teraz wisienka na topie i ten dzial zamykam smile.gif pozdorwka panowie

@strife - dzieki smile.gif

Ej panowie jeszce swieczuszki trzeba dostawic ;/ powie mi ktos jak sprawdzic czy ciag wpisywany ma min 6 znakow i sforsowac uzytkownika do wpisania min 6 znakow a jak jest cos mniej to ze odrazu jest to blad?questionmark.gif?

jak robie sprawdzenie tego w ciagu to zajmnie wieki ;/
x3m
Cytat
czesc moze mi ktos powiedziec jakie moge miec prawdopodobienstwo powtorzenia w tym skrypcie questionmark.gifquestionmark.gif

1 do 1 947 792
strife
Cytat(andy84 @ 26.06.2007, 23:20:22 ) *
Ej panowie jeszce swieczuszki trzeba dostawic ;/ powie mi ktos jak sprawdzic czy ciag wpisywany ma min 6 znakow i sforsowac uzytkownika do wpisania min 6 znakow a jak jest cos mniej to ze odrazu jest to blad?questionmark.gif?

jak robie sprawdzenie tego w ciagu to zajmnie wieki ;/


Robisz taki skrypt, a pytasz o totalne podstawy. No tak w sumie na Przedszkolu jesteśmy tongue.gif Zainteresuj się strlen" title="Zobacz w manualu PHP" target="_manual w takim razie. winksmiley.jpg

Pozdrawiam.
andy84
@strife jestem kompletnym nowicjuszem ale pytam tylko o to czego nie wiem albo nie mam pojecia po jakich slowach szukac dzieki napewno cos zaraz z tym zrobie pozdrowka smile.gif

ok zliczanie ilosci na min 6 tez poprawione biggrin.gif
  1. <?php
  2. $strl=strlen($vouchernoform);
  3. if($strl<'6')
  4. {
  5. $vouchernoform="Invalid";
  6. echo "<br><div id="star"><b>Sorry but this Voucher is invalid, or has been used already.<br>If you enterd this voucher first time please contact our system administrator
    .<b></div><br>"
    ;
  7. }
  8. ?>


ok koncze temacik wszystko smiga hula i skacze smile.gif dobrej nocy wam
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.