Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> zapisanie haseł do pliku .txt, hasła mają po 5 cyfr i są każde w osobnej linii, NIE powtarzają się.
eremen
post
Post #1





Grupa: Zarejestrowani
Postów: 69
Pomógł: 0
Dołączył: 15.02.2012
Skąd: Głogów - Opole

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


  1. for ($i=0;$i<50;$i++) <<- wymyśliłem że to sprawi że będzie 50 wygenerowanych kodów ;)
  2. {
  3. $znaki = '1234567890qwertyuiopasdfghjkklzxcvbnm';
  4. $kod = '';
  5. for ($i=0; $i<5; $i++) // 5 to długość ciągu
  6. {
  7. $kod .= $znaki[rand()%(strlen($znaki))];
  8. }
  9. }


mam funkcję generującą kod i chciałbym aby były one zapisywane do pliku kody.txt(pewnie fopen() fwrite() fclose() - tylko nie wiem jak to umieścić w kodzie ;/ ) i jak zrobić żeby kody się nie powtarzały?


zrobiłem tak:
  1. for ($i=0; $i<50; $i++){
  2. $znaki = '1234567890qwertyuiopasdfghjkklzxcvbnm';
  3. $kod = '';
  4. $fileHandler=fopen("kody.txt","w"); <<- tu otwieram plik
  5. for ($i=0; $i<5; $i++) // 5 to długość ciągu
  6. {
  7. $kod .= $znaki[rand()%(strlen($znaki))];
  8. fputs($fileHandler,$kod); <<- tu zapisuję kod za każdym z 50 razy
  9. }
  10. fclose($fileHandler); <<- tu zamykam
  11. }

jednak jest to źle... jak to mam w kodzie to strona się nie otwiera tylko cały czas ładuje ;]

Ten post edytował eremen 19.02.2012, 13:01:31
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 9)
mortus
post
Post #2





Grupa: Zarejestrowani
Postów: 2 178
Pomógł: 596
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

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


Najpierw wygeneruj sobie kody i zapisz je do tablicy, a później przy użyciu file_put_contents() i implode() zapisz plik:
  1. for($i = 0; $i < 50; $i++) {
  2. // tutaj generujemy pojedynczy kod
  3. $codes[] = $code; // a tutaj zapisujemy go do tablicy
  4. }
  5. file_put_contents('codes.txt', implode(PHP_EOL, $codes));

Do sprawdzenia, czy kod się nie powtarza, trzeba użyć pętli w pętli.
Go to the top of the page
+Quote Post
eremen
post
Post #3





Grupa: Zarejestrowani
Postów: 69
Pomógł: 0
Dołączył: 15.02.2012
Skąd: Głogów - Opole

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


PHP_EOL to to samo co <br/>?(IMG:style_emoticons/default/smile.gif)


  1. for ($i=0; $i<50; $i++){
  2. $znaki = '1234567890qwertyuiopasdfghjkklzxcvbnm';
  3. $kod = '';
  4. for ($i=0; $i<5; $i++) // 5 to długość ciągu
  5. {
  6. $kod .= $znaki[rand()%(strlen($znaki))];
  7. }
  8. $kod[] = $kod; <<-- błąd taki: Fatal error: [] operator not su
  9. }
  10. file_put_contents('kody.txt', implode(PHP_EOL, $kod));


chyba coś źle kombinuję z tym...

Ten post edytował eremen 19.02.2012, 13:15:50
Go to the top of the page
+Quote Post
gothye
post
Post #4





Grupa: Zarejestrowani
Postów: 702
Pomógł: 65
Dołączył: 16.03.2009

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


PHP_EOL to \n

po za tym umieść to w pliku .php + jakąś zdefiniowaną stałą inaczej dane będą dostępne z poziomu www do pliku .txt
Go to the top of the page
+Quote Post
mortus
post
Post #5





Grupa: Zarejestrowani
Postów: 2 178
Pomógł: 596
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

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


PHP_EOL to znak końca linii właściwy dla systemu operacyjnego. W ostatniej instrukcji implodujesz tablicę kodów $codes, a nie pojedynczy kod $kod (mam nadzieję, że widzisz błąd).

@DOWN: Widzę, że zmieniłeś kod. Zmienna $kod nie może być jednocześnie tablicą i łańcuchem znaków. Jeśli już to:
  1. $kody[] = $kod;

i $kody podajesz jako drugi argument funkcji implode().

Ten post edytował mortus 19.02.2012, 13:23:05
Go to the top of the page
+Quote Post
eremen
post
Post #6





Grupa: Zarejestrowani
Postów: 69
Pomógł: 0
Dołączył: 15.02.2012
Skąd: Głogów - Opole

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


mam to w pliku .php , ale nie wiem jak utworzyć zdefiniowaną stałą... z resztą myślę że ochrona przed włamaniem nie będzie puki co potrzebna bo to tylko zadanie na praktyki (IMG:style_emoticons/default/wink.gif)
... dość skomplikowane zadanie - to tylko część ;]

Cytat(mortus @ 19.02.2012, 13:17:06 ) *
PHP_EOL to znak końca linii właściwy dla systemu operacyjnego. W ostatniej instrukcji implodujesz tablicę kodów $codes, a nie pojedynczy kod $kod (mam nadzieję, że widzisz błąd).


