Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Generator Tokenów
Forum PHP.pl > Forum > Przedszkole
kacpereczek
Zrobiłem generator tokenów.
Niby wszystko działa: po wpisaniu do okienka poprawnego kodu wyświetla się komunikat: Wiadomość została wysłana..(bo to formularz kontaktowy), po wpisaniu błędnego kodu: Kod z obrazka został źle przepisany..., ale jak nic nie wpiszę pokazuje się komunikat: kod poprawny... Co trzeba zrobić aby po nie wpisaniu kodu był napis: Kod z obrazka został źle przepisany...?
Oto mój kod źródłowy:

obrazek.php
  1. <?php
  2. $slowo= $_SESSION['haslo'];
  3. $wysokosc=30;
  4. $szerokosc=88;
  5. $pic=ImageCreate($szerokosc,$wysokosc);
  6. $bialy=ImageColorAllocate($pic,255,255,255);
  7. $czarny=ImageColorAllocate($pic,0,0,0);
  8. $szary=ImageColorAllocate($pic,150,150,150);
  9. ImageFill($pic,1,1,$bialy);
  10. for($i=0;$i<200;$i++)
  11. {
  12. $los1=rand(0,$szerokosc);
  13. $los2=rand(0,$wysokosc);
  14. ImageLine($pic,$los1,$los2,$los1,$los2,$szary);
  15. }
  16. for($i=0;$i<strlen($slowo) ;$i++)
  17. {
  18. $rozmiar=rand(5,10);
  19. ImageString($pic,$rozmiar,$i*10+7,3,trim($slowo[$i]),$czarny);
  20. }
  21. Header("Content-type: image/gif");
  22. ImageGIF($pic);
  23. ?>


index.php
  1. <?
  2. function generujHaslo()
  3. {
  4. $dlugosc_hasla = 5;
  5. $zestaw_znakow = "abcdefghijklmnopqrstuvwxyz0123456789";
  6. srand((double)microtime() * 1000000);
  7. while(strlen($haslo) < $dlugosc_hasla)
  8. {
  9. $znak = $zestaw_znakow[rand(0, strlen($zestaw_znakow) - 1)];
  10. if(!is_integer(strpos($haslo, $znak))) $haslo .= $znak;
  11. }
  12. return $haslo;
  13. }
  14. $Haslo= generujHaslo();
  15. $_SESSION['haslo'] = $Haslo;
  16.  
  17. require_once "header.php";
  18. echo "<p align='center'><b>Kontakt</b></p>
  19. <p align='center'>Aby się z nami skontaktować wypełnij poniższy formularz kontaktowy:</p>
  20. <br>
  21. <form method='post' action='sent.php' onsubmit='if (sprawdz(this)) return true; return false'>
  22. <center><table width='95%' cellpadding='2' cellspacing='2'>
  23. <tr>
  24. <td align='right'>Podaj swój adres e-mail:</td>
  25. <td><input type='text' name='email' style='width: 300px; border-color: #000000; border-width: 1px'></td>
  26. </tr>
  27. <tr>
  28. <td align='right' valign='top'>Treść wiadomości:</td>
  29. <td><textarea name='tresc' style='font-size: 12px; width: 300px; height: 150px'></textarea></td>
  30. </tr>
  31. <tr>
  32. <td align='right' valign='top'>Przepisz kod z obrazka poniżej</td>
  33. <td><input type='text' name='token' maxlength='5' style='font-size: 12px; width: 300px'></td>
  34. </tr>
  35. <tr>
  36. <td colspan='2' align='center'><img src='obrazek.php' alt=''></td>
  37. </tr>
  38. <tr>
  39. <td align='center' colspan='2'><input type='reset' name='Reset' value='Usuń' style='width: 100px; height: 20px; border-color: #000000; border-width: 1px'>
  40. <input type='submit' name='Submit2' value='Wyślij' style='width: 100px; height: 20px; border-color: #000000; border-width: 1px'></td>
  41. </tr>
  42. </table></center>
  43. </form>\n";
  44. require_once "footer.php";
  45. ?>


