Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] problem z tokenem
Forum PHP.pl > Forum > Przedszkole
in5ane
Witam, mam problem z tokenem, otoz chodzi o to, ze caly czas pisze napis, nawet jak sie dopiero wejdzie na strone "Wprowadzono niepoprawny kod", i nawet jak sie wprowadzi to tez nadal pisze.

Skrypt generuje cyferki, ktore sa obrazkami w folderze "token"

Oto kod:
  1. <?php
  2. ?>
  3. <?php
  4.  
  5. $_SESSION['token'] = '';
  6.  
  7. for($i=0;$i<5;$i++) {
  8.  $liczba = rand(0,9);
  9.  $_SESSION['token'] .= $liczba;
  10.  $img .= '<img src="token/'.$liczba.'.gif" />';
  11. }
  12.  
  13. include("config.php");
  14. mysql_query('SET CHARSET LATIN2');
  15. $query = mysql_query ("SELECT * FROM article WHERE id=$_GET[id]");
  16. while ($row = mysql_fetch_array ($query)) {
  17. echo '<td><strong><span class="tekst">'.$row[1].'</span></strong><br>
  18. <span class="maly2">dodano '.$row[3].' <br>
  19. </span><span class="tekst2">'.$row[2].'</span><br><br>';
  20. }
  21.  
  22.  
  23. if ($co == 'dodaj' and $_SESSION['token'] == $_POST['token']) {;
  24. if($kto && $text && $_GET[id]) {
  25. $query = "INSERT INTO `comments` (`id`, `kto`, `text`, `id_art`, `data`) VALUES (NULL, '$kto', '$text', '$_GET[id]', now());";
  26. $wynik = mysql_query ($query);
  27. }
  28. else{
  29. echo'Sorry Wypelnij poprawnie formularz!<br>';
  30. }
  31. }
  32. else {echo "Wprowadzono <b>niepoprawny</b> kod!<br>";}
  33.  
  34. $querys = mysql_query ("SELECT * FROM comments WHERE id_art=$_GET[id]");
  35. echo '<span class="tekst">Komentarze:</span><br>';
  36. while ($rows = mysql_fetch_array ($querys)) {
  37. echo '<span class="maly2">'.$rows[1].',<i> '.$rows[4].'</i>:</span><span class="tekst2"> '.$rows[2].'</span><hr>';
  38. }
  39.  
  40. echo '<br><br><form method="post"><span class="tekst">Skomentuj:</span><input type="hidden" name="co" value="dodaj"><table><tr><td><span class="tekst2">Login:</span></td><td><input type="text" name="kto" style="font-family: Verdana; font-size: 10px"></td><tr><td><span class="tekst2">Treść:</span></td><td><textarea name="text" cols="50" rows="5" style="font-family: Verdana; font-size: 10px"></textarea></td></tr>
  41. <tr><td>'.$img.'</td><td><input type="text" name="token" style="font-family: Verdana; font-size: 10px"></td></tr>
  42. </table><input type="submit" value="Dodaj" style="font-family: Verdana; font-size: 10px"></form>';
  43.  
  44. ?>
kwiateusz
skąd bierzesz $co, $kto i $text?
in5ane
z formularza smile.gif

ale tutaj sa chyba warunki zwalone, a ja nie za bardzo sie na tym znam.
kwiateusz
z formularza... boże... dalej przecież masz tablice $_POST i $_GET to po co stosujesz konwencje jakby register_globals było na on?
misiek172
może ma włączone tongue.gif Jeszcze można zastosować uniwersalną: $_REQUEST
kwiateusz
jak wiesz skąd ma pochodzić informacja to z niej pobieraj $_REQUEST jest dość niebezpieczne :] nawet jak ma włączone to jeśli skrypt ma być przenośny to musi być przygotowany na ta ewentualność... a właśnie nie stosowanie tablic superglobalnych możliwe ze powoduje błędne działanie skryptu
in5ane
cos nie bardzo nadal kapuje co tam jest zle ;/
crash
Sprawdziłeś co wyświetla:
  1. <?php
  2. var_dump( $_SESSION[ 'token' ] );
  3. var_dump( $_POST[ 'token' ] );
  4. ?>
