Przemysław B.

Przemysław B. Grafik komputerowy /
Specjalista ds.
Marketingu -
Follow...

Temat: Formularz kontaktu w PHP

Witam,

Mam pewien problem. Odnośnie formularza kontaktu.

Skrypt wygląda następująco:

// sprawdzamy, czy zmienna $submit jest pusta
if (empty($_POST['submit'])) {
// wyswietlamy formularz
echo "

Tresc wiadomosci

Imie, nazwisko lub nick

Adres e-mail

 
 

";
}
// sprawdzamy, czy zmienne przeslane z formularza nie sa puste
elseif (!empty($_POST['tresc']) && !empty($_POST['imie']) && !empty($_POST['email'])) {
// jezeli powyzszy warunek jest spelniony tworzona jest wiadomosc
// zmienna $message zawiera tresc wiadomosci
$message = "Tresc wiadomosci:\n$_POST[tresc]\nWyslal: $_POST[imie]\ne-mail: $_POST[email]";
// zmienna $header zawiera przede wszystkim adres zwrotny
$header = "From: $_POST[imie] ";
// funkcja mail() za pomoca której wiadomosc zostanie wyslana
@mail("przemo@o2.pl","Wiadomosc ze strony WWW","$message","$header")
or die('Nie udalo sie wyslac wiadomosci');
// wyswietlenie komunikatu w przypadku powodzenia
echo "Wiadomosc zostala wyslana poprawnie!";
}
// lub w przypadku nie wypelnienia formularza do konca
else echo "Wypelnij wszystkie pola formularza!";

Problem jest taki ze nie można wysłać maila - zawsze błąd wyskakuje. W PHP jestem szczerze mówiąc bardzo początkujący zatem proszę o wyrozumiałość :).

Z góry dziękuję za wszelką pomoc :)Przemysław B. edytował(a) ten post dnia 16.03.09 o godzinie 11:33

konto usunięte

Temat: Formularz kontaktu w PHP

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

Choć prawdę mówiąc wypadało by zastosować jakiś filtr, na email, tekst i imię.

elseif ( ( strlen($_POST['tresc']) > 10 )
AND ( strlen($_POST['imie'] ) > 3 )
AND ( !empty($_POST['email'] ) ) )

Tylko taki przykład, no i oczywiście RegExp na email, co by sprawdzało czy jest prawidłowy.
Przemysław B.

Przemysław B. Grafik komputerowy /
Specjalista ds.
Marketingu -
Follow...

Temat: Formularz kontaktu w PHP

Dominik a mógłbyś wkleić cały skrypt jak ma wyglądać ? byłbym bardzo wdzięczny... Jak wspomnialem php jest jeszcze dla mnie wciąż nie odkrytą tajemnicą... i z tego właśnie wynikają problemy.... ;p :)Przemysław B. edytował(a) ten post dnia 16.03.09 o godzinie 12:15

konto usunięte

Temat: Formularz kontaktu w PHP


Obrazek
Dominik Ł. edytował(a) ten post dnia 16.03.09 o godzinie 12:35
Przemysław B.

Przemysław B. Grafik komputerowy /
Specjalista ds.
Marketingu -
Follow...

Temat: Formularz kontaktu w PHP

Niestety :( teraz pola do wypełnienia tez się nie wyświetlają :(

Temat: Formularz kontaktu w PHP

Proponuję zrobić trochę inaczej.
Poprawność wypełnienia pól sprawdzaj PRZED wysłaniem, przy pomocy JavaScriptu. Dzięki temu niepotrzebnie nie obciążysz serwera. Taka funkcyjna sprawdzi m.in. ilość spisanych znaków (np. minimum 3), poprawność maila (jedna małpa, co najmniej jedna kropka po małpie - dla domeny) i jeśli wszystkie warunki będą spełnione, wyśle dopiero maila.
Nie wkleję teraz kawałka skryptu, bo mam gdzieś w domu, ale jeśli sam nie znajdziesz, to pisz na priva a podeślę Ci kawałek kodu.
Marcin Tarapata

Marcin Tarapata Analityk/Tester

Temat: Formularz kontaktu w PHP

A co będzie jak przeglądarka będzie miała wyłączoną obsługę JS?

Wiem, wiem... czepiam się. ;)

Temat: Formularz kontaktu w PHP

Jak będzie miała wyłączony JS, to ponad 50% stron się nie uruchomi :)
Już dawno nie widziałem strony, która nie miałaby JS :)
Maciej Kuś

