Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]zabezpieczenie przed wysłaniem pustego formularza
Forum PHP.pl > Forum > Przedszkole
AdinM
Chciałbym prosić o pomoc. Otóż chcę aby w polu adres email zrobić zabezpieczenie przed wysłaniem pustej wiadomości z formularza. Jestem zupełnie zielony w tej dziedzinie. Gdzie i co mam dopisać, aby wymusić na użytkowniku wprowadzenie co najmniej pola email przed wysłaniem wiadomości. Ot mój skrypt do wysłanie wiadomości.
CODE
<?php
$field_name = $_POST['cf-name'];
$field_email = $_POST['cf-email'];
$field_terminw = $_POST['cf-terminw'];
$field_poczotek = $_POST['cf-poczotek'];
$field_koniec = $_POST['cf-koniec'];
$field_liczba = $_POST['cf-liczba'];
$field_message = $_POST['cf-message'];
//Specify the message recipient:
$mail_to =';
$subject = 'Wiadomość wysłana ze strony internetowej ';
//The email content:
$body_message = 'Nadawca: '.$field_name."\n";
$body_message .= 'E-mail: '.$field_email."\n";
$body_message .= 'Termin wyjazdu: '.$field_terminw."\n";
$body_message .= 'Adres początkowy: '.$field_poczotek."\n";
$body_message .= 'Adres końcowy: '.$field_koniec."\n";
$body_message .= 'Liczba osób: '.$field_liczba."\n";
$body_message .= 'Dodatkowe informacje : '.$field_message;
$headers = 'Content-type: text/plain; charset=utf-8' . "\r\n";
$headers .= "From: " . $name . " <" . $email . ">" . "\r\n";
$headers .= "Reply-To: " . $email;
$mail_status = mail($mail_to, $subject, $body_message, $headers);
//Show a javascript message about the successful or unsuccessful sending a message
if ($mail_status) { ?>
<script language="javascript" type="text/javascript">
alert('Zapraszamy do kontaktu ponownie. ');
window.location = 'index.html';
</script>
<?php
}
else { ?>
<script language="javascript" type="text/javascript">
alert('Message failed.');
window.location = 'index.html';
</script>
<?php
}
?>
emillo91
http://forum.php.pl/index.php?showtopic=97853
Szukaj w google: puste pola formularza
gitbejbe
  1. if(!empty($_POST['cf-email'])){
  2. // wyślij email
  3. }
  4. else {
  5. echo 'podaj adres email';
  6. }

to najprostszy warunek i odpowiedź na Twoje pytanie w temacie. Poczytaj o walidacji danych przychodzących, bo raczej takie proste warunki nie spełnia Twoich oczekiwań. Do sprawdzania pola email, dodaj też jakiegoś regex'a, np: http://thisinterestsme.com/php-email-regex/
AdinM
Próbowałem tak:
CODE
<?php
$field_name = $_POST['cf-name'];
$field_email = $_POST['cf-email'];
$field_terminw = $_POST['cf-terminw'];
$field_poczotek = $_POST['cf-poczotek'];
$field_koniec = $_POST['cf-koniec'];
$field_liczba = $_POST['cf-liczba'];
$field_message = $_POST['cf-message'];
$user_IP = $_SERVER["REMOTE_ADDR"];
//Specify the message recipient:
$mail_to = '------@o2.pl';
$uwd = '--------pl';
$subject = 'Wiadomość wysłana ze strony internetowej -----';
//The email content:
$body_message = 'Nadawca: '.$field_name."\n";
$body_message .= 'E-mail: '.$field_email."\n";
$body_message .= 'Termin wyjazdu: '.$field_terminw."\n";
$body_message .= 'Adres początkowy: '.$field_poczotek."\n";
$body_message .= 'Adres końcowy: '.$field_koniec."\n";
$body_message .= 'Liczba osób: '.$field_liczba."\n";
$body_message .= 'Dodatkowe informacje : '.$field_message;

$headers = 'Content-type: text/plain; charset=utf-8' . "\r\n";
$headers .= "Wiadomość od: " . $field_name . " <" . $field_email . ">" . "\r\n";
$headers .= "Odpowiedz do: " . $field_email;
$mail_status = mail($mail_to, $uwd, $subject, $body_message, $headers);


function check_email($field_email)
{
$wyr = "^[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)*";
$wyr .= "@([a-zA-Z0-9_-]+)(\.[a-zA-Z0-9_-]+)*(\.[a-zA-Z]{2,4})$";
if(ereg($wyr, $field_email)){
return true;
}
else{
return false;
}
}

