Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][GD]Problem z tokenem
Forum PHP.pl > Forum > Przedszkole
-gość-
witam
próbuje stworzyć token. Oto kod:

token.php (generuje obrazki):
  1. <?php
  2. $wys=100;
  3. $szer=120;
  4. $zaw=file('token.txt');
  5.  
  6. $obrazek=ImageCreate($szer,$wys);
  7. $kolor=array('czerwony' => ImageColorAllocate($obrazek, 255, 0, 0), 
  8.  'zielony' => ImageColorAllocate($obrazek, 0, 255, 0),
  9.  'niebieski' => ImageColorAllocate($obrazek, 0, 0, 255));
  10.  
  11. ImageFill($obrazek, 1, 1, $kolor[czerwony]);
  12.  
  13. ImageString($obrazek, 5, 50, 50, $zaw[rand(0,6)], $kolor[niebieski]);
  14.  
  15. header("Content-type: image/gif");
  16. imageGIF($obrazek);
  17. ?>


formularz: index.php
  1. <form action="sprawdz.php" method="post"><input type="text" name="token"><br>
  2. Przepisz tekst:<br>
  3. <?php
  4. $plik=file('token.txt');
  5. $id=rand(0,count($slowa)-1);
  6.  
  7. echo '<img src="token.php?"'. $id .'></img>';
  8. ?>
  9. <br>
  10. <input type="hidden" name="id" value="<?php echo $id; ?>" />
  11. <input type="submit" value="Zapisz"></form>


sprawdz.php (sprawdza, czy przepisany text=dany wiersz z pliku):
  1. <?php
  2. $id=$_POST['id'];
  3. $napisane=$_POST['token'];
  4.  
  5. $plik=fopen('token.txt', 'r');
  6. $zaw=file('token.txt');
  7.  
  8. if($zaw[$id]==$napisane)
  9. {
  10. echo 'dziala';
  11. }
  12. else
  13. {
  14. echo 'nie dziala';
  15. }
  16. ?>


token.txt (baza słów):
Cytat
user
yahoo
mozilla
www
php
forum
firefox

Kiedy przepisuję poprawny kod, za każdym razem pojawia się napis "nie działa".
z góry dzięki za pomoc
pozdrawiam
Hazel
No bo błędów tutaj natrzaskałeś chyba z 8 biggrin.gif

Po kolei.

Plik index.php. Skąd tam Ci się wzięła zmienna $slowa? Powinno być raczej $plik, bo tak nazwałes tablicę słów pobranych z pliku.

Po drugie - jeśli masz jedną zmienną formy typu GET, to możesz wprawdzie zadeklarować URL token.php?id, ale wygodniej jest token.php?id=jakiesid, nie ograniczasz się... No ale niech Ci będzie. Poza tym jest ok.



Plik token.php. Wszystko ok, ale spójrz... Znów generujesz liczbę i losujesz z tablicy słów inne słowo. Po co? Ma być właśnie to samo, które już wylosowałes w pliku index.php w linii tworzącej zmienną $id. Przeciez po to przekazujesz do token.php zmienną, by z niej właśnie skorzystać - a Ty w ogóle nie używasz $_GET, tylko losujesz znów inną liczbę. Jak to miałoby działać?



Plik sprawdz.php. Tu jest ok (prawie), poza tym, że powinieneś używać funkcji trim" title="Zobacz w manualu PHP" target="_manual do przycinania spacji przed i po ciągu, bo różnie wyglądają outputy zwaracane przez file - w tym przypadku akurat masz spacje z obu stron ciągu i nie będzie działać bez tego. Używaj funkcji typu var_dump" title="Zobacz w manualu PHP" target="_manual do rozwiązywania problemów - gdy coś nie działa, na przykład (tak jak w tym przypadku) porównujesz dwie zmienne i za każdym razem wychodzi Ci, że nie są równe, wystarczy przecież wyświetlić obydwie i zobaczyć, w czym tkwi problem... To logiczne rozwiązanie problemu - polecam, nie trzeba z każdą pierdołą na forum przychodzić.

Tak na szybko kod:

  1. <?php
  2. $wys=100;
  3. $szer=120;
  4. $zaw=file('token.txt');
  5.  
  6. $obrazek=ImageCreate($szer,$wys);
  7. $kolor=array('czerwony' => ImageColorAllocate($obrazek, 255, 0, 0), 
  8.  'zielony' => ImageColorAllocate($obrazek, 0, 255, 0),
  9.  'niebieski' => ImageColorAllocate($obrazek, 0, 0, 255));
  10.  
  11. ImageFill($obrazek, 1, 1, $kolor[czerwony]);
  12.  
  13. ImageString($obrazek, 5, 50, 50, $zaw[$_GET[0]], $kolor[niebieski]);
  14.  
  15. header("Content-type: image/gif");
  16. imageGIF($obrazek);
  17. ?>


  1. <?php
  2. $id=$_POST['id'];
  3. $napisane=$_POST['token'];
  4. $plik=fopen('token.txt', 'r');
  5. $zaw=file('token.txt');
  6. if(trim($zaw[$id])==$napisane)
  7. {
  8. echo 'dziala';
  9. }
  10. else
  11. {
  12. echo 'nie dziala';
  13. }
  14. ?>


  1. <form action="sprawdz.php" method="post"><input type="text" name="token"><br>
  2. Przepisz tekst:<br>
  3. <?php
  4. $plik=file('token.txt');
  5. $id=rand(0,count($plik)-1);
  6.  
  7. echo '<img src="token.php?'.$id.'"></img>';
  8. ?>
  9. <br>
  10. <input type="hidden" name="id" value="<?php echo $id; ?>" />
  11. <input type="submit" value="Zapisz"></form>




Pozdrawiam, Krzysztof.

P.S. Jeśli nie musisz (tak jak w tym przypadku), to nie otwieraj pliku 3 razy, to znacznie spowalania działanie aplikacji... Wystarczy tutaj raz otworzyć, pomyśl jak to rozwiązać, by działało szybciej (różnicy w czasie działania może nie zobaczysz, ale toporny kod jest bez sensu).
Gość
dzięki za pomoc!
zaczynam dopiero naukę php, korzystałem z tutoriala na webtips i próbowałem go trochę przerobić.
pozdrawiam
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.