Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP][GD]Problem z tokenem
--gość--
post
Post #1





Goście







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
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 2)
Hazel
post
Post #2





Grupa: Zarejestrowani
Postów: 492
Pomógł: 33
Dołączył: 16.08.2007
Skąd: Wrocław

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


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).

Ten post edytował Hazel 17.07.2008, 11:45:48


--------------------
Go to the top of the page
+Quote Post
-Gość-
post
Post #3





Goście







dzięki za pomoc!
zaczynam dopiero naukę php, korzystałem z tutoriala na webtips i próbowałem go trochę przerobić.
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 Aktualny czas: 19.08.2025 - 21:55