Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Jak pogodzić echo i site reload ?
Forum PHP.pl > Forum > Przedszkole
Morfi777
Witam smile.gif

Mam na stronie jakiś tam formularz. Po nim zaczyna się kod php sprawdzający czy pola w formularzu zostały wypełnione.
Po weryfikacji jest wygląda to tak:
  1. <?php
  2. if($_POST["fullmapname"]&&!empty($_POST["fullmapname"])&&$_POST["shortmapname"]&&!empty($_POST["shortmapname"])&&$_POST["mappath"]&&!empty($_POST["mappath"])){
  3.    $sql="INSERT INTO mapy_lista ( fullname,skrot ) VALUES ( '".$_POST["fullmapname"]."','".$_POST["shortmapname"]."')";
  4.    mysql_query ($sql) or die ("Error 1".$sql);
  5.  
  6. $plik = fopen("/home/war/pliktxt.txt", "w+") or die ("Cannot open file!");
  7. $tresc = "Linia 1\nLinia 2\nLinia 3";
  8. fwrite($plik, $tresc);
  9. fclose($fh);
  10.  
  11.  
  12. echo '<script language="javascript"> location.href="cfgadd.php"</script>';
  13. echo 'Data Added';
  14. }
  15. ?>



Teraz, chciałem aby pojawil się tekst "Data Added". Jednocześnie chcę żeby ten skrypt z "location.href" się wykonał gdyż dzięki niemu po wciśnieniu F5 nie pojawia się komunikat postdata.


Da się te 2 rzeczy pogodzić ? Z góry dziękuję za pomoc
TrevorGryffits
Primo: nie można pogodzić. Jak chcesz, żeby jednocześnie się wyświetlił tekst i przy okazji skrypt przerzucił nas na następną stronę.
Secundo: nie chcesz, żeby można było wysłać formularz jeszcze raz. Chwalebne:) Polecam przyklejony temat z działu PHP "odświeżenie strony, zapis". Tam jest kilka sposobów.
Tertio: A skoro już będziesz przy przyklejonych to polecam poczytać jeszcze kilka. Szczególnie o SQL Injection. To tak odnośnie twojej 1. linijki.
Morfi777
Cytat(TrevorGryffits @ 1.08.2009, 18:33:57 ) *
Primo: nie można pogodzić. Jak chcesz, żeby jednocześnie się wyświetlił tekst i przy okazji skrypt przerzucił nas na następną stronę.
Secundo: nie chcesz, żeby można było wysłać formularz jeszcze raz. Chwalebne:) Polecam przyklejony temat z działu PHP "odświeżenie strony, zapis". Tam jest kilka sposobów.
Tertio: A skoro już będziesz przy przyklejonych to polecam poczytać jeszcze kilka. Szczególnie o SQL Injection. To tak odnośnie twojej 1. linijki.


Ad 1: No, myślałem, że może następować coś po sobie np. Odśwież a potem na 'nowej stronie' wyświetl.
Ad 2: Tak zrobię
Ad 3: Wiem, tylko, żeby do tego formularza się dostać przechodzimy przez skrypt logowania (porządnie napisanego) a i tak to jest tylko dla przyjaciół, nic mi po ich włamaniach. Ale dziękuję za troske
batman
Cytat
Primo: nie można pogodzić. Jak chcesz, żeby jednocześnie się wyświetlił tekst i przy okazji skrypt przerzucił nas na następną stronę.
A właśnie, że można - np. settimeout w javascript.
Cytat
Secundo: nie chcesz, żeby można było wysłać formularz jeszcze raz. Chwalebne:) Polecam przyklejony temat z działu PHP "odświeżenie strony, zapis". Tam jest kilka sposobów.
Zgadzam się z przedmówcą. Poszukaj w tym temacie.
Morfi777
Cytat(batman @ 1.08.2009, 18:52:33 ) *
A właśnie, że można - np. settimeout w javascript.


próbowałem z funkcją "sleep" ale tylko przedłużył odświeżenie tej strony winksmiley.jpg
Fifi209
Cytat(Morfi777 @ 1.08.2009, 17:56:55 ) *
próbowałem z funkcją "sleep" ale tylko przedłużył odświeżenie tej strony winksmiley.jpg


Sleep jest w php a on mówił o javascript. Czytaj uważniej.
Morfi777
Cytat(fifi209 @ 1.08.2009, 18:58:13 ) *
Sleep jest w php a on mówił o javascript. Czytaj uważniej.


Zauważyłem... mówię tylko, że myślałem o tym samym tylko niewłaściwą funkcję zastosowałem.

Dopiszę. Co wyczytałem.

# Ten trik z location.href czy header location przeładuje mi stronę i nie pogodzę tego z informacją o tym, że dane zostały wysłane
# Reszta rzeczy w tamtym temacie była o tym, że informacja o POSTDATA się pojawi tyle, że dane nie zostaną dodane -- takie coś mnie nie zadowala
# całą sprawę załatwiłby AJAX -- ale nie ma co się bawić z ajaxem przy tak błachostkowej rzeczy


Nie wiem jak poprawnie użyć funkcji settimeout zaproponowanej przez 'batman', mógłbys mnie poprowadzić tudzież odesłać do jakiejś strony ?
Bo wg mojego spojrzenia to ona mi może jedynie czasowo pokazać, że dane zostały dodane przez np 10 sekund po czym przeładuje strone (napis zniknie), o tym mówiłeś ?
Fifi209
Odmierzasz czas do przeładowania strony poprzez window.location ... za pomocą setTimeout
grzegosh
Przeładuj stronę z jakąś zmienną np index.php?add=yes i sprawdzaj na nowej stronie czy $_GET['add']=='yes' jesli tak echo.
batman
~Morfi777
1. echo "jakiś tekst";
2. settimeout
3. w settimeout robisz window.location

Jest to proste jak konstrukcja cepa. Prościej się już nie da wyjaśnić. Jeśli nie chcesz używać do tego javascript, to możesz użyć tego. Tylko pamiętaj o dodaniu opóźnienia w postaci settimeout. Na temat funkcji settimeout możesz poczytać np tutaj.
TrevorGryffits
Ale jeśli ustawi setTimeout to użytkownik może jeszcze wcześniej odświeżyć stronę.
Morfi777
Cytat(batman @ 1.08.2009, 19:38:25 ) *
~Morfi777
1. echo "jakiś tekst";
2. settimeout
3. w settimeout robisz window.location

Jest to proste jak konstrukcja cepa. Prościej się już nie da wyjaśnić. Jeśli nie chcesz używać do tego javascript, to możesz użyć tego. Tylko pamiętaj o dodaniu opóźnienia w postaci settimeout. Na temat funkcji settimeout możesz poczytać np tutaj.


Toć, spytałem się czy tak to działa sad.gif
Cytat
jedynie czasowo pokazać, że dane zostały dodane przez np 10 sekund po czym przeładuje strone (napis zniknie)



Dziękuję
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.