Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: zastąpienie elementu tablicy/pliku innym
Forum PHP.pl > Forum > PHP
eremen
1. w pliku mam 10 haseł - zapisanych jako tablica
2. głosuję w sondzie do czego potrzebuję hasło z owego pliku
3. to hasło użyte do głosowania to hasło które chciałbym aby zostało zastąpione innym aby w pkt. 1 nadal było 10 haseł (ale żeby to użyte było zastąpione)

poniżej kod jak wymyśliłem żeby to zrobić ale potrzebuję Waszej pomocy


  1. od:
  2. <?php
  3. //SPRAWDZANIE CZY PLIK ISTNIEJE
  4. $plik = "kody.txt";
  5.  
  6. if (!file_exists($plik)) {
  7.  
  8. for ($s = 0; $s < 11; $s++){
  9. srand((double)microtime()*1000000);
  10. $kod=md5(uniqid(rand()));
  11.  
  12. $txt = substr($kod,0,5); //okrajamy kod do 5 znaków
  13.  
  14. $kody[] = $txt; // tutaj zapisujemy okrojony kod do tablicy
  15. }
  16.  
  17. file_put_contents("kody.txt", serialize($kody));
  18. }
  19. else{
  20. $kody = unserialize(file_get_contents('kody.txt'));
  21. }
  22. //---------------------------------------------------------------------
  23.  
  24.  
  25. if (isset($_POST['haslo']) && $_POST['glosuj']) {
  26.  
  27. if (in_array($_POST['haslo'], $kody)){
  28.  
  29. //ZAPISYWANIE WYNIKOW DO PLIKOW
  30. $filename=$_POST['auto'].'.txt';
  31. $votes = 1;
  32.  
  33. if(file_exists($filename)){
  34. $votes = file_get_contents($filename);
  35. $votes++;
  36. }
  37.  
  38. file_put_contents($filename, $votes);
  39.  
  40. $message = "dziękujemy za oddanie głosu";
  41.  
  42.  
  43.  
  44.  
  45. //USUWANIE WPISANEGO HASŁA Z PLIKU I ZASTAPIENIE GO INNYM
  46.  
  47. // ---------------------------------------tworzy zmienna z uzytym hasłem-------------------------------------------- //
  48. $uzytehaslo = array($_POST['haslo']);
  49.  
  50.  
  51. //-----------------------------------------losuje hasło którym zastąpię stare-------------------------//
  52. srand((double)microtime()*1000000);
  53. $kod=md5(uniqid(rand()));
  54. $nowe = substr($kod,0,5);
  55. $nowehaslo = array($nowe);
  56.  
  57. //------------------------------------------zastąpienie hasła--------------------------------------//
  58. $nowatablica = array_replace($kody, $uzytehaslo, $nowehaslo);
  59.  
  60. //------------------------------------------zapisanie tablicy do pliku-----------------------------//
  61. file_put_contents("kody.txt", serialize($nowatablica));
  62.  
  63. //------------------------------------------------koniec--------------------------------------------//
  64.  
  65.  
  66.  
  67. }
  68. else {
  69. $message = "wpisałeś niepoprawne hasło";
  70. }
  71. }
vonski
  1. $uzytehaslo = array($_POST['haslo']);
  2. $nowehaslo = array($nowe);
  3. $nowatablica = array_replace($kody, $uzytehaslo, $nowehaslo);


array_replace nie tak się używa. Ten kod zrobi tyle, że z tablicy kody zostanie usunięty element o indeksie 0 i zastąpiony wartością $nowehaslo

Może użyj array_keys? Pobierasz klucz do którego przypisane jest $uzytehaslo i usuwasz ten element a potem dodajesz $nowehaslo do tablicy. Coś w ten deseń:

edit:

teraz sie zorientowałem że array_keys zwraca przecież tablicę kluczy, nie pojedynczy klucz.. to moze tak:

  1. $keys = array_keys($kody, $uzytehaslo);
  2. unset($kody[$keys[0]]);
  3. $kody[] = $nowehaslo;


edit 2:

alternatywą, w sumie chyba nawet lepszą jest użycie array_search bo ona zwraca po prostu klucz przypisany do szukanej wartości
eremen
hej, jeszcze nie używałem tego kodu ale mam pytanie, czy to będzie działać, bo w pliku nie zawsze musi być pierwszy element(hasło) czyli tablica[0]
vonski
Ale generalnie $kody są zawsze tablicą:

  1. $kody = unserialize(file_get_contents('kody.txt'));


Z tego tak wnioskuję, ale może czegoś nie widzę, bo już późno trochę wink.gif

