Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] Skrypt tokena
Forum PHP.pl > Forum > Przedszkole
terreska
Mam taki skrypcik (token tekstowy).
Niestety chyba nie przekazuje mi wartości $wynik, bo cały czas wywala komunikat: "Podales zly wynik. Twoja wiadomosc nie moze zostac wyslana."
Co robię źle? Próbowałam na różne sposoby i nic.

  1. case "sprawdz":
  2.  
  3. $a=rand(1, 10);
  4. $b=rand(1, 10);
  5. $wynik=($a+$b);
  6.  
  7. echo '<center>Podaj wynik: '.$a.'+'.$b.'=';
  8. ?>
  9. <form method="post" action="index.php?action=sprawdz2">
  10. <table>
  11. <tr><td>Wynik:</td><td><input name="licz" type="text" size="40"></td></tr>
  12. <tr><td>&nbsp;</td><td><input type="submit" name="sub" value="Ok"> </td></tr>
  13. <input name="wynik" type="hidden" value="$wynik">
  14. </table>
  15. </form>
  16. <?php
  17. break;
  18.  
  19. case "sprawdz2":
  20. echo " test: ".$wynik; [b]// tutaj wyswietla mi tylko napis $wynik[/b]
  21. if ('$wynik'=='$licz')
  22. {
  23. mail($webmasteremail,$type,
  24. "
  25. E-Mail: $email
  26. Temat: $type
  27. Twoje pytanie: 
  28. $info
  29. $message $czas $data
  30. ", "From: $email");
  31. $content=("Twoja wiadomosc zostala wyslana.");
  32. }
  33. else
  34. {
  35. $content=("Podales zly wynik. Twoja wiadomosc nie moze zostac wyslana.");
  36.  
  37. }
  38.  
  39. break;
cadavre
Może by tak używać globalnych? $_POST['wynik'] a nie $wynik. Tak tylko w register_globals, które jest masakrycznie niebezpieczne...

Poza tym:
1. '$wynik' - takie zmienne nie będą widoczne. Po co w ogóle apostrofy? Jeśli już to " zamiast '.
2. Po co $cos=("asasa"); i nawiasy? $cos = "asasa"; i tyle.
ikioloak
gdzie ty sie uczylas tak pisac? Do zmiennych z przeslanych przez formularz odwolujesz sie przez tablice $_POST i $_GET. Nie:
  1. <?php
  2. if ('$wynik'=='$licz')
  3. ?>

a
  1. <?php
  2. if ($_POST['wynik']==$licz)
  3. ?>

Czyli raz ze $_POST to dwa, bez apostrofow. Zrezygnuj tez z takiej konstrukcji (dziwnej):
  1. <?php
  2. $content=("Podales zly wynik. Twoja wiadomosc nie moze zostac wyslana.");
  3. ?>

na rzecz normalnej:)
  1. <?php
  2. $content = "Podales zly wynik. Twoja wiadomosc nie moze zostac wyslana.";
  3. ?>

Duzo nauki przed toba winksmiley.jpg
terreska
Bardzo Wam dziękuję za rady.
No niestety nie mam mnie kto dobrze nauczyć php winksmiley.jpg i ciężko mi nawet po Waszych radach coś poprawić.
Czy możecie wkleić cały poprawiony kod, a wtedy porównam sobie i zrozumiem guitar.gif

Zrobiłam tak jak napisaliście i nadal nie przekazuje wartości $wynik
ikioloak
Wklej caly kod. Masz namotane raczej cos jeszcze wczensiej. Myslalem ze wynik jest przekazywany przez formularz, teraz widze ze jest wynikiem jakichs obliczen.
E -dd
Jaki sens ma tworzenie takiego tokena, jak bot odczyta sobie zawartość pola hidden i już. Jeśli już tworzysz tokena (chodź odradzam) to używaj do kodu tokena sesji.

Polecam przeczytanie tego:
www.webaudit.pl/blog/2006/captcha-nie-uzywaj/

ps. Zamykasz tagi php, więc kod formularza nie czyta zmiennej bo to tylko html.
terreska
Tak, jest to wynik obliczeń i właśnie wyniku tych obliczeń nie potrafię przekazać dalej...

Wiem, że każdy chce dobrze, ale bardzo proszę niech ktoś poprawi mój kod, który umieściłam na samej górze. Będę wdzięczna.
Norbas
  1. <?php
  2. function getPOST($n) {
  3. return (isset($_POST[$n])) ? $_POST[$n] : '';
  4. }
  5.  
  6. $wynik = intval(getPOST('wynik'));
  7. $a = intval(getPOST('a'));
  8. $b = intval(getPOST('b'));
  9. $komunikat = '';
  10. if ($wynik) {
  11. if ($wynik==$a+$b) {
  12. // wysłanie listu
  13. $komunikat = 'ok';
  14. }
  15. else
  16. $komunikat = 'nieprawidłowy wynik';
  17. }
  18. if ($komunikat)
  19. echo $komunikat;
  20. if ($komunikat != 'ok') {
  21. $a=rand(1, 10);
  22. $b=rand(1, 10);
  23. ?>
  24. <form method="post" action="index.php">
  25. <input name="a" type="hidden" value="<?php echo $a; ?>">
  26. <input name="b" type="hidden" value="<?php echo $b; ?>">
  27. <table>
  28. <tr><td><?php echo $a . '+' . $b; ?>=</td><td><input name="wynik" type="text"></td></tr>
  29. <tr><td> </td><td><input type="submit" value="Ok"> </td></tr>
  30. </table>
  31. </form>
  32. <?php
  33. }
  34. ?>