sent.php
  1. <?php
  2. $kategoria=$HTTP_POST_VARS['kategoria'];
  3. $email=$HTTP_POST_VARS['email'];
  4. $tresc=$HTTP_POST_VARS['tresc'];
  5.  
  6. $adresdo = 'kacper.saw@gmail.com';
  7. $temat = 'Formularz kontaktowy ze strony .yoyo.pl/contact/';
  8. $zawartosc = 'Adres: '.$email."\n"
  9. ."Tresc wiadomosci: $tresc\n";
  10.  
  11. mail($adresdo, $temat, $zawartosc);
  12. ?>
  13.  
  14. <?
  15. if ($_POST['token'] == $_SESSION['haslo'])
  16. {
  17. require_once "header.php";
  18. echo "<p align='center'><b>Kontakt</b></p>
  19. <br>
  20. <p align='center'>Wiadomość została wysłana...</p>
  21. <br><br>\n";
  22. require_once "footer.php";
  23.  
  24. } else {
  25.  
  26. require_once "header.php";
  27. echo "<p align='center'><b>Kontakt</b></p>
  28. <br>
  29. <p align='center'>Kod z obrazka został źle przepisany...</p>
  30. <br><br>\n";
  31. require_once "footer.php";
  32. }
  33. ?>
barthpl
Nie wiem czy dobrze zinterpretowałem kod ale wg. mnie to ty wysyłasz formularz (sent.php, linijka 11) zanim zostanie sprawdzony token (sent.php, linijka 15). A co do tego sprawdzenia czy pole token zostało wypełnione wystarczy (tak łopatologicznie) chyba dodać (w sent.php, linijka 15) następujący warunek:
  1. <?php
  2. strlen(trim($_POST['token'])) > 0
  3. ?>

Ale nie jestem pewien bo nie testowałem.
kacpereczek
Rozumiem, że to tak miało wyglądać:

  1. <?
  2. if (strlen(trim($_POST['token'])) > 0 == $_SESSION['haslo'])
  3. {}
  4. ?>


ale nic się nie zmieniło - email zostaje wysłany...

Proszę o pomoc.
barthpl
No nie zupełnie, chodziło mi o warunek w postaci:
  1. <?php
  2. if (strlen(trim($_POST['token'])) > 0 && $_POST['token'] == $_SESSION['haslo'])
  3. ?>

No i jeszcze dodatkowo trzeba przeedytować plik sent.php
  1. <?php
  2. if (strlen(trim($_POST['token'])) > 0 && $_POST['token'] == $_SESSION['haslo']) {
  3. // wyślij maila dopiero jak zostanie sprawdzona poprawność tokena.
  4. $kategoria=$HTTP_POST_VARS['kategoria'];
  5. $email=$HTTP_POST_VARS['email'];
  6. $tresc=$HTTP_POST_VARS['tresc'];
  7.  
  8. $adresdo = 'kacper.saw@gmail.com';
  9. $temat = 'Formularz kontaktowy ze strony .yoyo.pl/contact/';
  10. $zawartosc = "Adres: $email\nTresc wiadomosci: $tresc\n";
  11.  
  12. if( mail($adresdo, $temat, $zawartosc) ) {
  13. require_once "header.php";
  14. echo "<p align='center'><b>Kontakt</b></p><br><p align='center'>Wiadomość została wysłana...</p><br><br>\n";
  15. require_once "footer.php";
  16. }
  17. else {
  18. // nie udało się wysłać wiadomości...
  19. }
  20. }
  21. else {
  22. require_once "header.php";
  23. echo "<p align='center'><b>Kontakt</b></p><br><p align='center'>Kod z obrazka został źle przepisany...</p><br><br>\n";
  24. require_once "footer.php";
  25. }
  26. ?>


Poza tym to jeszcze polecam zapoznanie się z zaleceniami W3C co do kodowania HTML( nie "<br>" tylko "<br/>", nie "<p align='center'>" a "<p style='text-align: center'>"). Niczego to co prawda w tym wypadku nie zmieni ale zawsze lepiej kodować poprawnie i ładnie niż bylejak.
kacpereczek
Dzięki - wszystko działa!
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.