Chodzi o to, żeby po użyciu danego hasła znaleźć je w tablicy kody, usunąć i zapisać do tej tablicy nowe?
Jeśli tak to taki kod powinien działać:

  1. $stareHaslo; // hasło którego szukamy w tablicy $kody
  2. $noweHaslo; // haslo wygenerowane które chcemy zapisać
  3. $kody; // tablica haseł pobrana z pliku z hasłami
  4.  
  5. $kody[array_search($stareHaslo, $kody)] = $noweHaslo;
  6.  
eremen
zrobiłem tak i w pliku pojawiło się 12 haseł zamiast 10, w tym nie zamieniło użytego hasła
  1. if (isset($_POST['haslo']) && $_POST['glosuj']) {
  2.  
  3. if (in_array($_POST['haslo'], $kody)){
  4.  
  5. //ZAPISYWANIE WYNIKOW DO PLIKOW
  6. $filename=$_POST['auto'].'.txt';
  7. $votes = 1;
  8.  
  9. if(file_exists($filename)){
  10. $votes = file_get_contents($filename);
  11. $votes++;
  12. }
  13.  
  14. file_put_contents($filename, $votes);
  15.  
  16. $message = "dziękujemy za oddanie głosu";
  17.  
  18. //USUWANIE WPISANEGO HASŁA Z PLIKU I ZASTAPIENIE GO INNYM
  19.  
  20. $uzytehaslo = array($_POST['haslo']);
  21.  
  22. srand((double)microtime()*1000000);
  23. $kod2=md5(uniqid(rand()));
  24. $nowehaslo = substr($kod2,0,5);
  25.  
  26. $keys = array_keys($kody, $uzytehaslo);
  27. unset($kody[$keys[0]]);
  28. $kody[] = $nowehaslo;
  29.  
  30. file_put_contents("kody.txt", serialize($kody));
  31. }
  32. else {
  33. $message = "wpisałeś niepoprawne hasło";
  34. }
  35. }


Cytat(vonski @ 25.02.2012, 00:34:02 ) *
Chodzi o to, żeby po użyciu danego hasła znaleźć je w tablicy kody, usunąć i zapisać do tej tablicy nowe?

tak, dokładnie o to chodzi smile.gif a potem tę tablicę zapisać do pliku kody.txt
vonski
Fakt, sorki, zapomniałem że $uzytehaslo to u ciebie tablica smile.gif
Zrób tak:

  1. $kody[array_search($_POST['haslo'], $kody)] = $nowehaslo;
eremen
coś takiego??

  1. //USUWANIE WPISANEGO HASŁA Z PLIKU I ZASTAPIENIE GO INNYM
  2.  
  3. srand((double)microtime()*1000000);
  4. $kod2=md5(uniqid(rand()));
  5. $nowehaslo = substr($kod2,0,5);
  6.  
  7. $kody; // tablica haseł pobrana z pliku z hasłami
  8.  
  9. $kody[array_search($_POST['haslo'], $kody)] = $noweHaslo;
  10.  
  11. file_put_contents("kody.txt", serialize($kody));
vonski
Cytat(eremen @ 25.02.2012, 00:41:58 ) *
coś takiego??

  1. //USUWANIE WPISANEGO HASŁA Z PLIKU I ZASTAPIENIE GO INNYM
  2.  
  3. srand((double)microtime()*1000000);
  4. $kod2=md5(uniqid(rand()));
  5. $nowehaslo = substr($kod2,0,5);
  6.  
  7. $kody; // tablica haseł pobrana z pliku z hasłami
  8.  
  9. $kody[array_search($_POST['haslo'], $kody)] = $noweHaslo;
  10.  
  11. file_put_contents("kody.txt", serialize($kody));


Prawie tak, tylko uważaj na nazwy zmiennych, bo na górze przypisujesz do $nowehaslo a później $noweHaslo (...hasło raz z duzej raz z małej litery). Musisz się zdecydować wink.gif
eremen
ok, zauważyłem to i poprawiłem u siebie, ale w pliku kody.txt pokazują się teraz krzaczki... a gdy zmienne miały inne nazwy (h - H) to w pliku z kodami po użyciu kodu zostawał on usuwany ale w jego miejsce nic się nie pojawiało ;]

i nie za bardzo wiem po co jest $kody w tym kodzie jak nic się z nią nie dzieje ani nic nie jest do niej przypisywane?

EDIT:

hej, to był tylko chwilowy problem exclamation.gif Dzięki smile.gif mój 3 tygodniowy maraton z tą sondą został zakończony smile.gif) pytanie tylko ile z tego się nauczyłem hehe
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.