Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Automatyczne przeładowanie strony
Forum PHP.pl > Forum > Przedszkole
joolek
Hej, przedszkolak potrzebujemy pomocy.
Poróbowałem na innym forum ale w końcu się poddałem dlatego teraz bezpośrednio do zawodowców.

Oto fragment kodu
  1. }
  2.  
  3. elseif (!empty($_POST['tresc']) && !empty($_POST['imie']) && !empty($_POST['email'])) {
  4. $message = "Tresc wiadomosci:\n$_POST[tresc]\nWyslal: $_POST[imie]\ne-mail: $_POST[email]";
  5. $header = "From: $_POST[imie] <$_POST[email]>";
  6. @mail("email@gmail.com","Wiadomosc ze strony WWW","$message","$header")
  7. or die('Nie udalo sie wyslac wiadomosci');
  8. echo "Dzieki za wiadomosc - odzezwiemy sie wkrotce";
  9. sleep(1);
  10. @header("Location: <a href="http://strona" target="_blank">http://strona</a> na która chce przekierować");
  11. }


Mój problem, dla mnie ogromny polega na tym że po wysłaniu wiadomości chciałbym aby strona przeładowała się automatycznie na inny adres pod którym podziękuje za wysłanie wiadomości itp itp. Na ten moment strona wyświetla podziękowanie za wysłanie wiadomości gdzieś w stronie, poprostu wrzucone bez ładu i za każdym razem jak odświeżam stronę to wysyła kolejnego maila.

Czy obejdzie się to bez Javy?
Czy mogę dwa razy użyć header?

Generalnie bardzo proszę o pomoc w rozwiązaniu mojego przedkoszkolakowego problemu.
Z góry dzięki za wasz czas.
Pozdrawiam
J
CuteOne
A po co ci JavaScript [żadne Java] questionmark.gif

Tam gdzie masz formularz dodaj
  1. <?php
  2.  
  3.  
  4. if(####) {
  5.  
  6. }
  7. elseif (!empty($_POST['tresc']) && !empty($_POST['imie']) && !empty($_POST['email']) && (!$_SESSION['interval'] || time() < $_SESSION['interval'])) {
  8. $message = "Tresc wiadomosci:\n$_POST[tresc]\nWyslal: $_POST[imie]\ne-mail: $_POST[email]";
  9. $header = "From: $_POST[imie] <$_POST[email]>";
  10. @mail("email@gmail.com","Wiadomosc ze strony WWW","$message","$header")
  11. or die('Nie udalo sie wyslac wiadomosci');
  12. echo "Dzieki za wiadomosc - odzezwiemy sie wkrotce";
  13.  
  14. $_SESSION['interval'] = time() + 300; // 5min
  15. sleep(1);
  16. @header("Location: http:// strona. pl/");
  17. }
  18.  
  19.  


Innymi słowy użytkownik nie może wysłać kolejnego maila przez 5min
konrados
Przed wywołaniem header nie możesz wypluwać niczego na ekran (a Ty wypluwasz echo "Dzieki za wiadomosc ..")

Tak więc chcesz raczej przekierować (wywołać header) na stronkę np. wyslane.php gdzie wyplujesz swoje "dzięki za wiadomość..."
CuteOne
Zrobił sleep [chociaż faktycznie głupie rozwiązanie smile.gif]
thek
Problem to wspomniane wyplucie podziękowania przed header. O to Ci się pluje i pluć będzie, bo według standardów przed wysłaniem nagłówków do przeglądarki nic nie powinno się wymknąć do niej. Jak to rozwiązać? Przykładowo wrzucasz komunikat podziękowania do sesji i na stronie do której kierujesz sprawdzasz, czy jakiś komunikat jest. Jeśli tak - wyświetlasz i usuwasz z sesji (żeby sobie on w niej nie wisiał do czasu końca sesji). A co do możliwości blokowania ponownej wysyłki maila, to pomysłów jest wiele, ale tak naprawdę nie można tego napisać tak, by ktoś nie obszedł tego. Jedynie jeśli ktoś jest zalogowany, to mu blokniesz wysyłkę poprzez blokadę na id smile.gif Ale gość zawsze to obejdzie przy odrobinie wiedzy i/lub sprytu.
Webmasterr
NIe lepiej użyć metatagu Refresh w sekcji Head strony?

Do sekcji Head dodajesz:

  1. <meta http-equiv="refresh" content="ilość sekund; url=adres URL" />
luck
A jak już bardzo chcesz zrobić przekierowanie po wysyłce za pomocą "header()", to daj na początku pliku:
A na końcu:
joolek
Hej,
Dzięki za wasze odpowiedzi.... (tak na marginesie to jak dobrze że nie pamiętam jak to było być przedszkolakiem bo... bo zupełnie nie rozumiem o czym do mnie mówicie smile.gif )

A poważnie to:
- nie chce ograniczać nikomu czasu przebywania na stronie (wielu moich znajomych potrzebuje czasu aby napisać kilka słów na klawiaturce)
- specjalnie ograniczać wysyłania kolejnej wiadomości. To strona dla skoczków którzy potrzebują szybkiej możliwości skontaktowania się ze mną, jak najprościej się da.

Z całym szacunkiem i uznaniem do waszych umiejętności - tutaj nikt nie będzie usiłował czegoś obejść - poprostu chciałem po wysłaniu wiadomości przejść na konkretny adres.

Czy jak przedszkolak się uśmiechnie to dostanie jakiegoś ew. gotowca albo naprowadzicie mnie b. czytelnie co mam gdzie zrobić.

Ja wiem że takich jak ja kopie się w (...) ale b.proszę o pomoc.
Z góry dzięki
J
CuteOne
Po wysłaniu maila ( mail() ) i przejściu na nową stronę ( header('Location') ) nie można ponownie wysłać maila poprzez odświeżenie strony
joolek
OK - ale jak można najprościej przejść na inną stronę?
Dzięki
CuteOne
toż napisałem........ do tego masz opisane jak ominąć wszelkie błędy związane z wysyłaniem kilku nagłówków do przeglądarki [ob_start()]

google i jedziesz..
joolek
Hej,

Dzięki za podpowiedź, ch...nie bardzo ciężko mi załapać to w czym wy śmigacie tak biegle no ale... każdy ma swoją działkę.
Powiedzmy że działa - jeszcze parę lat i to dopracuje smile.gif

Mam jeszcze jedno pytanie: czy w

  1. echo "jakaś tam wiadomość";
  2. }


