joel-1
19.06.2010, 09:31:06
Witam!
Mam stronę internetową z formularzem PHP, i dowiedziałem się że można w takim formularzu dodatkowo dodać zabezpieczenie żeby podany e-mail miał poprawną formę. Bardzo proszę o pomoc.
Z góry dzięki za odpowiedź!
<?php
// sprawdzamy, czy zmienna $submit jest pusta
if (empty($_POST['submit'])) { // wyświetlamy formularz
<form method=\"post\">
<small>Treść wiadomości<b style=\"color: #FF6600\">*</b>:</small><br />
<textarea name=\"tresc\" class=\"form\" style=\"height: 100px;\"></textarea>
<br /><br />
<small>Imię i nazwisko<b style=\"color: #FF6600\">*</b>:</small><br />
<input type=\"text\" name=\"imie\" class=\"form2\">
<br /><br />
<small>Nazwa firmy:</small><br />
<input type=\"text\" name=\"firma\" class=\"form2\">
<br /><br />
<small>Adres e-mail<b style=\"color: #FF6600\">*</b>:</small><br />
<input type=\"text\" name=\"email\" class=\"form2\">
<br /><br />
<small>Numer telefonu:</small><br />
<input type=\"text\" name=\"telefon\" class=\"form2\">
<br /><br />
<small>Miejscowość:</small><br />
<input type=\"text\" name=\"miejscowosc\" class=\"form2\">
<br /><br />
<input type=\"submit\" name=\"submit\" value=\"Wyślij\" class=\"form3\" style=\"width: 50px;\">
<input type=\"reset\" value=\"Wyczyść\" class=\"form3\" style=\"width: 70px;\">
</td></form>
";
}
// sprawdzamy, czy zmienne przesłane z formularza nie są puste
elseif (!empty($_POST['tresc']) && !empty($_POST['imie']) && !empty($_POST['email']) ) { // jeżeli powyższy warunek jest spełniony tworzona jest wiadomość
// zmienna $message zawiera treść wiadomości
$message = "Treść wiadomości:\n$_POST[tresc]\nImie i Nazwisko: $_POST[imie]\nNazwa firmy: $_POST[firma]\nNumer Telefonu:\ $_POST[telefon]\nMiejscowość: $_POST[miejscowosc]\nAdres e-mail: $_POST[email]";
// zmienna $header zawiera przede wszystkim adres zwrotny
$header = "From: $_POST[imie] <$_POST[email]>";
// funkcja mail() za pomocą której wiadomość zostanie wysłana
@mail("podany e-mail","Wiadomosc ze strony WWW","$message","$header") or
die('Wystąpił błąd! Nie udało się wysłać wiadomości'); // wyświetlenie komunikatu w przypadku powodzenia
echo "<div style=\"color: #595959; text-align: left;\">Dziękujemy!<br /><br /> Wiadomość została wysłana poprawnie. <br /><br /> <a href=\"kontakt.php\" class=\"katalog_wybrane\">Kliknij, aby wysłać kolejną wiadomość</a>
</div>";
}
// lub w przypadku nie wypełnienia formularza do końca
<span style=\"color: #f25a11; text-align: center;\">Aby wiadomość mogła zostać wysłana, prosimy wypełnić wszystkie pola oznaczone gwiazdką.</span><br /><br /><br />
<form method=\"post\">
<small>Treść wiadomości<b style=\"color: #FF6600\">*</b>:</small><br />
<textarea name=\"tresc\" class=\"form\" style=\"height: 200px;\"></textarea>
<br /><br />
<small>Imię i nazwisko<b style=\"color: #FF6600\">*</b>:</small><br />
<input type=\"text\" name=\"imie\" class=\"form2\">
<br /><br />
<small>Nazwa firmy:</small><br />
<input type=\"text\" name=\"firma\" class=\"form2\">
<br /><br />
<small>Adres e-mail<b style=\"color: #FF6600\">*</b>:</small><br />
<input type=\"text\" name=\"email\" class=\"form2\">
<br /><br />
<small>Numer telefonu:</small><br />
<input type=\"text\" name=\"telefon\" class=\"form2\">
<br /><br />
<small>Miejscowość:</small><br />
<input type=\"text\" name=\"miejscowosc\" class=\"form2\">
<br /><br />
<input type=\"submit\" name=\"submit\" value=\"Wyślij\" class=\"form3\" style=\"width: 50px;\">
<input type=\"reset\" value=\"Wyczyść\" class=\"form3\" style=\"width: 70px\"></td></form>";?>
Wicepsik
19.06.2010, 09:33:12
joel-1
19.06.2010, 09:36:39
Ten kod to znalazłem już wcześniej tylko że nie wiem w którym miejscu w formularzu trzeba go umieścić.
Jakbyś mógł napisać to byłbym wdzięczny.
bastard13
19.06.2010, 09:46:53
To jest taka w miarę prosta walidacja, ale do większości celów wystarcza:
preg_match("/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,7})$/i",podany_email
);
Jeżeli chcesz coś lepszego, to tutaj masz naprawdę dobry artykuł:
http://wortal.php.pl/phppl/wortal/artykuly...su_e_mail_w_phpCo do walidacji za pomocą preg_match to nigdy nie jest idealna, ponieważ w rzeczywistości adres mail może być czasami naprawdę przekombinowany. Tutaj masz dokument nt. standardów:
http://www.faqs.org/rfcs/rfc2822.html
joel-1
19.06.2010, 09:50:19
A mógłbyś to wkleić do formularza tego co dałem, bo ja jestem zupełnie laik pod względem PHP.
bastard13
19.06.2010, 13:06:30
Preg_match zwraca 1 jeżeli zmienna pasuje do wyrażenia, a 0 jeżeli nie. Wrzuć to do if'a i masz coś takiego:
{ //instrukcje, które mają być wykonane jeżeli zmienna_do_sprawdzenia jest ok
}
else
echo 'Zmienna jest błędna';
erix
19.06.2010, 13:09:30
Cytat
Witam!
Mam stronę internetową z formularzem PHP, i dowiedziałem się że można w takim formularzu dodatkowo dodać zabezpieczenie żeby podany e-mail miał poprawną formę. Bardzo proszę o pomoc.
filter_var
joel-1
19.06.2010, 13:34:59
Możecie ten kod wkleić do tego formularza co ja dałem bo ja w ogóle nie wiem gdzie trzeba to wkleić.
Proszę
erix
19.06.2010, 15:05:11
A zajrzałeś do manuala na stronę funkcji, do której zalinkowałem?
joel-1
19.06.2010, 19:30:29
Tak, patrzyłem tylko że nic z niego nie rozumie. Dla Was wszystkich to pewnie jest to oczywiste jak to zrobić, więc bardzo jeszcze raz proszę aby ktoś ten kod PHP co ja dodałem skopiował i dodał w odpowiednim miejscu w nim tą funkcję aby sprawdzał e-mail.
bastard13
19.06.2010, 19:42:52
Jeżeli piszesz to dla siebie, to naprawdę warto się wysilić, żeby chociaż trochę zrozumieć zagadnienie. Jeśli piszesz to dla kogoś, to tym bardziej powinieneś się trochę z tym zaznajomić. Po trzecie, jeżeli to ty pisałeś kod, który wrzuciłeś na początku, to nie powinieneś mieć problemu z dodaniem if'a, ale żeby było ci prościej:
if($_POST) //jeżeli został wysłany post
{ if(//pola $_POST nie puste)
{ if(//adres mail dobry)
{ if(//wyślij mail i mail wysłany poprawnie)
{ echo 'wszystko poszło ok'; }
else //nie wysłano maila
}
else //zły adres
}
else //nie wypełnione pola
}
//jeżeli nie zostały wysłane dane bądź dane niepoprawne
//wyświetl formularz
joel-1
19.06.2010, 19:51:08
Ja tego nie pisałem tylko wynająłem informatyka, teraz chce właśnie takie coś dodać. Ale jeszcze raz proszę aby ktoś ten kod dodał na forum, ten mój z dodanym kodem który trzeba zamieścić, i żeby ten kod który trzeba dodać był uzupełniony do końca.
Jeszcze raz proszę!
bastard13
19.06.2010, 19:58:39
zamiast:
@mail("podany e-mail","Wiadomosc ze strony WWW","$message","$header") or
die('Wystąpił błąd! Nie udało się wysłać wiadomości');// wyświetlenie komunikatu w przypadku powodzenia
echo "<div style=\"color: #595959; text-align: left;\">Dziękujemy!<br /><br /> Wiadomość została wysłana poprawnie. <br /><br /> <a href=\"kontakt.php\" class=\"katalog_wybrane\">Kliknij, aby wysłać kolejną wiadomość</a>
</div>";
powinno być:
if(preg_match("/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,7})$/i","podany_email")) { @mail("podany e-mail","Wiadomosc ze strony WWW","$message","$header") or
die('Wystąpił błąd! Nie udało się wysłać wiadomości'); // wyświetlenie komunikatu w przypadku powodzenia
echo "<div style=\"color: #595959; text-align: left;\">Dziękujemy!<br /><br /> Wiadomość została wysłana poprawnie. <br /><br /> <a href=\"kontakt.php\" class=\"katalog_wybrane\">Kliknij, aby wysłać kolejną wiadomość</a>
</div>";
}
joel-1
19.06.2010, 20:54:30
Bardzo ci dziękuje. A wiesz jak zrobić tak żeby ten tekst "zła wiadomość" wyświetlał się nad formularzem, tak jak jest w przypadku informacji o nie uzupełnionych polach formularzu? Bo ta wiadomość wyłącza formularz i się pokazuje wtedy ten tekst.
bastard13
19.06.2010, 21:06:23
Tak, wiem. Tylko, że pomoc pomocą, a przerabianie skryptu to już "odrobinę" coś innego.
joel-1
19.06.2010, 21:07:39
Aha dobrze. I tak bardzo dziękuje za pomoc.
yevaud
19.06.2010, 21:11:01
moze po prostu dogadaj sie z bastardem na przerobienie skryptu za niewielka oplata i po krzyku
Cysiaczek
23.06.2010, 17:34:57
@joel-1
To jest forum dla programistów. Programista to ktoś, kto widząc problem, stara się znaleźć rozwiązanie. Czasami trwa to krótko, czasami długo. Jak już sobie programista nie radzi, to szuka pomocy w wyszukiwarce internetowej (np. w google), na forum w jego wyszukiwarce i w końcu - wśród innych programistów, którzy być może wcześniej podobny problem rozwiązali. Ty natomiast reprezentujesz ludzi, którzy zamiast zapłacić komuś za rozwiązanie problemu, chcą z forum zrobić darmowy helpdesk.
Zakładam jednak Twoją dobrą wolę, i wierze, że chcesz zostać programistą. Zacznij więc zachowywać się jak programista.
Pozdrawiam.
P.S Zamykam
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.