Skocz do zawartości
mystery

[php] Formularze I Odświeżanie Strony

Rekomendowane odpowiedzi

napisałem bardzo prosty formularz w php. jak formularz działa, każdy wie, no ale gdy wypełnię pola dane i nacisnę na wyślij to dane zapisywane są do pliku dane.txt i wyświetlany jest komunikat z podziękowanie na wpisanie danych. jeśli odświeżę teraz stronę to dane te znowu zostaną dopisane do pliku. chciałbym tego uniknąć, pytanie tylko jak to zrobić?

 

kody plików

 

» Naciśnij, żeby pokazać/ukryć tekst oznaczony jako spoiler... «

form.html

<?xml version="1.0" encoding="iso-8859-2"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="pl" lang="pl">
<head>
<title>Sign Up for New Year Event</title>
</head>
<body>
Please enter your first name and second name
 <form action="pobierz.php" method="POST">
	Name: <br />
	<input type=text name=fname />
	<br />
	Surname: <br />
	<input type=text name=lname />
	<br />
	<input type=submit value="Send" />
	<input type=reset value="Reset" />
 </form>
</body </html>

 

pobierz.php

 

<?php$plik="dane.txt";echo("<html>");echo("<head><title>Sign Up for New Year Event</title></head>");echo("<body>");if(($fname == "") || ($lname == "")){	echo ("<form method=post action=pobierz.php>");	echo ("All fields are required. Please complete missing fields :)<br />");}if ($fname == "")//sprawdzamy czy pole imie jest puste{	echo "Name: <br /><input type=text name=fname /><br />";//jeśli pole imie jest puste wyświetlamy pole imie itd...}else{	echo "<input type=hidden name=fname value=$fname />";}if ($lname == ""){	echo "Surname: <br /><input type=text name=lname /><br />";}else{	echo "<input type=hidden name=lname value=$lname />";}if (($fname == "") || ($lname == "")){	echo "<input type=submit name=submit value=Sende /> <input type=reset name=reset value=Reset />";	echo "</form>";//zamykamy formularz }else{	$fp=fopen("$plik", "a");	$imie=$_POST['fname'];	$nazw=$_POST['lname'];	$dane="$imie\t$nazw\n";	fwrite($fp, $dane);	fclose($fp);	echo("That's all. Thx :)");}echo("</body>");echo("</html>");?>

 

pozdrawiam

m

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

bo dane POST dalej są dostępne, musisz po pomyślnym wykonaniu operacji z wykorzystaniem danych POST przeładować stronę albo zablokować możliwość powtórnego wykonania operacji

 

po pomyślnym zapisaniu danych wyslij nagłówek i/lub zakończ wykonanie skryptu

 

header('Location: ');

aby to zrobić musisz przebudować skrypt, żeby przed wysłaniem nagłówka nie było żadnego opróżniania bufora wyjsciowego przez echo lub print itd...

 

coś w tym stylu:

 

<?php$plik="dane.txt";if (!empty($_POST['fname']) && !empty( $_POST['lname'])) {	$fp=fopen("$plik", "a");if (fwrite($fp, $_POST['fname'].'\'.$_POST['lname']."\n")) {	header('Location: http://'.$_SERVER['HTTP_HOST']);	exit;}	fclose($fp);	echo 'błąd zapisu';}//wyświetlenia ewentualnego błędu//tu formularz?>

lub zapisz ciastko lub informacje w sesji ze zostało zapisane pomyślnie oraz warunek sprawdzający

Edytowane przez Zawadaki

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Po zapisaniu pliku daj

unset($_POST);

Po tym przenies do glownej (czy gdzie tam chcesz)

 

Pozdrawiam

niestety ale tego typu danych poleceniem unset() nie usuniesz trwale, dane POST zostaną usunięte poprzez samo przeładowanie strony lub przejście do innej

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

outdated! ale się może komu na przyszlość przyda (mysql/pliki będzie działać)

 

Powiedzmy, że pliki są numerowane 1, 2 ... n, więc do <form /> dodaj input z hidden i numerem pliku. W php pętla sprawdza czy plik nie istnieje, jak tak zwraca komunikat nie zapisuje.

 

To wszystko...

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Dołącz do dyskusji

Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.

Gość
Dodaj odpowiedź do tematu...

×   Wklejono zawartość z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Odnośnik został automatycznie osadzony.   Przywróć wyświetlanie jako odnośnik

×   Przywrócono poprzednią zawartość.   Wyczyść edytor

×   Nie możesz bezpośrednio wkleić grafiki. Dodaj lub załącz grafiki z adresu URL.

Ładowanie


×
×
  • Dodaj nową pozycję...