Walidacja danych formularza oraz wysyłanie maila z firmowej strony. Prośba o ocenę kodu.

0

Witam wszystkich. Stworzyłem dla kolegi formularz który umożliwia wysyłanie e-maila na jego skrzynkę pocztową.

Najpierw sprawdzam za pomocą js czy wprowadzone dane są poprawne i czy podano wszystko co trzeba. W momencie uruchomienia strony formularza skrypt php losuje jedno z antyspamowych pytań kontrolnych i przechowuje odpowiedź w zmiennych sesji. Po sprawdzeniu JS'em i wysłaniu za pomocą metody POST do osobnego pliku sprawdzam czy udzielono poprawnej odpowiedzi na pytanie kontrolne oraz czy wypełnienie formularza zajęło co najmniej 20 sekund.

Formularz znajduje się na stronie http://sh194765.website.pl/kontakt.php

Kod walidacji JS


 $("#contact-form").submit(function()
	{
	    var Email = $("#user-e-mail-in-message").val();  //pobieram wartości z pól formularza
		var TelephoneNumber = $("#user-telephone").val();
		var Message = $("#message").val();
		var ErrorMessage = "Wykryto następujące problemy : ";
		var MessageSubject = $("#subject").val();
		var Answear = $("#answear").val();
		
		function ValidateEmail(Email)
        {
		   if(Email.indexOf("@") < 0) //każdy adres e-mail ma @ więc na początek to sprawdzam
		      return false;
			  
		   var EmailPart = Email.split("@"); //adres musi mieć dwa człony, przed małpą i po
		   if(EmailPart.length < 2)
		      return false;
			  
		   if(EmailPart[1].indexOf(".") < 0)  //kropka też musi być
		      return false;
			  
			 return true;
		}

        function ValidateTelephoneNumber(Number)
        {
		 
		 if(Number.indexOf("+") > 0) //pozwalamy na plusik na początku, ale nie więcej
		    return false;
		
		if(Number.length < 7 )  //numer nie może być za krótki, wiadomo
		  return false;
		
		 return !isNaN(Number.replace(/[ -]/g,'')); //dopuszczam jedynie spacje i myślniki
		}		
		
		
		
		   if((Email === "")&&(TelephoneNumber === ""))
		     ErrorMessage += "Należy podać numer telefonu albo adres e-mail. "; //jakieś namiary trzeba podać więc sprawdzamy czy podano albo jedno albo drugie
		  
		   if(Email != "")   //reszta raczej oczywista
		   {
		     if(!ValidateEmail(Email))
		        ErrorMessage += "Niepoprawny adres e-mail, ";  
		   }
		   
		   if(TelephoneNumber != "")
		   {
		     if(!ValidateTelephoneNumber(TelephoneNumber))
			    ErrorMessage += "Niepoprawny numer telefonu - można używać jedynie cyfr, 1 znaku + na początku , - oraz spacji. Numer musi mieć co najmniej 7 cyfr. Można nie podawać numeru jeżeli podano e-mail. ";
		   }
		   
		   
		   if(MessageSubject.length > 40)
		     ErrorMessage += "Temat wiadomości jest za długi. Max 40 znaków."
		   
		   if(Answear == "")
		   {
			 ErrorMessage += "Nie wprowadzono żadnej odpowiedzi na pytanie kontrolne";
		   }
		   
		   if(Message === "")
		   {
		    ErrorMessage += "Wiadomość nie może być pusta...:/"
		   }
		
		  if(ErrorMessage === "Wykryto następujące problemy : ")
		     return true
		 else
		 {
		   alert(ErrorMessage);
		   return false;
		 }
	});

W momencie gdy otwierana jest strona formularza(kontakt.php) odpalam skrypt php


  $Questions = array(                                               //pytania kontrolne
    "Jak nazywa się drugi miesiąc roku",
	"Ile jest trzy razy cztery",
	"Jak nazywa się stolica Polski",
	//itd w sumie pytań jest 30 specjalnie nie pokazałem wszystkich
	
  );
  
  $Answears = array(   //odpowiedzi na pytania kontrolne
  "luty",
  "12",
  "warszawa",
 //itd
  );
  
  $QuestionIndex = rand(0,29);               //przypisanie odpowiedzi do pytania kontrolnego do zmiennych sesji jak również czasu gdy formularz powstał
  $Question = $Questions[$QuestionIndex];
  session_start();
  
  $_SESSION['form-start-time'] = time();
  $_SESSION['answear'] = $Answears[$QuestionIndex];

