mystery Opublikowano 20 Października 2007 Zgłoś Opublikowano 20 Października 2007 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 Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
bellum Opublikowano 20 Października 2007 Zgłoś Opublikowano 20 Października 2007 (edytowane) 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 20 Października 2007 przez Zawadaki Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
PelzaK Opublikowano 21 Października 2007 Zgłoś Opublikowano 21 Października 2007 a sama przegladarka się nie pyszczy że zostały wysłane dane POST? Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
bellum Opublikowano 21 Października 2007 Zgłoś Opublikowano 21 Października 2007 a sama przegladarka się nie pyszczy że zostały wysłane dane POST?Opera nie, FF i IE tak Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
evocati Opublikowano 21 Października 2007 Zgłoś Opublikowano 21 Października 2007 Po zapisaniu pliku daj unset($_POST); Po tym przenies do glownej (czy gdzie tam chcesz) Pozdrawiam Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
bellum Opublikowano 21 Października 2007 Zgłoś Opublikowano 21 Października 2007 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 Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
daleth Opublikowano 5 Grudnia 2007 Zgłoś Opublikowano 5 Grudnia 2007 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... Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...