Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Sesje, kod do przepisania
Salvation
post
Post #1





Grupa: Zarejestrowani
Postów: 406
Pomógł: 73
Dołączył: 15.07.2014

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


Witam.
Mam problem z nadpisywaniem się stworzonej sesji. W sesji znajduje się "safetycode", który trzeba poprawnie przepisać, żeby móc dodać komentarz... Wrzucam poniżej mój kod php i html. Może rozwiązanie jest banalne, a ja o czymś jeszcze nie wiem? :/

  1. <form id="comment" action="?page='. $page .'&do=add_comment" method="POST">
  2. <table width=100%>
  3. <tr>
  4. <td width=150px>Imię / Nick:</td>
  5. <td><input type="text" name="nick" autofocus placeholder="Wpisz swoje imię/nick"></td>
  6. </tr>
  7. <tr>
  8. <td>E-mail<sup>*</sup>:</td>
  9. <td><input type="email" name="mail" placeholder="Wpisz swój e-mail"></td>
  10. </tr>
  11. <tr>
  12. <td align="left" valign="top">Treść komentarza:</td>
  13. <td><textarea rows="10" name="text" placeholder="Wpisz swój komantarz">Super kalkulator! Polecam wszystkim!</textarea></td>
  14. </tr>
  15. <tr>
  16. <td>Kod: <span class="code" oncopy="return false">'. $_SESSION['code'] .'</span></td>
  17. <td><input type="text" name="code" placeholder="Przepisz kod"></td>
  18. </tr>
  19. <tr>
  20. <td></td>
  21. <td><input id="submit" type="submit" value="Wyślij"></td>
  22. </tr>
  23. </table>
  24. <sup>*</sup> nie będzie wyświetlony
  25. </form>

  1. $do = $_GET['do'];
  2. if(isset($do)){
  3. switch($do){
  4. case "add_comment":
  5. {
  6. $nick = trim($_POST['nick']);
  7. $mail = trim($_POST['mail']);
  8. $text = trim($_POST['text']);
  9. $code = trim($_POST['code']);
  10. if($code == $_SESSION['code']){
  11. $add = @mysql_query("INSERT INTO `komentarze` SET `nick`=$nick, `mail`=$mail, `text`=$text");
  12. if($add){
  13. //header("Location: ?page=$page"); //----- success
  14. echo "success";
  15. }else{
  16. //header("Location: ?page=$page"); //----- error add
  17. echo "error add";
  18. }
  19. }else{
  20. //header("Location: ?page=$page"); //----- error code
  21. echo "error code";
  22. }
  23. }
  24. break;
  25. default:
  26. header("Location: ?page=$page");
  27. break;
  28. }
  29. }

Mój problem pojawia się przy warunku sprawdzania czy wpisany kod jest taki sam jak na "obrazku". Niestety za każdym razem jest on nadpisywany... Próbowałem już przypisać zmienną sesyjną do zmiennej i zabić sesje albo wrzucenie kodu z sha1() do ciasteczka - niestety też nie działa.
Pozdrawiam i czekam z niecierpliwością na odpowiedź.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
trueblue
post
Post #2





Grupa: Zarejestrowani
Postów: 6 807
Pomógł: 1828
Dołączył: 11.03.2014

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


Umiejscowienie w sensie problemu, owszem, jest logiczne, natomiast nielogicznym jest umieszczanie go tam, bo w ten sposób nadpisujesz sesję, choć z Twojego opisu można wywnioskować, że nadpisywanie dokonuje się w momencie porównania.
Kod powinieneś ustawiać po warunku sprawdzania.

P.S. A jak generujesz kod do przepisania dla użytkownika?

Ten post edytował trueblue 15.07.2014, 18:20:14
Go to the top of the page
+Quote Post
Salvation
post
Post #3





Grupa: Zarejestrowani
Postów: 406
Pomógł: 73
Dołączył: 15.07.2014

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


Cytat(trueblue @ 15.07.2014, 18:19:27 ) *
(...) P.S. A jak generujesz kod do przepisania dla użytkownika?

index.php
  1. include 'scripts/gencode.php';
  2. $_SESSION['code'] = gen(6);

gencode.php
  1. <?php
  2. function gen($int){
  3. $tab = array('a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','w','v','x','y','z',1,2,3,4,5,6,7,8,9,0);
  4. $code = NULL;
  5. for($i = 0; $i < $int; $i++){
  6. $code .= $tab[rand(0,count($tab)-1)];
  7. }
  8. return $code;
  9. }
  10. ?>

Nie wiem czy zauważyłeś, ale rozwiązałem swój problem (IMG:style_emoticons/default/wink.gif)

Temat można zamknąć (IMG:style_emoticons/default/wink.gif)

Ten post edytował Salvation 15.07.2014, 20:52:45
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 16.10.2025 - 10:30