Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Ponowny zapis do bazy po odświeżeniu strony
-odo-
post
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
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
mike
post
Post #2





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):
  1. <?php
  2.  
  3. // ...
  4.  
  5. try
  6. {
  7.  
  8. $objModel->addQuestion();
  9.  
  10. }
  11. catch( SQLException $objException )
  12. {
  13.  
  14. switch( $objException->getCode() )
  15. {
  16.  
  17. case 1062 : 
  18. $objRequest->setError( 'question', 'Takie pytanie już istnieje.' );
  19. break;
  20.  
  21. default : 
  22. $objRequest->setError( 'error', 'Nie można dodać pytania.' );
  23. break;
  24. }
  25.  
  26.  
  27. return View::ERROR;
  28.  
  29. }
  30.  
  31. //...
  32.  
  33. ?>


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:
  1. CREATE TABLE `faq` (
  2. `id` int(10) NOT NULL AUTO_INCREMENT,
  3. `languageId` int(2) NOT NULL DEFAULT '0',
  4. `position` int(10) NOT NULL DEFAULT '1',
  5. `question` varchar(255) NOT NULL DEFAULT '',
  6. `answer` text NOT NULL,
  7. PRIMARY KEY (`id`),
  8. UNIQUE KEY `question` (`languageId`,`question`)
  9. ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Czyli nie może być rekordu o takiej samej kombinacji id języka i pytanie.
Go to the top of the page
+Quote Post

Posty w temacie


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

 



RSS Aktualny czas: 7.10.2025 - 19:22