Z kolei po wysłaniu wiadomości poprzez POST do innego pliku, następuje wysłanie maila gdy wszystko gra.

$Raport = "";
   $Info = "";
   $CustomerData = "";
   $Message="";
   $Subject = "";
   
   if(isset($_POST['message']) && isset($_POST['anti-spam-answear']) && (isset($_POST['user-telephone-number']) || isset($_POST['user-e-mail-in-message'])))  //sprawdzam czy podano wszystkie dane 
   {
	  session_start();
	  
	  $CorrectAnswear = $_SESSION['answear'];  //pobieram prawidłową odpowiedź
	  $UserAnswear = strtolower($_POST['anti-spam-answear']); //zamieniam wszystko na małe literki
	  $TimePassed = time() - $_SESSION['form-start-time'];  //obliczam ile czasu minęło od momentu otworzenia formularza
	  $_SESSION['form-start-time'] = time();   //czyszczę zmienne sesji 
	  $_SESSION['answear'] = "xA789xxzznM";
	  
	  if(($CorrectAnswear == $UserAnswear)&&($TimePassed > 20))  //jeżeli odpowiedź jest prawidłowa to wysyłamy
	  {
      	  
	  //przygotowanie do wysłania
				 if(isset($_POST['user-telephone-number']))
				  $CustomerData = "Numer telefonu : ".$_POST['user-telephone-number'].' ';
		 
				if(isset($_POST['user-telephone-number']))
				   $CustomerData .= "EMail : ".$_POST['user-e-mail-in-message'];
				
				$Message = wordwrap($_POST['message'],70,PHP_EOL);
				$Message .= PHP_EOL.PHP_EOL.$CustomerData;
				$Subject = $_POST['message-subject']; 
				
						if(mail("jakiś[email protected]",$Subject,$Message)) //jeśli wszystko git to informujemy o tym
						{
						   $Raport = "Wiadomość wysłana"; 
						   $Info = "Dziękujemy za wysłanie wiadomości. W miarę możliwości postaramy się odpowiedzieć jak najszybciej wykorzystując podane przez Pana/Panią namiary. Aby wysłać kolejną wiadomość należy odświeżyć stronę formularza.";
						}
						else  //gdy coś poszło nie tak również informujemy
						{
						   $Raport = "Błąd podczas wysyłania";
						   $Info = "Wprowadzone dane są poprawne, jednak coś poszło nie tak podczas wysyłania wiadomości. Prosimy poczekać i spróbować ponownie za jakiś czas.";
						}	
						
	  }
	  else
	  {
	   	$Raport = "Zatrzymano wysyłanie wiadomości";  //ktoś podał błędną odpowiedź albo wysyła za szybko
        $Info = "Filtr antyspamowy zatrzymał wysyłanie z co najmniej jednego powodu. Odpowiedź na pytanie kontrolne była niepoprawna lub też wiadomość została wysłana szybciej niż 20 sekund po pojawieniu się formularza. Aby wysłać drugą wiadomość należy odświeżyć stronę formularza. Niestety takie zabezpieczenia są konieczne ze względu na roboty grasujące w sieci rozsyłające spam. Za utrudnienia przepraszamy.";		
	  }
				          			   
   }
   else 
   {
	   header('Location: index.html');
	   exit;
   }

Będę bardzo wdzięczny za każdą nawet najbardziej surową krytykę, ale pod warunkiem, że będzie konstruktywna. Zgłaszając zastrzeżenia proszę o szczegółowe uzasadnienie zgłoszonych wątpliwości. Bardzo chętnie poczytam opinie o całości strony chociaż póki co działa tylko "kontakt" i "firma".

0

Zmienne - masz literówki (CorrectAnswear), używasz polskich nazw, nie uzywasz camelCase'a.
Zamiast funkcji mail użyj jakiejś biblioteki.
Nie używaj tylu komentarzy. W paru miejscach masz nadmiarowe nawiasy.
Nie widzę tam też żadnej funkcji w phpie (w js'ie jeszcze jakoś to ujdzie - chociaż js'owi nie przyglądałem się wcale).

