Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Closed TopicStart new topic
> Zabezpieczanie formularza, blokada przed ponownym wyslaniu go po refresh
krzysneo
post 15.01.2009, 14:09:54
Post #1





Grupa: Zarejestrowani
Postów: 41
Pomógł: 0
Dołączył: 30.12.2008

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


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
Go to the top of the page
+Quote Post
nospor
post 15.01.2009, 14:12:31
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




bylo wiele razy
http://forum.php.pl/index.php?showtopic=44...t=0&start=0


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Spawnm
post 15.01.2009, 14:14:39
Post #3





Grupa: Moderatorzy
Postów: 4 069
Pomógł: 497
Dołączył: 11.05.2007
Skąd: Warszawa




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. ?>
Go to the top of the page
+Quote Post
krzysneo
post 15.01.2009, 19:03:29
Post #4





Grupa: Zarejestrowani
Postów: 41
Pomógł: 0
Dołączył: 30.12.2008

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


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
Go to the top of the page
+Quote Post
erix
post 15.01.2009, 19:32:57
Post #5





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




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. ?>


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
krzysneo
post 15.01.2009, 19:44:52
Post #6





Grupa: Zarejestrowani
Postów: 41
Pomógł: 0
Dołączył: 30.12.2008

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


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
Go to the top of the page
+Quote Post
erix
post 15.01.2009, 19:51:08
Post #7





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Ale sprawdzasz w sesji: przed wysłaniem tokena nie ma, a po wysłaniu jest. winksmiley.jpg

Spróbuj sam, potem dopiero pytaj.


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
krzysneo
post 15.01.2009, 19:59:23
Post #8





Grupa: Zarejestrowani
Postów: 41
Pomógł: 0
Dołączył: 30.12.2008

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


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
Go to the top of the page
+Quote Post
nospor
post 15.01.2009, 21:26:17
Post #9





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




W moim poprzednim poscie podalem linka, gdzie problem byl doglebnie omówiony. Widze ze nie zajrzales - zamykam wiec, bys mial czas zajrzec


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post

Closed TopicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 13.06.2025 - 09:23