Maciej Kuś właściciel, ibex.pl

Temat: Formularz kontaktu w PHP

:)
najlepiej zrobić walidację formularza za pomocą JS, a potem jeszcze raz już po stronie servera.
Przemysław B.

Przemysław B. Grafik komputerowy /
Specjalista ds.
Marketingu -
Follow...

Temat: Formularz kontaktu w PHP

A przełóżcie to na język php-laika ;p

konto usunięte

Temat: Formularz kontaktu w PHP

dokładnie - to że 50% stron się nie uruchomi, nie ma tu znaczenia. Musisz założyć, że ktoś JS może mieć wyłączone.

W związku z tym zaleca się sprawdzenie za pomocą JS && PHP.

Co do walidacji za pomocą JS, wystarczy, że w google wpiszesz 'js
walidacja formularzy' i będziesz miał pełno przykładów.

Jeśli chodzi o sprawdzanie po stronie serwera, podobne zapytanie do google ;) 'php walidacja formularzy'

walidacja po stronie php wygląda mniej wiecej tak:

if(kliknieto)wyslij)
{
if(adres email niepoprawny)
{
info o bledzie;
}
if(inne warunki nieprawdziwe)
{
info o bledzie
}
else
{
cała reszta funkcji która dotyczy wysyłania maili...
}
}


to tak w skrócie ;)

ps - naprawdę na tym forum przydałaby się możliwość wstawiania bbcode, bo kod skryptu wygląda marnie po zapisaniu ;)

ps2 - przepraszam, jednak bbcode jest ;)Paweł Nitka edytował(a) ten post dnia 16.03.09 o godzinie 15:04
Waldemar Hornatkiewicz

Waldemar Hornatkiewicz Front-End
Webdeveloper

Temat: Formularz kontaktu w PHP

Ładne odpowiedzi na temat ;) - przecież nie chodzi o walidację, tylko o to, że w ogóle nie działa.

Przede wszystkim - mail, a nie @mail oraz bez die(), to może zobaczysz komunikat błędu.

Po drugie - na czym uruchamiasz ten skrypt? Jeśli na localhoście, to najpewniej nie masz odpowiednio ustawionego php.ini, co by w ogóle móc maile wysyłać. Także na niektórych serwerach zdarza się, że mail() jest wyłączone.

konto usunięte

Temat: Formularz kontaktu w PHP

poza tym, jeśli wywołujesz już funkcję, to nie tak:

@mail("przemo@o2.pl","Wiadomosc ze strony WWW","$message","$header")

tylko tak:

@mail("przemo@o2.pl","Wiadomosc ze strony WWW",$message,$header)

- zmiennych nie ujmujesz w cudzysłowy, bo pójdzie tekst miedzy cudzysłowami, a nie wartość zmiennych
- @ przed wywołaniem funkcji powoduje, że ewentualne błędy przy wywołaniu funkcji nie będą wyświetlane
- die powoduje, że cały kod strony który jest po nim, nie wykona
się

do tego jeszcze kod:

$header = "From: $_POST[imie] ";

też może nie zadziałać w zależności od konfiguracji serwera. poprawnie powinno być:

$message = "Tresc wiadomosci:\n".$_POST['tresc']."\nWyslal: ".$_POST[imie]."\ne-mail: ".$_POST[email];
$header = "From: ".$_POST['imie'];
Paweł Nitka edytował(a) ten post dnia 17.03.09 o godzinie 14:19