in5ane
wyswietla
string(5) "NUMEREK_WYLOSOWANY_TOKENIE" NULL


ale tutaj jest cos zle z warunkiem, bo zawsze wyswietla mi sie "Wprowadzono niepoprawny kod!", nawet jak dopiero wejde na strone.
kwiateusz
conajmniej to jest źle
  1. <?php
  2. if ($co == 'dodaj' and $_SESSION['token'] == $_POST['token']) {;
  3. if($kto && $text && $_GET[id])
  4. ?>
poczytaj o $_POST a powienieneś zajarzyć jak należy to zmienić
uli
Cytat(in5ane @ 20.03.2007, 19:30:19 ) *
if ($co == 'dodaj' and $_SESSION['token'] == $_POST['token']) {;
if($kto && $text && $_GET[id]) {


średnik (winksmiley.jpg po { questionmark.gif smile.gif
in5ane
nic nadal nie dalo.

nadal caly czas nawet jak sie dopiero wejdzie na strone pisze "Wprowadzono niepoprawny kod!" i nie dodaje jak proboje dodac.
uli
A mógłbyś wklepać między tymi if'ami

echo $kto;
echo $text;
echo $_GET['id'];

i pokazać co Tobie wyskoczy??
in5ane
Lekko poprawilem ten kod, dokladnie to warunki:

  1. <?php
  2.  
  3. $_SESSION['token'] = '';
  4.  
  5. for($i=0;$i<5;$i++) {
  6.  $liczba = rand(0,9);
  7.  $_SESSION['token'] .= $liczba;
  8.  $img .= '<img src="token/'.$liczba.'.gif" />';
  9. }
  10.  
  11. include("config.php");
  12. mysql_query('SET CHARSET LATIN2');
  13. $query = mysql_query ("SELECT * FROM article WHERE id=$_GET[id]");
  14. while ($row = mysql_fetch_array ($query)) {
  15. echo '<td><strong><span class="tekst">'.$row[1].'</span></strong><br>
  16. <span class="maly2">dodano '.$row[3].' <br>
  17. </span><span class="tekst2">'.$row[2].'</span><br><br>';
  18. }
  19.  
  20.  
  21. if($co == 'dodaj') {
  22. echo $kto;
  23. echo $text;
  24. echo $_GET['id'];
  25. echo $_POST['token'];
  26. if($_SESSION['token'] == $_POST['token']) {
  27. if($kto && $text && $_GET[id]) {
  28. $query = "INSERT INTO `comments` (`id`, `kto`, `text`, `id_art`, `data`) VALUES (NULL, '$kto', '$text', '$_GET[id]', now());";
  29. $wynik = mysql_query ($query);
  30. }
  31. else{
  32. echo'Sorry Wypelnij poprawnie formularz!<br>';
  33. }
  34. }
  35. else {echo "Wprowadzono <b>niepoprawny</b> kod!<br>";}
  36. }
  37.  
  38. $querys = mysql_query ("SELECT * FROM comments WHERE id_art=$_GET[id]");
  39. echo '<span class="tekst">Komentarze:</span><br>';
  40. while ($rows = mysql_fetch_array ($querys)) {
  41. echo '<span class="maly2">'.$rows[1].',<i> '.$rows[4].'</i>:</span><span class="tekst2"> '.$rows[2].'</span><hr>';
  42. }
  43.  
  44. echo '<br><br><form method="post"><span class="tekst">Skomentuj:</span><input type="hidden" name="co" value="dodaj"><table><tr><td><span class="tekst2">Login:</span></td><td><input type="text" name="kto" style="font-family: Verdana; font-size: 10px"></td><tr><td><span class="tekst2">Treść:</span></td><td><textarea name="text" cols="50" rows="5" style="font-family: Verdana; font-size: 10px"></textarea></td></tr>
  45. <tr><td>'.$img.'</td><td><input type="text" name="token" style="font-family: Verdana; font-size: 10px"></td></tr>
  46. </table><input type="submit" value="Dodaj" style="font-family: Verdana; font-size: 10px"></form>';
  47.  
  48. ?>


a po wpisaniu
echo $kto;
echo $text;
echo $_GET['id'];
echo $_POST['token'];
tego wszystkie dane sa dobrze wyswietlane, wiec cos jest z warunkami.

za kazdym razem teraz pisze po wpisaniu ze zly kod, nie ma juz tego ze jak sie wejdzie na strone to od razu pisze ze zly kod. jak proboje dodac to wpisuje wszystko ale po klinieciu dodaj wywala ze zly kod.
uli
Hihihihihi

Oczywiście, że źle

w warunku daj w $_GET między [] apostrofy!! - Nie zauważyłem tego wcześniej biggrin.gif

  1. <?php
  2. $_GET['id'];
  3. ?>
in5ane
nie dalo rady.
uli
No dobrze, w takim razie niespełniony jest warunek:

  1. <?php
  2. if($_SESSION['token'] == $_POST['token']) {
  3. ?>


Dopisz do tych echo jeszcze

echo $_SESSION['token'];

Zobaczymy czy wychodzi taki sam jak $_POST['token'];

Z drugiej strony to ja przepraszam:
Jakie masz prawdopodobieństwo, że liczba 5-ciocyfrowa wpisana przez Ciebie będzie taka sama jak losowana?? ohmy.gif
kwiateusz
skoro dane sa z formularza to jak już powinno być tak:
  1. <?php
  2. if($_POST['kto'] && $_POST['text'] && $_GET['id'])
  3. ?>
o ile one postem sa słane
in5ane
a wiec tak,
echo $_POST['token']; - wyswietwla dopiero wpisany
echo $_SESSION['token']; - wyswietla po wpisaniu kolejny a powinno byc rowne temu wyzej
uli
Wszystko pięknie ale nie sądzisz że zerujesz $_SESSION['token'] questionmark.gif
A nie powinieneś??

Nigdy nie będziesz mieć równości w 1-szym if.

Czyli

  1. <?php
  2. if($co != 'dodaj') {
  3. $_SESSION['token'] = '';
  4.  
  5. for($i=0;$i<5;$i++) {
  6.  $liczba = rand(0,9);
  7.  $_SESSION['token'] .= $liczba;
  8.  $img .= '<img src="token/'.$liczba.'.gif" />';
  9. }
  10. }
  11. ?>
loff
Nie wiem czy dobrze mi sie wydaje ale za każdym razem kasujesz zawartosc $_SESSION['token'] i losujesz nowa czyli stara wpisana przez uzytkownika jest juz nieaktualna - dlatego warunek nigdy nie bedzie spełniony
in5ane
hmmm..... to ja juz nie wiem, moze wy macie pomysl jak poprawic ten kod?
uli
Cytat(in5ane @ 21.03.2007, 13:58:45 ) *
hmmm..... to ja juz nie wiem, moze wy macie pomysl jak poprawic ten kod?


Czytaj mój poprzedni post. Powinno być ok.
in5ane
@uli no wszystko pieknie, ale jak sie kliknie i doda, albo tez nie doda gdy wpiszemy zle to token sie juz nie generuje, jest puste miejsce, nie ma znow obrazka.
uli
Cytat(in5ane @ 21.03.2007, 14:03:33 ) *
@uli no wszystko pieknie, ale jak sie kliknie i doda, albo tez nie doda gdy wpiszemy zle to token sie juz nie generuje, jest puste miejsce, nie ma znow obrazka.



No i good:)

Teraz dopisz po:

  1. <?php
  2. if($co == 'dodaj') {
  3. ?>


linijkę:

  1. <?php
  2. $co = '';
  3. ?>


I będzie śmigać:)
in5ane
nic to nie dalo.
loff
  1. <?php
  2. $_SESSION['token'] = '';
  3.  
  4. for($i=0;$i<5;$i++) {
  5.  $liczba = rand(0,9);
  6.  $_SESSION['token'] .= $liczba;
  7.  $img .= '<img src="token/'.$liczba.'.gif" />';
  8. }
  9. ?>


A jak przestawisz ten kod bezposrednio przed wyswietlenie formularza a po sprawdzaniu i dodawaniu komentarza?
in5ane
dziaaala...

wszystkim wielkie wielkie dzieki smile.gif

pozdrawiam.

temat mozna zamknac.
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.