function sendmail($field_email)
{
if($field_email == "" || ){
print("Proszę wypełnić wszystkie pola formularza");
}
else if (mail($field_email)){
print("Wiadomość wysłano poprawnie");
}
else{
print("Nie udało się wysłać wiadomości");
}
}
if(isSet($_POST['cf-email']) {
if(!check_email($_POST['cf-email'])){
echo("Niepoprawny adres w polu email!");
}
else{
sendmail($_POST['cf-email']);
}
}
else{
echo("Proszę wypełnić conajmniej adres email!");
}
?>

ale nie wychodzi - taki komunikat otrzymuję: PHP Parse error: syntax error, unexpected ')' in source_file.php on line 43
dr_NO
No przeca masz tam informację o tym że jest nieoczekiwany znak ")".
W linii tej masz niepełny warunek: if($field_email == "" || ) po OR brakuje Ci warunku.
mrk9109
masz jeden wielki bałagan i fragment kodu funkcja mail która odpowiada za wysłanie maila masz tu:

  1. $mail_status = mail($mail_to, $uwd, $subject, $body_message, $headers);

i możesz zrobić np:

  1. if(!empty($_POST['cf-email'])){
  2. $mail_status = mail($mail_to, $uwd, $subject, $body_message, $headers);
  3.  
  4. }
  5. else {
  6. echo 'podaj adres email';
  7. }
LowiczakPL
Cytat(AdinM @ 4.05.2018, 22:21:23 ) *
... chcę aby w polu adres email zrobić zabezpieczenie przed wysłaniem pustej wiadomości z formularza...


HTML5 filtruje formularze natywnie więc nie musisz pisać żadnych zabezpieczeń wystarczy odpowiednio sformatować komórkę formularza

dla e-maila to type="email" i masz już włączoną walidację po stronie przeglądarek

inne typy to:

color - pozwala na wybór koloru;
date - służy do wyboru daty (rok, miesiąc, dzień); nie pozwala wybrać strefy czasowej;
datetime - tak samo jak ‘date’, z tym że pozwala wybrać także czas;
datetime-local - tak samo jak ‘datetime’, z tą różnicą, że powala na wybór strefy czasowej;
month - służy do wyboru daty z miesiącem;
time - pozwala na wybór tylko czasu (godzina, minuty, sekundy, części sekundy);
week - podobnie jak ‘month’ z tym, że wybiera się rok w wraz z numerem tygodnia w tym roku;
email - pozwala na wpisanie adresu email; obsługa -
number - służy do wprowadzania liczby; w połączeniu z atrybutami ‘min’, ‘max’ można ograniczyć zakres wprowadzanych liczb, natomiast z atrybutem ‘step’ pozwala na zdefiniowanie inkrementacji;
range - wyświetla “slider’ czyli suwak;
search - w zasadzie jest to samo co standardowy typ ‘text’ z tym, że może wyglądać inaczej na interfejsie użytkownika (zależy od przeglądarki);
tel - również wygląda jak ‘text’ jednak służy do wprowadzania numerów telefonów i tak powinien być używany (zamiast ‘text’);
url - podobnie, wygląda jak ‘text’ ale należy go używać jeśli oczekuje się wprowadzenia adresu URL;

dodatkowo możesz użyć atrybutu pattern - pozwala na wprowadzenie wyrażenia regularnego
atrybut required - wartość boolowska oznaczająca, że dana kontrolka jest wymagana; jeśli pole nie zostanie wypełnione, formularz nie będzie mógł być wysłany
markonix
Cytat(LowiczakPL @ 7.05.2018, 21:34:50 ) *
więc nie musisz pisać żadnych zabezpieczeń

thumbsdownsmileyanim.gif Bzdura.. Typy pól to bardziej zwiększenie userbility, aniżeli "zabezpieczenie"..
nospor
@markonix nie dosc ze bzdura to jeszcze przerazajace jest ze slowa te padaja z ust osob, ktore komercyjnie tworza oprogramowanie :/
@LowiczakPL powinienies teraz przejrzec wszystkie projekty ktore stworzyles i poprawic te wszystkie swoje "zabezpieczenia" zanim ktos twoim klientom zrobi "kuku". A potem jeszcze generalnie przejsc sie na jakis kurs z bezpieczenstwa w aplikacjach
LowiczakPL
Nie rozumiem o co Wam chodzi, przecież wyraźnie napisał "..zabezpieczenie przed wysłaniem pustej wiadomości z formularza." od tego jest HTML5 i nic innego nie jest potrzebne.
leonpro778
Cytat(LowiczakPL @ 8.05.2018, 20:26:14 ) *
Nie rozumiem o co Wam chodzi, przecież wyraźnie napisał "..zabezpieczenie przed wysłaniem pustej wiadomości z formularza." od tego jest HTML5 i nic innego nie jest potrzebne.

A słyszałeś o takim fajnym narzędziu jak ZBADAJ w Chrome? Albo INSPEKTOR w Firefox?
markonix
Cytat(LowiczakPL @ 8.05.2018, 20:26:14 ) *
Nie rozumiem o co Wam chodzi, przecież wyraźnie napisał "..zabezpieczenie przed wysłaniem pustej wiadomości z formularza." od tego jest HTML5 i nic innego nie jest potrzebne.

Oczywiście, że należy użyć tu required lub zewnętrznych bibliotek JS do dodatkowej walidacji formularza, ale i tak powinno się zawsze zaczynać od warstwy walidacji po stronie PHP.
Już nie mówiąc o bezpieczeństwie to chodzi też o zachowanie kompatybilności, walidacja HTML5 nie zadziała zawsze, są jeszcze stare przeglądarki gdzieniegdzie więc czasem po prostu ona zostanie zignorowana.
AdinM
W sumie to jeśli required uniemożliwi wysłanie to zupełnie mi wystarczy
Mój kod formularza wygląda tak
CODE
action="contact.php"
name="form-name" method="post">
<div class="bd-container-inner">
<div class="container-fluid">
<h2 class=" bd-textblock-27 bd-content-element">
<a name="kontakt"></a>napisz do nas
</h2>

<div class=" bd-input-5 form-group">
<label class="bd-form-label">Imię i Nazwisko</label>


<input type="text" class="bd-form-input"
placeholder="Imię i Nazwisko"
name="cf-name" >


</div>

<div class=" bd-input-8 form-group">
<label class="bd-form-label">Adres email</label>


<input type="email" class="bd-form-input"
placeholder="Adres email" required
name="cf-email" >


</div>

<div class=" bd-input-11 form-group">
<label class="bd-form-label">Termin wyjazdu</label>


<input type="date" class="bd-form-input"
name="cf-terminw" >


</div>

<div class=" bd-input-14 form-group">
<label class="bd-form-label">Adres początkowy podróży</label>


<input type="text" class="bd-form-input"
placeholder="Adres początkowy podróży"
name="cf-poczotek" >


</div>

<div class=" bd-input-17 form-group">
<label class="bd-form-label">Adres końcowy podróży</label>


<input type="text" class="bd-form-input"
placeholder="Adres końcowy podróży"
name="cf-koniec" >


</div>

<div class=" bd-input-20 form-group">
<label class="bd-form-label">Liczba osób</label>


<input type="number" class="bd-form-input"
placeholder="Liczba osób"
name="cf-liczba" >


</div>

<div class=" bd-textarea-2 form-group">
<label class="bd-form-label">Dodatkowe informacje</label>


<textarea class="bd-form-input"
name="cf-message"
placeholder="Dodatkowe informacje"></textarea>



po dodaniu tutaj required <input type="email" class="bd-form-input"
placeholder="Adres email"
name="cf-email" required >, nie ma żadnej różnicy - nadal przesyła pustą wiadomość.
nospor
Cytat
W sumie to jeśli required uniemożliwi wysłanie to zupełnie mi wystarczy
Juz to wyjasniono tutaj parokrotnie:
nie, nie uniemozliwi. Taki parametr to pic na wode fotomontaz. Taki bajer. Niezaleznie czy masz to required w html czy nie to normalne sprawdzanie w php masz miec obowiazkowo i na tym sie lepiej skup.
AdinM
Cytat(nospor @ 15.05.2018, 16:29:49 ) *
Juz to wyjasniono tutaj parokrotnie:
nie, nie uniemozliwi. Taki parametr to pic na wode fotomontaz. Taki bajer. Niezaleznie czy masz to required w html czy nie to normalne sprawdzanie w php masz miec obowiazkowo i na tym sie lepiej skup.

No ok skupiam się. Czy z tego coś będzie:
CODE
<?php
$field_name = $_POST['cf-name'];
$field_email = $_POST['cf-email'];
$field_terminw = $_POST['cf-terminw'];
$field_poczotek = $_POST['cf-poczotek'];
$field_koniec = $_POST['cf-koniec'];
$field_liczba = $_POST['cf-liczba'];
$field_message = $_POST['cf-message'];
$user_IP = $_SERVER["REMOTE_ADDR"];
//Specify the message recipient:
$mail_to = '';
$uwd = '';
$subject = 'Wiadomość wysłana ze strony internetowej angliabus.pl';
//The email content:
$body_message = 'Nadawca: '.$field_name."\n";
$body_message .= 'E-mail: '.$field_email."\n";
$body_message .= 'Termin wyjazdu: '.$field_terminw."\n";
$body_message .= 'Adres początkowy: '.$field_poczotek."\n";
$body_message .= 'Adres końcowy: '.$field_koniec."\n";
$body_message .= 'Liczba osób: '.$field_liczba."\n";
$body_message .= 'Dodatkowe informacje : '.$field_message;

$headers = 'Content-type: text/plain; charset=utf-8' . "\r\n";
$headers .= "Wiadomość od: " . $field_name . " <" . $field_email . ">" . "\r\n";
$headers .= "Odpowiedz do: " . $field_email;
$mail_status = mail($mail_to, $uwd, $subject, $body_message, $headers);


function check_email($field_email)
{
$wyr = "^[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)*";
$wyr .= "@([a-zA-Z0-9_-]+)(\.[a-zA-Z0-9_-]+)*(\.[a-zA-Z]{2,4})$";
if(ereg($wyr, $field_email)){
return true;
}
else{
return false;
}
}

function sendmail($field_email)
{
if($field_email == ""){
print("Proszę wypełnić wszystkie pola formularza");
}
else if (mail($field_email)){
print("Wiadomość wysłano poprawnie");
}
else{
print("Nie udało się wysłać wiadomości");
}
}
if(isSet($_POST['cf-email']) {
if(!check_email($_POST['cf-email'])){
echo("Niepoprawny adres w polu email!");
}
else{
sendmail($_POST['cf-email']);
}
}
else{
echo("Proszę wypełnić conajmniej adres email!");
}
?>


ale taki komunikat - Parse error: syntax error, unexpected '{' in /home/amelind5/domains/------.pl/public_html/contactmoj.php on line 53. Jeszcze raz proszę o pomoc.
Neutral
Zamiast tego:

  1. if(isSet($_POST['cf-email']) { //...


, powinno być:
  1. if(isset($_POST['cf-email'])) { //...
Pyton_000
Cytat(Neutral @ 15.05.2018, 17:56:26 ) *
Zamiast tego:

  1. if(isSet($_POST['cf-email']) { //...


, powinno być:
  1. if(isset($_POST['cf-email'])) { //...


Nie masz się czego czepiać? funkcje w PHP są case insensitive
AdinM
Cytat(Neutral @ 15.05.2018, 17:56:26 ) *
Zamiast tego:

  1. if(isSet($_POST['cf-email']) { //...


, powinno być:
  1. if(isset($_POST['cf-email'])) { //...

Po zaproponowanych zmianach otrzymuję takie komunikaty:
Bez wprowadzenia adresu email w formularzu - Deprecated: Function ereg() is deprecated in /home/amelind5/domains//public_html/contactmoj.php on line 33 Niepoprawny adres w polu email!
a po wprowadzeniu adresu email Deprecated: Function ereg() is deprecated in /home/amelind5/domains/-----/public_html/contactmoj.php on line 33 Warning: mail() expects at least 3 parameters, 1 given in /home/amelind5/domains/-----/public_html/contactmoj.php on line 46 Nie udało się wysłać wiadomości
W obu przypadkach otrzymuję wiadomości na podaną pocztę czyli formularz nie blokuje wysłania; na email otrzymuję takie wiadomości bez polskich liter - - Adres poczÄ…tkowy:
Adres końcowy:
Liczba osĂłb:
Dodatkowe informacje :

Wiadomość wysłana ze strony internetowej
Neutral
Cytat
Nie masz się czego czepiać? funkcje w PHP są case insensitive

Wiem o tym, chodziło o brak jednego nawiasu.
Pyton_000
A sorka. nawiasu nie zauważyłem smile.gif Czas chyba zmniejszyć dawkowanie komputera.
AdinM
Skrypt już nie wysyła pustych wiadomości ale za to przesyła wiadomości bez polskich liter. Czy może ktoś zerknąć dlaczego tak się dzieje. Co należy zrobić.
Neutral
Dodaj do tego JSON'a to:

  1. $x = json_encode($query->fetchAll(), JSON_UNESCAPED_UNICODE);


Link1.
AdinM
Cytat(Neutral @ 17.05.2018, 23:09:39 ) *
Dodaj do tego JSON'a to:

  1. $x = json_encode($query->fetchAll(), JSON_UNESCAPED_UNICODE);


Link1.

W które miejsce. Po dodaniu na początek nie działa.
Neutral
To był przykład. Spróbuj tak:

  1.  
  2. if ($mailResult === true) {
  3. echo json_encode([
  4. 'message' => $config['messages']['mailSuccess']
  5. ],JSON_UNESCAPED_UNICODE);
  6. } else {
  7. http_response_code(500);
  8. echo json_encode([
  9. 'message' => $config['messages']['mailFailed']
  10. ],JSON_UNESCAPED_UNICODE);
  11. }
  12.  
viking
Szablon mail jest źle wysyłany (wcześniej były problemy z nieprawidłowym kodowaniem znaków na stronie - były zapisane jako win-1252 zamiast utf-8). Jak ma pomóc w temacie dodanie JSON_UNESCAPED_UNICODE do odpowiedzi która wyświetla się prawidłowo?
AdinM
problem rozwiązany.
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.