Przeladowanie strony w PHP poprzedzone komunikatem


(julo) #1

Hej wszystkim,

Amator kłania się nisko i prosi o pomoc :slight_smile:

Mam bramkę do wysyłania wiadomości, problem w tym że bez automatycznego przeładowania użytkowink dostaje strone z podziękowaniem za wysłanie maila i tyle. Jeśli ją odświeży to do ja dostanę kolejnego maila i tak w kółko. Po wprowadzeniu automatycznego przeładowania znika mi natomiast komunikat dziękujący za wysłanie wiadomości.

Oto fragment kodu, bardzo proszę o pomoc co robię źle. Z góry dzięki za wasz czas.

elseif (!empty($_POST['tresc']) && !empty($_POST['imie']) && !empty($_POST['email'])) { 

    $message = "Tresc wiadomosci:\n$_POST[tresc]\nWyslal: $_POST[imie]\ne-mail: $_POST[email]"; 

    $header = "From: $_POST[imie] <$_POST[email]>"; 

    @mail("adres@gmail.com","Wiadomosc ze strony WWW","$message","$header") 

    or die('Nie udalo sie wyslac wiadomosci'); 

    echo "Twoja wiadomość została wysłana poprawnie - odezwiemy się wkrótce."; 

    sleep(5);

    @header("Location: http://adres oryginalnej strony");

}

(-Puma-) #2

Zrób przekierowanie na stronę bez tego czekania sleep(5).

Komunikat można zapisać w sesji i pokazać go po przekierowanie (header).

$_SESSION['komunikat'] = 'Twoja wiadomość została wysłana poprawnie - odezwiemy się wkrótce.';

    @header("Location: http://adres oryginalnej strony z komunikatem");

Mam tak zrobione na swoich stronach i spisuje się dobrze.

Na stronie z komunikat wyświetlasz $_SESSION['komunikat']


(julo) #3

Poddaje się, próbowałem to co podpowiadasz ale tak jak pisałem... jestem amatorem.


(-Puma-) #4

Aaaa, zapomniałem że na początku strony z formularzem i komunikatem inicjujesz sesje przez dopisanie kodu... tylko to w ramach php czyli <?php kod ?>

session_start();

To może dokładniej

elseif (!empty($_POST['tresc']) && !empty($_POST['imie']) && !empty($_POST['email'])) {

    $message = "Tresc wiadomosci:\n$_POST[tresc]\nWyslal: $_POST[imie]\ne-mail: $_POST[email]";

    $header = "From: $_POST[imie] <$_POST[email]>";

    @mail("adres@gmail.com","Wiadomosc ze strony WWW","$message","$header")

    or die('Nie udalo sie wyslac wiadomosci');

    $_SESSION['komunikat'] = 'Twoja wiadomość została wysłana poprawnie - odezwiemy się wkrótce.';

    @header("Location: http://adres strony z komunikatem");

}

Teraz robisz stronę z komunikatem (oddzielna strona) i dajesz kod

$_SESSION['komunikat'];

Ps. u mnie jest to bardziej rozbudowane... ale na Twoje potrzeby to wystarczy i powinno działać (nie testowałem:).

Tu masz trochę o sesjach http://webmade.org/porady/sesje-session-php.php


(julo) #5

Hej,

Próbowałem sesjami i nie działa, swoją drogą na twojej stronie chyba też nie.

} 


elseif (!empty($_POST['tresc']) && !empty($_POST['imie']) && !empty($_POST['email'])) { 

    $message = "Tresc wiadomosci:\n$_POST[tresc]\nWyslal: $_POST[imie]\ne-mail: $_POST[email]"; 

    $header = "From: $_POST[imie] <$_POST[email]>"; 

    @mail("email@gmail.com","Wiadomosc ze strony WWW","$message","$header") 

    or die('Nie udalo sie wyslac wiadomosci'); 

    echo "Dzieki za wiadomosc - odzezwiemy sie wkrotce"; 

	sleep(1);

	@header("Location: http://strona na która chce przekierować");

}

Poczytalem o tym chwilę i wychodzi na to że już drugi raz $header nie mogę użyć aby zaraz po wysłaniu wiadomości przekierować użytkownika na inną stronę?? Prawda?

Z góry dzięki za wasz czas,


(-Puma-) #6

Możliwe że header w ogóle Ci nie działa... wykasuj @ z przed header i zobacz czy wywala jakiś błąd.

header("Location: http://strona na która chce przekierować");

Jeśli błąd jest to zastosuj buforowanie danych (błąd prawie na pewno jest bo dajesz echo przed wysłaniem header).

http://webinside.pl/artykul-150-buforow ... owych.html