Dlaczego takie uwagi - bo to najlepsza pora byś wyrobił dobre nawyki.

Ok- :edit - w js'ie jak i w phpie nie stosujesz klamerek w przypadku jednolinijkowych instrukcji po ifach(to się kiedyś zemści). Czy walidację masz także po stronie php'a? Bo jak wyłączę js'a albo spreparuje żądanie to wystarczy że jako numer telefonu podam dwie spacje i w phpie to przejdzie (używasz issset, a byś mógł pomyśleć nad np trim i !empty())

Poza tym ile razy próbowałem wypełnić ten formularz- zawsze dostawałem info że Odpowiedź na pytanie kontrolne była niepoprawna lub też wiadomość została wysłana szybciej niż 20 sekund po pojawieniu się formularza. co jest nieprawdą bo podawałem poprawne dane.

0

1.Dlaczego lepiej jest użyć jakiejś biblioteki zamiast funkcji mail?
2. Czy to, że w php'ie nie ma funkcji to błąd? Jeśli tak to dlaczego?
3. Dlaczego niestosowanie klamerek w przypadku jednolinijkowych instrukcji warunkowych jest niedobre?
4. Myślisz, że należałoby w php'ie sprawdzać dane w taki sam sposób jak w JS'ie? Tzn. przetłumaczyć kod JS na php?
5. Myślisz, że problemy z odpowiedziami mogłyby być spowodowane różnicą w kodowaniu znaków? Ja wpisuję odpowiedzi i działa.

1
  1. Ponieważ są już gotowe biblioteki i jeśli na poważnie będziesz zamierzał wysyłać maile (np z załącznikami itp itd) to będziesz wynajdował koło od nowa - phpmailer jest dosyć prosty w użyciu
  2. To nie jest błąd, ale bardzo zła praktyka. Nawet jeśli piszesz krótki kod, lepiej go zawierać w funkcjach, dzięki temu unikniesz duplikacji kodu, szybciej znajdziesz błąd i będzie Ci łatwiej utrzymać porzadek w kodzie. Z racji tego że chyba dopiero zaczynasz przygodę (to jest bardzo dobre określenie) z php'em - nie piszę celowo o obiektowości
  3. Jest niedobre ponieważ po jakimś czasie zechcesz coś dodać i będziesz musiał pamiętać o tym aby te klamerki dodać. Jeśli nauczysz się pisać klamerki z przyzwyczajenia od razu - nawet w przypadku jednej instrukcji, nie popełnisz zbędnych błędów. Poza tym mając od razu klamerki, łatwiej Ci będzie coś dodać, usunąć. Dodatkowo - jeśli np w procesie programowania zakomentujesz kod wewnątrz klamerek - wyłączysz tylko działanie tego co jest wewnątrz - w przypadku zakomentowania tej linijki bez klamerek - do ifa będzie brana kolejna linijka(a to źródło potencjalnych błędów)
  4. Bo po pierwsze - użytkownik może mieć wyłączony JS, po drugie można wysyłać żądania np curl'em - wtedy na serwer trafią niepoprawne dane i będziesz miał syf np w bazie. Tak - to jak walidujesz w js'ie należy powtórzyć w php'ie. W Twoim przypadku zdublujesz logikę (js/php) ale wiedz ze można to zrobić na wiele innych sposobów. Możesz też troszkę olać te sprawdzanie w js'ie maila - tylko nadać dla inputa typ "email" czy jakoś tak - sprawdź typy inputów w html5 - na pewno znajdziesz.
  5. Nie sprawdzałem co może być przyczyną, ale np pytanie ile dni ma tydzień jest bardzo źle skonstruowane, bo nie ma informacji czy mam wpisać 7 czy siedem, tak samo 3x4 - 12 czy dwanaście?
0
  1. No o.k, ale zakładając, że nie chcę rozbudowanej funkcjonalności(bez załączników) to czy jest sens dorzucać całą bibliotekę? No bo w sumie wyszły mi tylko 4 linijki. Podejrzewam, że biblioteka potrzebowałaby co najmniej dwóch linijek. Także czy w moim przypadku ma to sens?

