Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php]Mail się nie wysyla
Forum PHP.pl > Forum > Przedszkole
Malone
Witam wszystkich!

Widzę, że admin przeniósł mój post jak się zdaje z tematu, gdzie omawiano dublowanie się wysyłanych formularzy. Mam nadzieję, że w ten sposób nie pozbawił mnie kontekstu, w jakim pytam.

Przeczytałem temat o ponownym niechcianym wysyłaniu maili poprzez odświeżenie strony z formularzem i wreszcie, po dosłownie kilku tygodniach załapałem, jak wykorzystać funkcję header (jakoś wszędzie wszyscy opisywali to w skrócie i nie umiałem tego dostosować do swojego formularza). Ale nie do końca jeszcze wszystko działa...

Oto jak wygląda sprawa:

Jest strona z umieszczonym w niej poza HTML/CSS kodem PHP, który wysyła do mnie maila, a w tym mailu znajdują się:

Imię
Nazwisko
email
Kolejne linijki z wypełnionymi polami testu.

Imię, nazwisko, email oraz testy (na bazie wysuwanych pól do wyboru) są w <formie>, który jest już poza kodem PHP.

Form ma taką postać:

  1. <form action="?" method="post" name="cos_tam">



Jeśli w miejsce "?" wstawię "przekierowanie.php", to po submicie przeglądarka idzie na przekierowanie.php. Na niej jest wyłącznie ten kod:

  1. <?
  2. header("Location: wyslano.php")
  3. ?>


Przekierowuje on natychmiastowo na podaną w nim stronę wyslano.php z podziękowaniem za wysłanie testu.

Czyli w praktyce klikamy w submit i mamy natychmiast stronkę z podziękowaniem.

Działa? Działa. Wreszcie! Nie ma problemu z wciskaniem F5 przez nieświadomych lub złośliwych userów! Łał!

Ale maile przestały dochodzić... Idzie się załamać!

Jako że dotąd dziabałem strony w CSS/HTML, a PHP dostosowuję sobie sam w miarę rozrastających się potrzeb metodą prób i błędów, godzinami czytając fora, to ręce mi już opadają. Nic nie znajduję w tej kwestii.

Wszelkie odpowiedzi na temat wysyłania headerów były już dla mnie niejasne, póki na tym forum be2K nie podał tego w 2 częściach i załapałem, że do tego potrzeba mi jeszcze 2 plików, poza samą stroną z testem. Dzięki, człowieku!

No, ale jakoś nigdzie nie widzę, aby ktokolwiek miał problem z dochodzeniem maili, gdy brakuje "?" w <formie>... Próbowałem już rozmaitych dzikich kombinacji - nic. Leżę na łopatkach.

Albo mam maile wysyłane, ale bez przekierowania na stronę wyslano.php, bo musi być "?" zamiast "przekierowanie.php", albo mam przekierowanie, ale maile nie dochodzą, bo "action" zamiast wysyłać, kieruje na stronę przekierowania.

Proszę o pomoc, jeśli ktokolwiek jest w stanie pojąć moje kulawe noob-owe rozumowanie!

Pozdrawiam!
markonix
Hey, a jakie zadajesz pytanie?
ciekawskiii
Markonix:D
Fakt, sam nie wiem o co chodzi, czasem lepiej napisac krotko ale tak, zeby kazdy zrozumial bo to nie lektura i nawet do konca nie chce mi sie tego czytac
modern-web
Rozumiem, ze masz problem z tym, że po dodaniu header('location: ...'); mail się nie wysyła, tak?
Może pokombinuj z dodaniem takiego czegoś w miejscu gdzie wyświetla się podziękowanie:

  1. echo "<meta http-equiv='refresh' content='1; url=http://www.twoja_strona.pl'?>";


Powinno załatwić sprawę, a mail powinien dochodzić bez problemów ^^
Pozdrawiam!
karolo_k
Z tego co napisałeś to ja zrozumiałem ze masz 2 storny. Pierwsza z kodem html i skryptem wysylającym email oraz header do strony drugiej, no a na drugiej masz cos w rodzaju "Dziekuje za wysłanie formularza".

Jeżeli tak to musisz to poprawić, np:
Utworz plik index.html a w nim stwórz ten swoj formularz i daj go w <form action"wysylanie.php">
Utworz plik wysylanie.php i w nim usmieść skrypt na wysyłanie emaila i dodaj do niego header do podziekowanie.html
Utworz podziekowanie.html i w nim podziekuj za wyslanie maila.
modern-web
@up
A nie pomyślałeś, że można zrobić to wszystko w 1 pliku?
Dajmy na to... masz plik mail.php
Na początku (lub w kodzie html) zapisujesz skrypt, później korzystasz normalnie z znaczników HTML tj. <html><head></head><body>#</body></html> - tak jakbyś pisał normalną stronę bez jakichkolwiek skryptów. W miejsce # wstawiasz np. formularz. Przyciskowi `submit` nadajesz nazwę. Następnie dodajesz do skryptu coś a la to:
  1. if ( isset ( $_POST['nazwa_przycisku_submit'] ) ) {
  2. // tutaj skrypt mail...
  3. } else {
  4. // komunikat jeśli coś pójdzie nie tak.
  5. }

co pozwoli na wysłanie formularza TYLKO wtedy gdy zostanie naciśnięty dany button.
Potem wystarczy dać w skrypcie kolejną instrukcję warunkową, która wyświetli za pomocą echo podziękowanie za wiadomość.
I koniec... radzę poczytać trochę o zastosowaniu PHP, bo widzę, że zrobiłbyś to dookoła (a po co sobie utrudniać) winksmiley.jpg

Pozdrawiam.
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.