![]() |
![]() ![]() |
![]() |
-odo- |
![]() ![]()
Post
#1
|
Goście ![]() |
Dane z formularza przekazuję do strony na której zapisuję je w bazie:
<?php mysql_query("INSERT INTO tabela VALUES ...")... ?> Po odświeżeniu tej strony dane zostają ponownie zapisane. Jak się przed tym zabezpieczyć? Wiem, że po zapisaniu danych mogę skorzystać z przekierowania do innej strony: Header("Location: plik.php") Ale może jest inna metoda |
|
|
![]()
Post
#2
|
|
Grupa: Przyjaciele php.pl Postów: 7 494 Pomógł: 302 Dołączył: 31.03.2004 Ostrzeżenie: (0%) ![]() ![]() |
Jeśli koniecznie chcesz ominąć header() to możesz:
1. Po każdym zapisie ustawiać datę zapisu w sesji i przy ponownej próbie sprawdzać, jeśli to było dalej niż nimutę temu to pozwalasz na zapis. 2. Przed każdym zapisem sprawdzać czy taki rekord w tabeli istnieje; 3. Założyc klucze unikalne na pola w tabeli i przechwytywać wyjątki z bazy; Zbierze się pewnie jeszcze klika pomysłów, ale header() jest najprostsze. Choć sam używam przeważnie rozwiązania z pkt. 3. |
|
|
![]()
Post
#3
|
|
Grupa: Przyjaciele php.pl Postów: 1 224 Pomógł: 40 Dołączył: 6.07.2004 Skąd: Wuppertal Ostrzeżenie: (0%) ![]() ![]() |
mozna tez ustawiac cookies (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) tylko po co (IMG:http://forum.php.pl/style_emoticons/default/snitch.gif)
|
|
|
-odo- |
![]() ![]()
Post
#4
|
Goście ![]() |
Dzięki za odpowiedź mike_mech
Mogę prosić o rozwinięcie tego punktu: Założyc klucze unikalne na pola w tabeli i przechwytywać wyjątki z bazy; |
|
|
![]()
Post
#5
|
|
Grupa: Przyjaciele php.pl Postów: 7 494 Pomógł: 302 Dołączył: 31.03.2004 Ostrzeżenie: (0%) ![]() ![]() |
To będzie przykład dość poglądowy (jest to jakiś skrawek jednej z moich aplikacji):
Klasa obiektu $objQuestion przy dodawaniu artykułu korzysta z AdoDB, które to wyrzuca wyjątek, jeśli wykonywane jest zapytanie, naruszające unikalność pól w tabeli z artykułami. Kodem naruszenia takiej unikalności jest kod MySQL'a 1062. A tabela z pytaniami może wyglądać tak:
Czyli nie może być rekordu o takiej samej kombinacji id języka i pytanie. |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 33 Pomógł: 1 Dołączył: 15.12.2005 Ostrzeżenie: (0%) ![]() ![]() |
A ja bym w najprostszy sposob zastosowal header() ale nie moge bo juz raz jest uzyty i wyskakuje blad. wyglada to mniej wiecej tak:
require "include.php"; menu(); //tu jest zawarty juz header ----dalsza czesc pliku i nie moge podac headera w dalszej czesci pliku bo wyskakuje blad. Jak sobie z tym poradzic ? |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 1 415 Pomógł: 117 Dołączył: 7.09.2005 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
ob_start" title="Zobacz w manualu php" target="_manual i powiązane funkcje.
|
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 6 Pomógł: 0 Dołączył: 24.02.2007 Ostrzeżenie: (0%) ![]() ![]() |
tez mialem taki problem i wpadlem na pewien pomysl w sumie dzieki podpowiedzi miłej TomASS przy okazji dzięki ;]
każdorazowy wpis tworzy tymczasowy plik w którym umieszczana jest zawartość jego treści dalej na początku skryptu obsługującego formularz dodaje coś takiego: $a=fopen("temp.txt","r"); $temp=fread($a, filesize("temp.txt")); fclose($a); i dalej if ($polewpisow == $temp) {echo("to odświerzenie nie doda drugi raz tego samego wpisu ha")} else{echo("i tu caly skrypt obsługujący formularz");} $a=fopen("temp.txt","w"); fputs($a, $polewpisow); fclose($a); gdzie $a jest prypadkowa $polewpisow jest zmienna tresci z formularza ------------- a wiec skrypt nie zostanie wykonany jeśli treść pliku temp.txt będzie taka sama jak zmiennej polawpisów w innym wypadku skrypt bedzie wykonywany na koncu otwieranie na nowo pliku i zapisywanie w nim wartości z nowej zmiennej itd. już to koniec z koszmarami odświeżania. dzieki pap ------------------------- odkopywanie wątku tak starego to mało lubiana tutaj praktyka do tego jeszcze brak ogonków no i poprawiony ort ~Cienki1980 i bark bbcode ~kwiateusz |
|
|
![]() ![]() |
![]() |
Aktualny czas: 21.10.2025 - 20:48 |