Hmm...Nie do końca to czuję.

  1. A mógłbyś podać jakieś przykłady na to? Np. kod w funkcjach vs kod bez funkcji? No właśnie zastanawiam się w jaki sposób to miałoby mi pomóc utrzymać porządek lub też szybciej znaleźć błąd. Duplikacja no o.k to rozumiem, chociaż taki mały skrypcik to małe szanse abym coś tutaj zduplikował. Jestem raczej początkujący w php ale temat obiektowości jest mi znany, także jeżeli chciałbyś coś o tym napisać to proszę bardzo.

Ponadto. Jeszcze kiedy uczyłem się o funkcjach w C++ to zapamiętałem, że

a) funkcje stosujemy wtedy gdy trzeba wykonać jakąś operację lub coś policzyć kilka razy w tej samej aplikacji/skrypcie - ktoś mógłby powiedzieć, że używam funkcji niezgodnie z ich przeznaczeniem.

b)wywołanie funkcji kosztuje czas. Trzeba skoczyć do funkcji, wrzucić na stos adres powrotu itd. No chyba, że w php jest inaczej. Co o tym sądzisz?

Co do reszty bardzo dziękuję, że zechciałeś poświęcić swój czas i podzielić się ze mną wiedzą i doświadczeniem. :)

1
  1. Oczywiście wiele rzeczy zależy od skali projektu jaki tworzysz oraz tego ile czasu będziesz miał na jego przyszła ew. rozbudowę. A dlaczego nawet pomimo tak prostego kodu na 4 linijki zalecam używanie chociażby phpmailer'a
  • Będziesz w łatwy i szybki sposób mógł tworzyć maile zarówno w formacie html i txt.
  • Biblioteka umożliwi Ci poprawną wysyłkę maili w momencie gdy wrzucisz swój projekt na jakiś serwer (nie wliczam do tego lokalnego środowiska, bo tam można wszystko). A nie każdy hosting umożliwia wysyłkę za pomocą funkcji mail.
  • Nauczysz się teraz obsługi phpmailera i będziesz z tego korzystał pewnie przez kilka kolejnych lat, w razie potrzeby dorobisz swój plugin jakiś czy jakoś rozszerzysz tą klasę wg swoich potrzeb
  • To będzie pierwszy krok do tego by wykorzystywać gotowe biblioteki - co też na pewno zaważy na ocenie Ciebie przez przyszłego pracodawcę (biblioteki, frameworki itp itd), bo rzadko który pracodawca będzie potrzebował "czystego phpowca"
  1. Załóżmy że mam zrobić jedną stronę w której mam wyświetlić tabelkę htmlowa - Twoje podejscie wygląda tak że robisz echo i lecisz z koksem, używasz jakichś tam zmiennych itp itd. Działa? - działa.Ok. Nie ma potrzeby robienia funkcji. A teraz powody dla których warto:
  • Ale jeśli zrobiłbyś funkcję - która jako parametr przyjmuje tablice z danymi - to wewnatrz funkcji całkowicie przetworzysz dane na swoje własne potrzeby.
  • Mając funkcję - nagle zechcesz dorobić drugą tabelkę i już masz zysk w postaci niezduplikowanego kodu tabelki.
  • Masz funkcję i wygenerowałeś dwie tabelki? Nagle chcesz zmienić sposób wyświetlania każdej z nich? Robisz to w jednym miejscu i masz spokój. Funkcję łatwiej przeanalizować niż cały kod i to jeszcze z duplikatami.
  • Masz funkcję i chcesz mieć dwie różne tabele - jako dane wejsciowe dajesz np elementy które mają być wyświetlone oraz typ - wg której jedna tabelka będzie wyświetlana inaczej niż druga. Oprócz typu z czasem dodasz 3-ci parametr który będzie zawierał inf. czy tabelka ma zawierać nagłówek czy nie.
  • Z czasem gdy zauważysz ze funkcja ma zbyt dużo parametrów - pomyślisz "ooo wiem... napiszę sobie generator tabel, taki profesjonalniejszy" i zaczniesz być możę korzystać z zalet OOP
  • Ja wiem że zawsze warto dbać o zasoby co pokazuje poniższy obrazek :) oszczedzaj ram.jpg ale akurat tworzenie funkcji to nie jest dobra metoda optymalizacyjna - zwłaszcza gdy jest się początkującym. Tak samo nazwy zmiennych - nie ma się co oszczędzać i pisać $x $y albp $fbs- śmiało trzeba pisać $lengthX $lenghtY oraz $fatBoySlim = "Norman Cook" - Kod ma być czytelny dla programisty - komputer go zrozumie nawet jeśli zastosujesz obfuskację