Czy jest możliwość edycji stylu tego komunikatu? Tzn może zmiana czcionki itp itd?

Dzięki
thek
Najprościej? Obejmij to tagiem html. Choćby <span style="definicja fonta koloru, tła itp...">Komunikat</span>
joolek
Hej, zrobilem jak powiedziales i wyskakuje mi blad

  1. Parse error: parse error, unexpected '<' in /kontakt.php on line 95



  1. // sprawdzamy, czy zmienne przeslane z formularza nie sa puste
  2. elseif (!empty($_POST['tresc']) && !empty($_POST['imie']) && !empty($_POST['email'])) {
  3. // jezeli powyzszy warunek jest spelniony tworzona jest wiadomosc
  4. // zmienna $message zawiera tresc wiadomosci
  5. $message = "Tresc wiadomosci:\n$_POST[tresc]\nWyslal: $_POST[imie]\ne-mail: $_POST[email]";
  6. // zmienna $header zawiera przede wszystkim adres zwrotny
  7. $header = "From: $_POST[imie] <$_POST[email]>";
  8. // funkcja mail() za pomoca której wiadomosc zostanie wyslana
  9. @mail("adres@gmail.com","Wiadomosc ze strony WWW","$message","$header")
  10. or die('Nie udalo sie wyslac wiadomosci');
  11. // wyswietlenie komunikatu w przypadku powodzenia
  12. <span class="dzieki">
  13. echo "Your email has been sent correctly - we will back to you shortly";
  14. </span>
  15. }
  16. // lub w przypadku nie wypelnienia formularza do konca
  17. //else echo "<span style=\"color: #FF0000; text-align: center;\">Wypelnij wszystkie pola formularza!</span>";
  18. //ob_end_flush();
  19. ?>



Linia 95 odpowiada 13. Proszę naprowadź co robię źle.
Dziękuje!
thek
Twoim problemem jest już linia 12 tutaj. (<span class="dzieki">) i będzie 14 ( </span> ), które to są tagami html walniętymi wprost do php. Tak nie można zrobić. Albo je wrzuć do echo, ale "wyrzuć" poza interpreter. Czyli albo
  1. elseif (!empty($_POST['tresc']) && !empty($_POST['imie']) && !empty($_POST['email'])) {
  2. $message = "Tresc wiadomosci:\n$_POST[tresc]\nWyslal: $_POST[imie]\ne-mail: $_POST[email]";
  3. $header = "From: $_POST[imie] <$_POST[email]>";
  4. @mail("adres@gmail.com","Wiadomosc ze strony WWW","$message","$header") or die('Nie udalo sie wyslac wiadomosci');
  5. echo '<span class="dzieki">';
  6. echo "Your email has been sent correctly - we will back to you shortly";
  7. echo '</span>';
  8. }
  9. ?>

albo
  1. elseif (!empty($_POST['tresc']) && !empty($_POST['imie']) && !empty($_POST['email'])) {
  2. $message = "Tresc wiadomosci:\n$_POST[tresc]\nWyslal: $_POST[imie]\ne-mail: $_POST[email]";
  3. $header = "From: $_POST[imie] <$_POST[email]>";
  4. @mail("adres@gmail.com","Wiadomosc ze strony WWW","$message","$header") or die('Nie udalo sie wyslac wiadomosci');
  5. ?>
  6. <span class="dzieki">
  7. <?php
  8. echo "Your email has been sent correctly - we will back to you shortly";
  9. ?>
  10. </span>
  11. <?php
  12. }
benio101
@up: Ten 2. kod ma niepotrzebne 2 linie i echo. Lepiej:

  1. elseif (!empty($_POST['tresc']) && !empty($_POST['imie']) && !empty($_POST['email'])) {
  2. $message = "Tresc wiadomosci:\n$_POST[tresc]\nWyslal: $_POST[imie]\ne-mail: $_POST[email]";
  3. $header = "From: $_POST[imie] <$_POST[email]>";
  4. @mail("adres@gmail.com","Wiadomosc ze strony WWW","$message","$header") or die('Nie udalo sie wyslac wiadomosci');
  5. ?>
  6. <span class="dzieki">
  7. Your email has been sent correctly - we will back to you shortly
  8. </span>
  9. <?
  10. }
-joolek-
Dziękuje dziękuje dziękuje!
...i jeszcze raz dziekuje smile.gif
J
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.