konto usunięte

Temat: Formularz kontaktu w PHP

Przy okazji użycia f-cji mail() warto nadmienić, że należy dobrze zwalidować to co do niej trafia. Spam boty często próbują przemycić dodatkowe nagłówki i zrobić sobie z serwisu zombiaka do słania spamu.
Jarek W.

Jarek W. Software Engineer

Temat: Formularz kontaktu w PHP

Paweł Nitka:
poza tym, jeśli wywołujesz już funkcję, to nie tak:

@mail("przemo@o2.pl","Wiadomosc ze strony WWW","$message","$header")

tylko tak:

@mail("przemo@o2.pl","Wiadomosc ze strony WWW",$message,$header)

- zmiennych nie ujmujesz w cudzysłowy, bo pójdzie tekst miedzy cudzysłowami, a nie wartość zmiennych

Pierwsze słyszę.
Jarek W.

Jarek W. Software Engineer

Temat: Formularz kontaktu w PHP

Przemysław B.:
Witam,

...

Problem jest taki ze nie można wysłać maila - zawsze błąd wyskakuje. W PHP jestem szczerze mówiąc bardzo początkujący zatem proszę o wyrozumiałość :).

Mógłbyś pokazać jaki to błąd (wkleić go tutaj)?

konto usunięte

Temat: Formularz kontaktu w PHP

Jarek W.:

Pierwsze słyszę.

Niezbyt precyzyjnie sformułował wypowiedź, ale ma rację. Jak parametrem np. w miejscu $headers będzie tablica, to do funkcji trafi string "Array" a nie zmienna o strukturze tablicy.
Jarek W.

Jarek W. Software Engineer

Temat: Formularz kontaktu w PHP

Peter K.:
Jarek W.:

Pierwsze słyszę.

Niezbyt precyzyjnie sformułował wypowiedź, ale ma rację. Jak parametrem np. w miejscu $headers będzie tablica, to do funkcji trafi string "Array" a nie zmienna o strukturze tablicy.

A od kiedy to czwarty (lub też nawet trzeci) parametr funkcji mail() jest tablicą?Jarek W. edytował(a) ten post dnia 18.03.09 o godzinie 10:59

konto usunięte

Temat: Formularz kontaktu w PHP

Jarek W.:
A od kiedy to czwarty (lub też nawet trzeci) parametr funkcji mail() jest tablicą?

Nie wiem, bo nie używam ;) Ale nie chodziło mi o konkretnie tą f-cję, tylko ogólnie. Odniosłem wrażenie, że przedmówcy również.Peter K. edytował(a) ten post dnia 18.03.09 o godzinie 11:00
Jarek W.

Jarek W. Software Engineer

Temat: Formularz kontaktu w PHP

Peter K.:
Jarek W.:
A od kiedy to czwarty (lub też nawet trzeci) parametr funkcji mail() jest tablicą?

Nie wiem, bo nie używam ;) Ale nie chodziło mi o konkretnie tą f-cję, tylko ogólnie. Odniosłem wrażenie, że przedmówcy również.Peter K. edytował(a) ten post dnia 18.03.09 o godzinie 11:00

W ogólnym przypadku to faktycznie mogłaby być lipa. Tak czy owak, to rzeczywiście nie powinno się tak robić. Jeśli chcemy gdzieś przekazać jakąś zmienną, to ujmowanie jej w cudzysłowy jest bezsensem (pomijając już fakt, że jest też mniej wydajne). No ale myślę, że z tego większość sobie zdaje sprawę. ;-)

Jak coś, to na http://php.net/manual/en/function.mail.php można przeczytać sobie o funkcji mail() oraz o typach argumentów jakie przyjmuje.

Poza tym nadal nie dowiedziałem się od autora tego wątku jaki błąd mu wyskakuje...

Następna dyskusja:

Formularz na stronie




Wyślij zaproszenie do