Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Zabezpieczanie formularza
Forum PHP.pl > Forum > PHP
krzysneo
Witam,
Mam prosty formularz internetowy i bym chciał go zabezpieczyć przed ponownym wysłaniu po odświeżeniu strony. I bym chciał jeszcze dać, że trzeba wypełnić wszystkie dane przed wysłaniem. Prosiłbym o pomoc lub ewentualne linki
nospor
bylo wiele razy
http://forum.php.pl/index.php?showtopic=44...t=0&start=0
Spawnm
sprawdzasz czy pusty:
  1. <?php
  2. if( !empty($_POST['nazwa']) ){
  3.  //pełny
  4. }else{
  5. //pusty
  6. }
  7. ?>


a aby nie wysyłało ponownie dajesz:
  1. <?php
  2. header('location: '.$_SERVER['PHP_SELF']);
  3. ?>
krzysneo
ja mam formularz internetowy, co wysyła wiadomość na e-mail z przeglądarki, kod tego formularza to:



<?php
if (count($_POST))
{
////////// USTAWIENIA //////////
$email = 'mail'; // Adres e-mail adresata
$subject = 'test'; // Temat listu
$message = 'Wysłano'; // Komunikat
$error = 'Wystąpił błąd podczas wysyłania formularza'; // Komunikat błędu
$charset = 'iso-8859-2'; // Strona kodowa
//////////////////////////////

$head =
"MIME-Version: 1.0\r\n" .
"Content-Type: text/plain; charset=$charset\r\n" .
"Content-Transfer-Encoding: 8bit";
$body = '';
foreach ($_POST as $name => $value)
{
if (is_array($value))
{
for ($i = 0; $i < count($value); $i++)
{
$body .= "$name=" . (get_magic_quotes_gpc() ? stripslashes($value[$i]) : $value[$i]) . "\r\n";
}
}
else $body .= "$name=" . (get_magic_quotes_gpc() ? stripslashes($value) : $value) . "\r\n";
}
echo mail($email, "=?$charset?B?" . base64_encode($subject) . "?=", $body, $head) ? $message : $error;
}
else
{
?>
<form action="?" method="post">

Treść formularza


<input type="submit" value="Odbieram" /> <input type="reset" value="Resetuj" />

</form>
<?php
}
?>


I to chce zabezpieczyć, że jeżeli już ktoś wyśle i dostanie komunikat "Wysłano" i kliknie odswiez, zeby ta wiadomość nie była do mnie ponownie wysłana
erix
Cytat
"Wysłano" i kliknie odswiez, zeby ta wiadomość nie była do mnie ponownie wysłana

Do formularza, jako parametr dorzuć token, czy coś w tym stylu. Przy wysyłaniu sprawdzaj, czy istnieje w sesji, jeśli jest - nie wysyłaj, jeśli nie ma - dodaj do sesji:

  1. <?php
  2. if(!empty($_SESSION['tokens'][$token])){
  3.   echo 'już wysłałeś';
  4. }else{
  5.   wyslij();
  6.   $_SESSION['tokens'][$token] = true;
  7. }
  8. ?>
krzysneo
ok, token dodam, ale to i tak nic nie pomoże, ponieważ jeżeli go poprawnie wpisze i później będzie klikał odśwież to i tak wyśle ponownie
erix
Ale sprawdzasz w sesji: przed wysłaniem tokena nie ma, a po wysłaniu jest. winksmiley.jpg

Spróbuj sam, potem dopiero pytaj.
krzysneo
ja już tak robiłem wcześniej i nic mi nie wychodziło sad.gif i nie chce żeby był token, bez niego żeby się obeszło
nospor
W moim poprzednim poscie podalem linka, gdzie problem byl doglebnie omówiony. Widze ze nie zajrzales - zamykam wiec, bys mial czas zajrzec
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.