Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]Generator unikalnych ciągów.
Mareczko
post 2.07.2011, 12:50:26
Post #1





Grupa: Zarejestrowani
Postów: 26
Pomógł: 0
Dołączył: 20.11.2009

Ostrzeżenie: (0%)
-----


Witam
Może mi ktoś pomóc w napisaniu generatora X unikalnych ciągów o długości Y znaków ? Proszę o jakieś wskazówki.

Pozdrawiam
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 18)
Adi32
post 2.07.2011, 12:59:53
Post #2





Grupa: Zarejestrowani
Postów: 348
Pomógł: 26
Dołączył: 8.10.2008
Skąd: Lublin

Ostrzeżenie: (0%)
-----


  1. function generuj()
  2. {
  3.  
  4. $ciag = md5(time());
  5. $db->query("SELECT * FROM ciagi WHERE ciag='$ciag'");
  6. if (!$db->res()) {
  7. $db->query("INSERT INTO ciagi SET ciag='$ciag'");
  8. return $ciag;
  9. } else {
  10. generuj();
  11. }
  12.  
  13. }


Ten post edytował Adi32 2.07.2011, 13:00:06


--------------------
Wolałem języki z rodziny C ale poszedłem na łatwizne...
Go to the top of the page
+Quote Post
Mareczko
post 2.07.2011, 13:02:50
Post #3





Grupa: Zarejestrowani
Postów: 26
Pomógł: 0
Dołączył: 20.11.2009

Ostrzeżenie: (0%)
-----


@up. Dzięki za kod ale w moim przypadku nie działam na bazie. Ja te kody chce tylko wyświetlić na ekranie.
Go to the top of the page
+Quote Post
Adi32
post 2.07.2011, 13:11:19
Post #4





Grupa: Zarejestrowani
Postów: 348
Pomógł: 26
Dołączył: 8.10.2008
Skąd: Lublin

Ostrzeżenie: (0%)
-----


Cytat(Mareczko @ 2.07.2011, 14:02:50 ) *
@up. Dzięki za kod ale w moim przypadku nie działam na bazie. Ja te kody chce tylko wyświetlić na ekranie.


Jeżeli mają być unikalne to musisz je gdzieś zapisywać.

  1.  
  2. function generuj()
  3. {
  4.  
  5. $plik = 'ciagi.txt';
  6.  
  7. $ciag = md5(time());
  8.  
  9. $f = fopen($plik, "r"))
  10. $dane = fread($f, filesize($plik));
  11. fclose($plik);
  12.  
  13. $f_ciagi = explode(' ',$dane);
  14.  
  15. if(!in_array($ciag,$f_ciagi)) {
  16.  
  17. $fp = fopen($plik, "a");
  18. flock($fp, 2);
  19. fwrite($fp, $ciag.' ');
  20. flock($fp, 3);
  21. fclose($fp);
  22.  
  23. return $ciag;
  24. } else {
  25. generuj();
  26. }
  27.  
  28. }


Ten post edytował Adi32 2.07.2011, 13:13:45


--------------------
Wolałem języki z rodziny C ale poszedłem na łatwizne...
Go to the top of the page
+Quote Post
Mareczko
post 2.07.2011, 13:13:21
Post #5





Grupa: Zarejestrowani
Postów: 26
Pomógł: 0
Dołączył: 20.11.2009

Ostrzeżenie: (0%)
-----


Aha rozumie. A nie może być to tablica ?
Go to the top of the page
+Quote Post
Adi32
post 2.07.2011, 13:14:56
Post #6





Grupa: Zarejestrowani
Postów: 348
Pomógł: 26
Dołączył: 8.10.2008
Skąd: Lublin

Ostrzeżenie: (0%)
-----


Może, ale nawet sesyjna trwa tylko do końca sesji...

O co Ci dokładnie chodzi?