E -dd
Kod
<input name="wynik" type="hidden" value="$wynik">

zamień na
Kod
<input name="wynik" type="hidden" value="<?php echo $wynik; ?>">

a
Kod
if ('$wynik'=='$licz')

na
Kod
if ($wynik == $licz )


Myślę że będzie ok. Tylko zamiast $wynik i $licz powinnieneś dawać $_POST['wynik'] i $_POST['licz'] smile.gif

ps. Sorka za tamtą wypowiedź o sesjach, nie zauważyłem że kod do podania to wynik obliczeń smile.gif
terreska
Bardzo Wam dziękuję za pomoc.
biggrin.gif
Nie wiem tylko o co dokładnie chodzi z tym bezpieczeństwem register globals... Czytałam bardzo dużo o tym, ale jest to dla mnie zbyt trudne... jak na razie.

Czy może ktoś podać podstawy bezpieczeństwa, jak pisać żeby nie było konieczne register globals i jak "się zabezpieczać" cool.gif ?
cadavre
Aby nie używać rg zapisujesz zmienne jako globale skąd zmienna pochodzi. Jeśli masz zmienną $zmienna i:
Pochodzi z formularz POST: $_POST['zmienna']
Pochodzi z formularza GET lub z adresu w pasku: $_GET['zmienna']
Pochodzi z sesji: $_SESSION['zmienna']
Pochodzi z ciasteczka $_COOKIE['zmienna']

O $_REQUEST się nie ucz. tongue.gif
E -dd
Można to wytłumaczyć tak, masz formularz i dane przesyłasz metodą post i wysyłasz do skryptu skrypt.php. Jeśli w skrypcie dasz
Kod
echo $nazwa_pola;

to ktoś będzie mógł wpisać w przeglądarce skrypt.php?nazwa_pola=jakis_kod_brzydki i wtedy wyświetli Ci się to na stronie. Ale jeśli dasz
Kod
echo $_POST['nazwa_pola'];

wtedy dane wyświtlone zostaną z formularza wysłanego przez post.

Rozumiesz ? smile.gif
terreska
Trochę rozumiem, a jak np. musiałby wyglądać taki "brzydki kod"?
Co za pomocą tego kodu można uzyskać? Tzn. można pobrać jakieś dane ze strony czy zniszczyć stronę?
E -dd
Głównie do tego używa się JS. Ale można w php np. pobrać alb o zmienić informacje w bazie, wczytać inną stronę itp. poczytaj o SQL injection (ps. nie jestem pewien na 100% czy to się tak pisze biggrin.gif)
goped
Poczytaj jak kolega mowil o SQL injection oraz o HTML injection. Chcialem zauwazyc ze formularz przy poscie tez mozna oszukac i podeslac "brzydki kod", wiec i tak trzeba uwazac co sie robi ze zmiennymi tongue.gif
To jest inny przyklad dziury z wlaczonym rg:
  1. <?php
  2. if (strlen($_GET[a])>5) $auth=md5($_GET[a]);
  3. if ($auth=='213271839712391273871273912731') $admin=1;
  4. ?>

a.php?auth=213271839712391273871273912731

smile.gif
terreska
Troche o tym poczytałam i coś tam kombinuje.
Mam teraz inny problem.
Jaką funkcję zastosować, aby sprawdzić czy użytkownik wypełnił wszystkie pola formularza kontaktowego i w przypadku jeśli nie, wyświetlałby się stosowny komunikat a mail nie został wysłany?
spryciula
użyj JAVASCRIPT(ale użytkownik zawsze może wyłączyć obsługę JAVASCRIPT, i już nie działa), i zweryfikuj czy wypełnił pole

  1. <?php
  2. <script TYPE="text/javascript" LANGUAGE="JavaScript">
  3. <!-- begin
  4. function clean_form()
  5. {
  6. if (document.form.nazwa_pola.value = ""){
  7.  alert("Pole 'Kod Dostawcy' nie może zostać puste!!!");
  8. return false;
  9.  }
  10.  
  11. }
  12. //-->
  13. </SCRIPT>
  14. ?>



i jeszcze dodaj w definicji formularza, onsubmit, funkcja zwraca ci true(wszystko ok, wyślij) or false(nie wysyła)

  1. <?php
  2. <form name ="form" method="post" action="dodaj_dostawce_skrypt.php" onsubmit="if (sprawdz(this)) return true; return false;">
  3. ?>
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.