Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]POST w przeglądarce
Forum PHP.pl > Forum > Przedszkole
robos85
Otóż w jaki sposób miogę zapobiec takiej styuacji

Po przesłaniu formularza wykonuję jakiś kod, np przywrócenie hasła.
Lecz gdy nacisnę F5 strona się odświeża i w przeglądarce dalej jest POST, co powoduje, że można od razu wykonać tego posta.
Robię to headerami ale nie skutkuje, uzywam smarty:
  1. <?php
  2. require_once('/includes/main_inc.php');
  3. require_once('/includes/functions.php');
  4. // css include
  5. $css_inc=array('login');
  6. $smarty->assign('css_inc', $css_inc);
  7. //
  8. // site meta data
  9. switch($_GET['action']){
  10.    case 'login'<span style="color: #007700"<span style="color: #007700":
  11.        $site_title='Logowanie';
  12.        $site_keywords=', zaloguj się, logowanie';
  13.        $site_description='Zaloguj się do portalu podróżniczym atotam.pl. Zyskaj więcej funkcji jako zalogowany użytkownik.';
  14.        break;
  15.    case 'recover'<span style="color: #007700"<span style="color: #007700":
  16.        $site_title='Odzyskaj zapomniane hasło';
  17.        $site_keywords=', odzyskaj hasło, zapomniane hasło, zapomniałeś hasła';
  18.        $site_description='Jeśli nie pamiętasz swojego hasła, możemy ci przysłać nowe. Wystarczy wpisać w odpowiednie pola adres pocztowy podany podczas Twojej rejestracji na portalu i datę swoich urodzin';
  19.        break;
  20. }
  21. $smarty->assign('site_title', $site_title);
  22. $smarty->assign('site_keywords', $site_keywords);
  23. $smarty->assign('site_description', $site_description);
  24. //
  25.  
  26. include('/header.php');
  27. include('/footer.php');
  28.  
  29. //logout
  30. if($_GET['action']=="logout"){
  31.    if(session_check()==1){
  32.        session_finish();
  33.    }
  34.    else{
  35.        header("Locatio: ".$BASEURL);
  36.        exit();
  37.    }
  38. }
  39. // recover
  40. elseif($_GET['action']=="recover"){
  41.    must_logout();
  42.    // recover post
  43.    if(isset($_POST['recover'])){
  44.        if(!(preg_match('/^[a-z0-9._-]+@[a-z0-9.-]+.[a-z]{2,6}$/i', sqlesc($_POST['email'])))){  // zły email
  45.              $error='Wpisz poprawny adres E-mail.';
  46.        }
  47.        else{ // email OK - sprawdzenie w bazie
  48.            $birth=sqlesc($_POST['b_year']).'-'.sqlesc($_POST['b_month']).'-'.sqlesc($_POST['b_day']);
  49.            $sql=$db->query("SELECT `id`,`email` FROM `users` WHERE `email`='".sqlesc($_POST['email'])."' AND `birth`='".$birth."'") or die($db->error);
  50.            if($sql->num_rows==1){
  51.                $host=$_SERVER['REMOTE_HOST'];
  52.                $ip=IP_check();
  53.                $pass=gen_rec_pass();
  54.                $hash_pass=hashpass($pass);
  55.                $arr=$sql->fetch_assoc();
  56.                $to=$arr['email'];
  57.                $title="Odzyskanie hasła na portalu atotam.pl";
  58.                $head = "MIME-Versio: 1.0\n";
  59.                $head .= "Content-ty: text/plain; charset=utf-8\n";
  60.                $head .= "Fro: Portal geograficzny atotam.pl <info@atotam.pl>\n";
  61.                $content='Witaj.
  62. Odpowiadamy na Twoją prośbę o odzyskanie hasła do konta na portalu Atotam.pl.
  63. Została ona wysłana z komputera o : '.$ip.' ('.$host.').
  64.  
  65. Twoje nowe hasło to: '.$pass.'
  66.  
  67. Po zalogowaniu się na swoje konto za jego pomocą możesz je zmienić według swojego uznania.
  68.  
  69. Pozdrawiamy,
  70. Administracja Atotam.pl';
  71.                if(mail($to,$title,$content,$head)){
  72.                    //$db->query("UPDATE `users` SET `pass`='".sqlesc($hash_pass)."' WHERE `id`='".sqlesc($arr['id'])."'") or die($db->error);
  73.                    $_SESSION['rec_info']=1;
  74.                }
  75.                else{
  76.                    $_SESSION['rec_info']=2;
  77.                }        
  78.                header("Locatio: /recover");
  79.                exit();
  80.            }
  81.            elseif($sql->numrows!=1){
  82.                $error='Wpisane dane są niepoprawne.';
  83.            }
  84.        }
  85.    $smarty->assign('error', $error);    
  86.    }
  87.    // recover post -END    
  88. }
  89. $smarty->display('login.tpl');
  90. unset($_SESSION['rec_info']);
  91. ?>
nospor
nie Locatio
a Location

pozatym temat juz byl wiele razy poruszany
http://forum.php.pl/index.php?showtopic=44...t=0&start=0
Marr
możesz tez ustawić sobie ciacho np na pół minuty po wykonaniu skryptu a wykonywać go tylko w przypadku gdy nie ma ustawionego tego ciastka
batman
Było, było i jeszcze razy było.
Zamykam.
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.