--------------------
Wolałem języki z rodziny C ale poszedłem na łatwizne...
Go to the top of the page
+Quote Post
Mareczko
post 2.07.2011, 13:17:11
Post #7





Grupa: Zarejestrowani
Postów: 26
Pomógł: 0
Dołączył: 20.11.2009

Ostrzeżenie: (0%)
-----


Ogólnie chcę zrobić generator kodów takich jak np. w DotPay. Opalam plik, generuje, kopiuje sobie je od razu i tyle. Więcej mi nie potrzeba, jedynie tyle żeby te kody się nie powtarzały.
Go to the top of the page
+Quote Post
Adi32
post 2.07.2011, 13:20:17
Post #8





Grupa: Zarejestrowani
Postów: 348
Pomógł: 26
Dołączył: 8.10.2008
Skąd: Lublin

Ostrzeżenie: (0%)
-----


Cytat(Mareczko @ 2.07.2011, 14:17:11 ) *
Ogólnie chcę zrobić generator kodów takich jak np. w DotPay. Opalam plik, generuje, kopiuje sobie je od razu i tyle. Więcej mi nie potrzeba, jedynie tyle żeby te kody się nie powtarzały.


No to tłumacze, że aby się nie powtarzały muszą się gdzieś zapisywać.

Czy w grę wchodzi taka opcja, że dzisiaj generujesz sobie kod, i jutro też będziesz chciał wygenerować inny kod z 100% pewnością, że się nie powtórzą? To tablice zwykłe i $_SESSION się nie nadają.


--------------------
Wolałem języki z rodziny C ale poszedłem na łatwizne...
Go to the top of the page
+Quote Post
Mareczko
post 2.07.2011, 13:21:31
Post #9





Grupa: Zarejestrowani
Postów: 26
Pomógł: 0
Dołączył: 20.11.2009

Ostrzeżenie: (0%)
-----


Nie, potrzebuje jedynie żeby w danej chwili się nie powtarzały.
Go to the top of the page
+Quote Post
Adi32
post 2.07.2011, 13:27:10
Post #10





Grupa: Zarejestrowani
Postów: 348
Pomógł: 26
Dołączył: 8.10.2008
Skąd: Lublin

Ostrzeżenie: (0%)
-----


  1.  
  2. function generuj()
  3. {
  4.  
  5. $ciag = md5(time());
  6. if (!in_array($ciag,$_SESSION)) {
  7. $_SESSION[] = $ciag;
  8. return $ciag;
  9. } else {
  10. generuj();
  11. }
  12.  
  13. }


Ten post edytował Adi32 2.07.2011, 13:27:43


--------------------
Wolałem języki z rodziny C ale poszedłem na łatwizne...
Go to the top of the page
+Quote Post
Mareczko
post 2.07.2011, 13:34:40
Post #11





Grupa: Zarejestrowani
Postów: 26
Pomógł: 0
Dołączył: 20.11.2009

Ostrzeżenie: (0%)
-----


Coś nie tak:
Warning: in_array() [function.in-array]: Wrong datatype for second argument
Go to the top of the page
+Quote Post
Adi32
post 2.07.2011, 13:38:53
Post #12





Grupa: Zarejestrowani
Postów: 348
Pomógł: 26
Dołączył: 8.10.2008
Skąd: Lublin

Ostrzeżenie: (0%)
-----


Cytat(Mareczko @ 2.07.2011, 14:34:40 ) *
Coś nie tak:
Warning: in_array() [function.in-array]: Wrong datatype for second argument


Wszystko tak.
Jak używa się sesji to trzeba gdzieś na początku strony dodać:



--------------------
Wolałem języki z rodziny C ale poszedłem na łatwizne...
Go to the top of the page
+Quote Post
pyro
post 2.07.2011, 13:45:12
Post #13





Grupa: Zarejestrowani
Postów: 2 148
Pomógł: 230
Dołączył: 26.03.2008