Narzut czasowy będzie Twoim najmniejszym zmartwieniem - i powiem że odkąd programuje - ani razu nie zdarzyło mi się żeby musiał rezygnować z funkcji/metody - na rzecz szybkości. Optymalizacja polega raczej na lepszej organizacji kodu i wykorzystaniu go niż na scalaniu go w jedną całość bez funkcji.

A to co czytałeś to chyba raczej dość stare było - zamykanie kodu w funkcjach - najlepiej zgodnych z SRP i szeregiem innych zasad - to miód na oczy Twojego przyszłego reviewera. Nawet jeśli w danym projekcie nie ma sensu stosować funkcji do prostej rzeczy, to i tak jej zastosowanie przyda się - bo może za miesiąc będziesz potrzebował tej funkcji z innym projekcie. Może kiedyś stworzysz sobie jakieś utilsy albo inną bibliotekę z narzędziami.
A co do skoków/stosów itp - php ma tak samo jak inne języki, nie jest jakimś kosmicznym wymysłem.

Nie ma za co :)

0

O.K przekonałeś mnie zaraz poprawię :)

edit: Zastanawia mnie tylko czemu miałbyś użyć trim?

edit2:Dobra już wiem

0

Dobra. Poprawiłem ten kod wedle wskazówek. Gdybyś się komuś chciało ocenić moje wypociny to będę wdzięczny.
Kod:


