Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Zapisanie danych z formularza w bazie
Forum PHP.pl > Forum > Przedszkole
-Odoakr-
Witajcie!

Mam pytanie w sam raz do piaskownicy:)

Czytam sobie kursy PHP i nie mogę doszukać się rozwiązania mojego problemu... Mam formularz, do którego user wpisuje dane, aby je zapisać w bazie danych... Formularz ma parametr np action="skrypt.php" do skryptu, który wykonuje zadanie.

Jednak po wykonaniu zadania zostajemy na przykładowadomena.pl/skrypt.php - jak zrobić, aby po wykonaniu skryptu user automatycznie wrócił na stronę formularza, lub na jakąkolwiek inną. Denerwuje mnie to, że przy klikaniu "odśwież stronę" wpisują się te same dane do bazy.
emajl22
  1. header("Location: index.php");
Odoakr
ok dzięki, ale w którym miejscu skryptu to dodaćquestionmark.gif?
sadistic_son
To co kolega podal wyzej dajesz w pliku skrypt.php na samym poczatku, zanim cokolwiek wyswietlisz w html. Mozesz tez uzyc samego htmla, bez php poprzez wstawienie miedzy <head> a </head> tego:
  1. <meta http-equiv="refresh" content="x; url=adres.php">
gdzie x oznacza ilosc sekund po ktorych nastapi automatyczne przekierowanie.
Jednak znacznie lepiej bedzie skopiowac cala zawartosc pliku skrypt.php do pliku ktory chcesz wywolac ostatecznie, czyli pewnie ten z formularzem. Wrzuc to do warunku:
  1. //zakladajac ze przycisk w formularzu nazywa sie "zapisz" robisz tak:
  2. if(isset($_POST['zapisz'])){
  3. //tutaj caly kod z pliku sktypt.php
  4. }
Kod ten oznacza ze jesli istnieje zmienna $_POST['zapisz'] czyli jesli kliknieto w ten przycisk to wykona sie kod z pliku skrypt.php.
Kostek.88
@sadistic_son: Twój pomysł uważam za dobry, ale (nie wiem czy dobrze pamiętam) po odświeżeniu strony wyświetli się komunikat w przeglądarce o ponownym wysłaniu informacji, który - jeśli go potwierdzimy - spowoduje dodanie nowego rekordu (w rezultacie czego będą 2 koło siebie). A może lepiej skorzystać z header i zrobić w 100% odporność na odświeżanie?

Aha, jeśli chodzi o header. Zakładam, że kolega @Odoakr ma plik skrypt.php wolny od jakiejkolwiek sekcji head/body... może lepiej w takim wypadku dać header na końcu? Przecież w skrypt.php nie są wyświetlane żadne informacje, więc strona pozostaje czysta (tak przypuszczam). Wtedy wykona się skrypt i automatycznie przekieruje na poprzednią stronę, tj. index.php smile.gif
lukaskolista
header jest rozwiazaniem duzo lepszym, niz meta w html.
Dodam, ze aby uniknac problemow przy pozniejszym rozwoju skryptu po header() nalezy dac exit(), bo samo header() poza ustawieniem naglowkow nie konczywykonywania skryptu
  1. header('Location: index.php');
  2. exit();
Odoakr
Dzięki za odpowiedzi!

wrzucę to wszystko do jednego skryptu i będzie po problemie.

Mam jednak problem z tym headerem...

po wykonaniu kodu pokazuje mi się ostrzeżenie:

  1. Warning: Cannot modify header information - headers already sent by (output started at /home/odoakr/public_html/php/dodaj.php:2) in /home/odoakr/public_html/php/dodaj.php on line 31


Czytałem o tym ostrzeżeniu, ale nie wiem gdzie jest błąd.

tu jest kod
  1. <?php
  2.  
  3.  
  4. $polaczenie = @mysql_connect('odpowiednie_dane')
  5. or die('Brak połączenia z serwerem mysql. Błąd: '.mysql_error());
  6.  
  7. $db = @mysql_select_db('odoakr_testowanie', $polaczenie)
  8. or die('Nie mogę połączyć się z bazą danych. Błąd: '.mysql_error());
  9. //dodawanie wiersza
  10.  
  11. if($_GET['nazwa']==NULL)
  12. {
  13. echo "<form action=\"dodaj.php\" method=\"GET\">
  14.  
  15. nazwa: <input type=text name=nazwa value=ddd><br>
  16. cena: <input type=text name=cena><br>
  17. obrazek: <input type=text name=obrazek><br>
  18. link: <input type=text name=link><br>
  19. <input type=submit value=\"Wyślij\">
  20.  
  21. </form> ";
  22. }
  23. else
  24. {
  25.  
  26. $zapytanie = "INSERT INTO `allegro` (`nazwa`, `link`, `obrazek` , `cena`) VALUES ('".$nazwa."', '".$link."', '".$obrazek."', '".$cena."')";
  27. $idzapytania = mysql_query($zapytanie);
  28. if($idzapytania)
  29. {
  30. header("Location: <a href="http://www.geostrona.pl/php/lista.php&quot%3b%29;" target="_blank">http://www.geostrona.pl/php/lista.php");</a>
  31. exit();
  32. }
  33. else
  34. {
  35. echo "blad";
  36. }
  37. }
  38.  
  39. mysql_close($polaczenie);
  40. ?>
Kostek.88
header masz w złym miejscu: musisz tak rozplanować sobie skrypt, by przed header nie wyświetlało się na stronie absolutnie NIC! Czasem nawet białe znaki bywają problemowe dla header. Nie możesz po prostu dać każdej operacji w osobnym pliku, a formularze i inne bajery wyświetlać w głównej części skryptu? Tak jak napisałeś na samym początku...
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.