Ostrzeżenie: (0%)
-----


  1. function random_tokens($count, $length) // ilość, długośc każdego
  2. {
  3. $tokens = array();
  4. $i = 1;
  5.  
  6. while($i <= $count)
  7. {
  8. if(!in_array($token = substr(sha1(microtime()),0,$length), $tokens))
  9. {
  10. $tokens[] = $token;
  11. $i++;
  12. }
  13. }
  14.  
  15. return $tokens;
  16.  
  17. }


Nie wiem po co tu były sesje, ale może czegoś nie przeczytałem w temacie.

Ten post edytował pyro 2.07.2011, 13:53:18


--------------------
ET LINGUA EIUS LOQUETUR IUDICIUM
Go to the top of the page
+Quote Post
foxbond
post 2.07.2011, 13:46:29
Post #14





Grupa: Zarejestrowani
Postów: 162
Pomógł: 12
Dołączył: 20.12.2009
Skąd: Siedlce

Ostrzeżenie: (0%)
-----


  1. $arr = array();
  2.  
  3.  
  4. $ile = 20;
  5. $dlugosc = 10;
  6.  
  7. for ($i=0 ; $i < $ile ; $i++)
  8. {
  9. $rand = substr(md5(time().rand().microtime()), 0, $dlugosc);
  10. while (in_array($rand, $arr))
  11. {
  12. $rand = substr(md5(time().rand().microtime()), 0, $dlugosc);
  13. }
  14.  
  15. $arr[] = $rand;
  16. }
  17.  
  18. print_r($arr);


Chyba wszystko w porządku...

@pyro był pierwszy

Już poprawiłem tongue.gif

Ten post edytował foxbond 2.07.2011, 14:00:00
Go to the top of the page
+Quote Post
pyro
post 2.07.2011, 13:48:15
Post #15





Grupa: Zarejestrowani
Postów: 2 148
Pomógł: 230
Dołączył: 26.03.2008

Ostrzeżenie: (0%)
-----


@foxbond, kod jest niepoprawny. PHP =/= JS smile.gif


--------------------
ET LINGUA EIUS LOQUETUR IUDICIUM
Go to the top of the page
+Quote Post
Mareczko
post 2.07.2011, 13:54:05
Post #16





Grupa: Zarejestrowani
Postów: 26
Pomógł: 0
Dołączył: 20.11.2009

Ostrzeżenie: (0%)
-----


pyro, małe pytanie mam. W Twoim kodzie ustalam $count czyli ilość jaką chce wygenerować ale w przypadku kiedy kody się powtórzą już nie otrzymam tej ilości. Jak to zmienić ?
Go to the top of the page
+Quote Post
pyro
post 2.07.2011, 13:55:36
Post #17





Grupa: Zarejestrowani
Postów: 2 148
Pomógł: 230
Dołączył: 26.03.2008

Ostrzeżenie: (0%)
-----


Cytat(Mareczko @ 2.07.2011, 14:54:05 ) *
pyro, małe pytanie mam. W Twoim kodzie ustalam $count czyli ilość jaką chce wygenerować ale w przypadku kiedy kody się powtórzą już nie otrzymam tej ilości. Jak to zmienić ?


Zmieniłem to od razu, bo też to zauważyłem. Spójrz na mój poprzedni post jeszcze raz


--------------------
ET LINGUA EIUS LOQUETUR IUDICIUM
Go to the top of the page
+Quote Post
nospor
post 2.07.2011, 13:56:34
Post #18





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




pyro zwiększa $i dopiero wtedy gdy kody się nie powtarzają, więc sytuacja o której mówisz nigdy nie nastąpi


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Mareczko
post 2.07.2011, 14:00:12
Post #19





Grupa: Zarejestrowani
Postów: 26
Pomógł: 0
Dołączył: 20.11.2009

Ostrzeżenie: (0%)
-----


Ok, wszystko ok:) nie zauważyłem zmiany.
Dziękuję za pomoc.

Pozdrawiam.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 13.07.2025 - 17:34