require "PHPMailer/PHPMailerAutoload.php";

 function SendEMailByPHPMailer($Subject, $Message)
 {
	 
    $mail = new PHPMailer(); 
    $mail->IsSMTP(); 
	$mail->SMTPAuth = true; 
	$mail->SMTPSecure = 'tls'; 
	$mail->Host = "smtp.gmail.com";
	$mail->Port = 587; 
	$mail->IsHTML(true);
	$mail->CharSet = 'UTF-8';
	$mail->Username = "[email protected]";
	$mail->Password = "haslo";
	$mail->SetFrom("[email protected]","Użytkownik strony");
	$mail->Subject = $Subject;
	$mail->Body = $Message;
	$mail->AddAddress("[email protected]");

  
    if(!$mail->send())
    {
	   return false;
    }
    else
   {
	 return true;  
   }
 }

 function ValidateEMailAdress($EMail)
 {
   
   $Length = strlen($EMail);
   $MonkeyPosition = strpos($EMail,"@");
   $MonkeyOccurenceNumber = substr_count($EMail,"@");
   
        if(($Length < 8)||($Length > 40))   //check the length of an adress
        {
	      return false;
        }
	   
	//@ symbol must occur once and must be more or less in the middle   
	   
       if(($MonkeyPosition === false) ||($MonkeyPosition > $Length - 3)||($MonkeyPosition < 2)||($MonkeyOccurenceNumber > 1))  
       {
	     return false;  
       }
	 
   $DomainPart = substr($EMail, $MonkeyPosition + 1, $Length - $MonkeyPosition - 1); //now we're gonna get the domain part after @ symbol
   $DomainPartLength = strlen($DomainPart);
   $DotPosition = strpos($DomainPart,"."); 
	 
      if(($DotPosition === false) || ($DotPosition < 2) || ($DotPosition  > $DomainPartLength - 3 ))
      {
	    return false;
      }
   
      return true;
 } 
 
 
 
 function ValidatePhoneNumber($PhoneNumber)
 {
   $PlusPosition = strpos($PhoneNumber,"+");
	
	    if(($PlusPosition != false)&&($PlusPosition > 0))  //+ can be only at the beginning of a string
		{
		  return false;
		}
   
   $CharactersToRemove = array(" ","-","+");    // spaces and - are allowed
   $PhoneNumber = str_replace($CharactersToRemove,"",$PhoneNumber);
   $PhoneNumberLength = strlen($PhoneNumber);
   
        if(($PhoneNumberLength < 7) || ($PhoneNumberLength > 15))  //phone number cannot be to short or to long
        {
		    return false;
	    }

        if(!is_numeric($PhoneNumber))
        {
		  return false;
		}

   return true;		
  
 }
 
 
 
 function CheckPresenceOfRequiredData()
 {
    $RequiredData = array();
	$PresenceOfRequiredUserInformation = false;
	$Trimmed;
	
	   if(!empty($_POST['message']))
	   {
		   $Trimmed = trim($_POST['message']);
		 
		   if($Trimmed != false)
		   {
		    $RequiredData['message'] = $Trimmed."<br/><br/>";
		   }
	   }
	   else
	   {
		  return false;
	   }
	   
	   
	   if(!empty($_POST['anti-spam-answear']))
	   {
		   $Trimmed = trim($_POST['anti-spam-answear']);
		 
		   if($Trimmed != false)
		   {
		    $RequiredData['anti-spam-answear'] = strtolower(mb_convert_encoding($Trimmed,"UTF-8"));
		   }
	   }
	   else
	   {
		  return false;
	   }
	   
	   if(!empty($_POST['user-telephone-number']))
	   {
		   $Trimmed = trim($_POST['user-telephone-number']);
		 
		   if(($Trimmed != false)&&(ValidatePhoneNumber($Trimmed)))
		   {
		    $RequiredData['message'] .= "Numer telefonu : ".$Trimmed."<br/>";
			$PresenceOfRequiredUserInformation = true;
		   }
	   }
	   
	   if(!empty($_POST['user-e-mail-in-message']))
	   {
		   $Trimmed = trim($_POST['user-e-mail-in-message']);
		 
		   if(($Trimmed != false)&&(ValidateEMailAdress($Trimmed)))
		   {
		    $RequiredData['message'] .= 'Adres email : <a href ="mailto:'.$Trimmed.'">'.$Trimmed.'</a>';
			$PresenceOfRequiredUserInformation = true;
		   }
	   }
	   
	   
	   if($PresenceOfRequiredUserInformation == false)
       {
		 return false;
	   }
	   
	    if(!empty($_POST['message-subject']))
	   {
		   $Trimmed = trim($_POST['message-subject']);
		 
		   if($Trimmed != false)
		   {
		    $RequiredData['message-subject'] = $Trimmed;
		   }
		   else
	      {
		    $RequiredData['message-subject'] = "brak tematu";
	      }
	   }
	   else
	   {
		 $RequiredData['message-subject'] = "brak tematu";
	   }
    
      return $RequiredData;	
 }
 
function SpamFilter($Answear)
{
 	session_start();
	  
	  $CorrectAnswear = mb_convert_encoding($_SESSION['answear'],"UTF-8");  
	  $TimePassed = time() - $_SESSION['form-start-time'];  
	  
	  $_SESSION['form-start-time'] = time();   
	  $_SESSION['answear'] = "xA789xxzznM";
	  
	  if(($Answear == $CorrectAnswear)&&($TimePassed > 20))
	  {
		  return true;
	  }
	  else
	  {
		  return false;
	  }
}
 
   
   $Raport = "";
   $Info = "";
   $ValidationData = CheckPresenceOfRequiredData();
   $Subject = $ValidationData['message-subject'];
   $Message = $ValidationData['message'];
   $UserAnswear = $ValidationData['anti-spam-answear'];
   
   
   if($ValidationData != false)   
   {
	  
	  if(SpamFilter($UserAnswear))  
	  {
      	  
						if(SendEMailByPHPMailer($Subject,$Message)) 
						{
						   $Raport = "Wiadomość wysłana"; 
						   $Info = "Dziękujemy za wysłanie wiadomości. W miarę możliwości postaramy się odpowiedzieć jak najszybciej wykorzystując podane przez Pana/Panią namiary.";
						}
						else 
						{
						   $Raport = "Błąd podczas wysyłania";
						   $Info = "Wprowadzone dane są poprawne, jednak coś poszło nie tak podczas wysyłania wiadomości. Prosimy poczekać i spróbować ponownie za jakiś czas.";
						}	
						
	  }
	  else
	  {
	   	$Raport = "Zatrzymano wysyłanie wiadomości";
        $Info = "Filtr antyspamowy zatrzymał wysyłanie z co najmniej jednego powodu. Odpowiedź na pytanie kontrolne była niepoprawna lub też wiadomość została wysłana szybciej niż 20 sekund po pojawieniu się formularza. Niestety takie zabezpieczenia są konieczne ze względu na roboty grasujące w sieci rozsyłające spam. Za utrudnienia przepraszamy.";		
	  }
				          			   
   }
   else 
   {
	   header('Location: index.html');
	   exit;
   }