czyli muszę utworzyć zmienną $code nad pierwszym for? na tej samej zasadzie co $kod nad drugim for? tak to biorę na logikę ;]

na tej zasadzie:
  1. $code = '';
  2. for ($i=0; $i<50; $i++){
  3. $znaki = '1234567890qwertyuiopasdfghjkklzxcvbnm';
  4. $kod = '';
  5. for ($i=0; $i<5; $i++) // 5 to długość ciągu
  6. {
  7. $kod .= $znaki[rand()%(strlen($znaki))];
  8. }
  9. $codes[] = $code; // a tutaj zapisujemy go do tablicy
  10. }
  11. file_put_contents('codes.txt', implode(PHP_EOL, $codes));


Ten post edytował eremen 19.02.2012, 13:25:18
Go to the top of the page
+Quote Post
mortus
post
Post #7





Grupa: Zarejestrowani
Postów: 2 178
Pomógł: 596
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

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


Nie no, wygenerowany kod zapisujesz w tablicy (tablice w PHP deklarujemy np. poprzez nawiasy kwadratowe []) kodów:
  1. for ($i=0; $i<50; $i++) {
  2. $znaki = '1234567890qwertyuiopasdfghjkklzxcvbnm';
  3. $kod = '';
  4. for ($i=0; $i<5; $i++) // 5 to długość ciągu
  5. {
  6. $kod .= $znaki[rand()%(strlen($znaki))];
  7. }
  8. $kody[] = $kod; // a tutaj zapisujemy go do tablicy
  9. }
  10. file_put_contents('codes.txt', implode(PHP_EOL, $kody));


EDIT:
Skoro to na praktyki, to kolejne odpowiedzi będą tylko podpowiedziami.

Ten post edytował mortus 19.02.2012, 13:31:24
Go to the top of the page
+Quote Post
eremen
post
Post #8





Grupa: Zarejestrowani
Postów: 69
Pomógł: 0
Dołączył: 15.02.2012
Skąd: Głogów - Opole

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


Cytat(mortus @ 19.02.2012, 13:28:40 ) *
Skoro to na praktyki, to kolejne odpowiedzi będą tylko podpowiedziami.

(IMG:style_emoticons/default/biggrin.gif) mogłem się nie sprzedawać, a tak serio to takie podawanie kodu krok po kroku też dobrze uczy (IMG:style_emoticons/default/wink.gif) bo wcześniej próbowałem zrobić to na podstawie jakiegoś kodu z internetu ale tak się zagmatwałem że postanowiłem od zera na nowo...

co do kodu to robię tak jak podałeś i strona pewien czas się ładuje po czym wyskakuje błąd i nie widać nawet sondy.

chyba chodzi o to że generuję za dużą pojemność pliku Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 71 bytes) in
Błąd wyskakuje w linii gdzie jest tablica

Ten post edytował eremen 19.02.2012, 13:43:58
Go to the top of the page
+Quote Post
CuteOne
post
Post #9





Grupa: Zarejestrowani
Postów: 2 958
Pomógł: 574
Dołączył: 23.09.2008
Skąd: wiesz, że tu jestem?

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


Bo dwa razy inkrementujesz $i

  1. for($i=1;$i<=50;$i++) {
  2.  
  3. for($x=1;$x<=5;$x++) {
Go to the top of the page
+Quote Post
eremen
post
Post #10





Grupa: Zarejestrowani
Postów: 69
Pomógł: 0
Dołączył: 15.02.2012
Skąd: Głogów - Opole

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


witam (IMG:style_emoticons/default/smile.gif)
trochę przerobiłem kod bo chciałem żeby hasła się nie powtarzały najprostszą metodą
  1. for ($s=0; $s<50; $s++){
  2. srand((double)microtime()*1000000);
  3. $kod=md5(uniqid(rand()));
  4. $kody[] = $kod; // a tutaj zapisujemy go do tablicy
  5. }
  6. file_put_contents('./kody.txt', implode(PHP_EOL, $kody));

ale mam problem ponieważ chciałbym żeby hasła miały 5 znaków a mają więcej, nie wiem jak to zmienić...

hehe działa (IMG:style_emoticons/default/biggrin.gif)

zrobiłem tak:
  1. for ($s=0; $s<50; $s++){
  2. srand((double)microtime()*1000000);
  3. $kod=md5(uniqid(rand()));
  4. // obliczamy ilość znaków w tekscie
  5. $licz = strlen($kod);
  6. // sprawdzamy, czy ilość znaków w tekscie jest większa
  7. // lub równa liczbie znaków po jakiej tekst ma być obcięty
  8. if ($licz>=5)
  9. {
  10. // obcinamy tekst o określoną ilośc znaków
  11. $txt = substr($kod,0,5);
  12. }
  13. else
  14. {
  15. // jeżeli warunek nie jest spełniony pozostawiamy tekst bez zmian
  16. $txt = $kod;
  17. }
  18.  
  19. $kody[] = $txt; // tutaj zapisujemy okrojony kod do tablicy
  20.  
  21. }
  22. file_put_contents('./kody.txt', implode(PHP_EOL, $kody));


Ten post edytował eremen 19.02.2012, 20:25:53
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 22.08.2025 - 15:54