0

a ja w przypadku prostych contact form stosuję normalny PHP (z zachowaniem bezpieczeństwa php injection itp.), w przypadku PHPMailer z SMTP musisz podawać login i hasło maila (niby można szyfrować i trzymać w innym pliku, tylko po co), co w sumie jest niepotrzebne dla prostego kontaktu

0

No ja też na początku wyszedłem z takiego założenia właśnie. Wątek ten przerabiałem z poprzednim rozmówcą i doszliśmy do wniosku, że dla "wzbogacenia" portfolio lepiej użyć PHPMailera, no i " A nie każdy hosting umożliwia wysyłkę za pomocą funkcji mail." - bynajmniej tak twierdzi kolega.

Czy poza tym ktoś zauważył jakieś nieprawidłowości?

1
  1. Nie stosujesz camelCase'a
  2. Funkcja walidacji emaila jest przekombinowana (wynajdujesz koło od nowa)
  3. Ciągle masz literówki (answear, adress, raport)
  4. Miejscami dajesz warunki typu if(true) {return true;} else {return false;}
0
  1. Poczytałem co nieco na ten temat i wychodzi na to, że zdania są podzielone. CamelCase vs underscore. Chociaż przyznaję, że podkreślenia są jednak bardziej czytelne.
    Dla zainteresowanych polecam ten artykuł

2.Może trochę tak, ale wyczytałem, że filter_var ma jakieś mankamenty(nie pamiętam teraz dokładnie jakie) dlatego sam postanowiłem napisać funkcję która się tym zajmie.

3.Poprawię

  1. Rzeczywiście, tak jak teraz na to patrzę to w czterech miejscach zamiast :

if($mail->send())
    {
       return false;
    }
    else
   {
     return true;  
   }

if(($DotPosition === false) || ($DotPosition < 2) || ($DotPosition  > $DomainPartLength - 3 ))
      {
        return false;
      }


if(!is_numeric($PhoneNumber))
        {
          return false;
        }


if(($Answear == $CorrectAnswear)&&($TimePassed > 20))
      {
          return true;
      }
      else
      {
          return false;
      }


Lepiej jest napisać po prostu


return warunek lub wynik działania funkcji

0

ale Ty nie stosowałeś ani under_score ani camelCase :) toJestCamelCase a ToJestToCoPisałeś. Filter var chyba ma inne mankamenty niż funkcją która napisałeś.

0

Czy to stwarza jakąkolwiek różnicę jeżeli pierwsza litera jest duża a nie mała?
Nie rozumiem, co dokładnie masz na myśli pisząc o filter_var?

0

To jest tylko konwencja, nic sie nie stanie jak będzie z wielkiej, ale... skoro przyjęło się, że np gettery i settery mają prefixy get/set a nie "bring_me", "make_new_value" - no to po coś ten standard jest :) prawdę mówiąc w tej chwili nie kojarzę powodu, ale skoro camelCase to camelCase a nie "CamelCase" :D

Może trochę tak, ale wyczytałem, że filter_var ma jakieś mankamenty

sam to pisałeś - więc potwierdzam że też o jakichś tam przypadkach słyszałem że czegoś nie chwyta, ale porównując działanie filter_var i Twojej funkcji zakładam że filter_var robi to lepiej i szybciej niż ta Twoja.

0

jeśli duże i małe są rozróżniane to najlepiej chyba pisać jednym sposobem, żeby sobie nie zrobić krzywdy, ale faktycznie jakoś ta pierwsza mała wygląda naturalniej (jak i w innych językach zapewne)

1 użytkowników online, w tym zalogowanych: 0, gości: 1