Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: ilość znaków w mailu - formularz
Forum PHP.pl > Forum > PHP
konrad1cs
Witam.
Na stronce mam formularz kontaktowy z możliwością załączników. O php wiem mało, a mam problem z ilością znaków po "@" a dokładniej ilość znaków po @, a przed .pl/.com/.eu nie może być krótsza niż 3 znaki: np jan@op.pl już nie może być.
Czy będzie ktoś wstanie mi pomóc to ustawić?
Mogę podesłać kod.
Będę wdzięczny za pomoc.
Pozdrawiam
Turson
  1. $mail = "mail@testowy.com";
  2. $podziel = explode("@", $mail);
  3. if(strlen($podziel[1])>3){
  4. //ok
  5. }

Możesz rozbić jeszcze wg. kropek w podziel[1] i w pierwszym elemencie tablicy zliczyc ilosc znakow
konrad1cs
Niestety jestem laikiem i nie potrafię tego zastosować.
Czy mogę podesłać tutaj kodzić?
Turson
  1. $mail = "mail@testowy.com"; //przykładowy adres e-mail
  2. $podziel = explode("@", $mail); // rozdzielamy $mail wg. @, czyli otrzymujemy tablicę: [0] = mail, [1] = testowy.com
  3. if(strlen($podziel[1])>3){ // sprawdzamy czy $podziel[1] czyli testowy.com ma więcej niż 3 znaki
  4. //tak, ma więcej niż 3 znaki
  5. }
Pyton_000
  1. $mail = "maiil.test@t.pl";
  2.  
  3. $split = preg_split('/[@.]/', $mail);
  4. var_dump(strlen($split[sizeof($split)-2]));
konrad1cs
Zastosowałem obie opcje i żadna z nich nie działa niestety
Pyton_000
Jak nie działa. Przecież to co Ci wysłałem podaje Ci długość tego co jest przed np. ".pl" a np @ np. xxx@zz.pl lub xxx@xxx.zz.pl
Dla obu tych adresów zwróci długość ciągu 'zz'
konrad1cs
Podstawiłem
  1. $split = preg_split('/[@.]/', $mail);
  2. var_dump(strlen($split[sizeof($split)-2]));


zaraz pod funkcją : $mail = "maiil.test@t.pl"; i nie działa niestety... Być może później w kodzie jest coś, co zaprzecza temu

Kurcze głowie się i głowie z tym...
Pomoże ktoś na gotowym przykładzie? Bardzo proszę
Tak wygląda kod:
  1. <form enctype="multipart/form-data" method="post" action="" id="contactForm">
  2. <div>
  3. <label for="name">Imię i nazwisko</label>
  4. <input type="text" name="name" placeholder="Jan Kowalski" id="name" />
  5. <label for="email">Email</label>
  6. <input type="text" name="email" placeholder="jankowalski@gmail.com" id="email" />
  7. <label for="subject">Temat</label>
  8. <input type="text" name="subject" placeholder="Przykładowy temat" id="subject" />
  9. <textarea name="message" id="message" placeholder="Wiadomość"></textarea>
  10.  
  11. <div class="wrap">
  12. <input name="plik" type="file" class="name" /><input class="fake-input" value="Wybierz plik"/>
  13. </div>
  14.  
  15. <input type="hidden" name="MAX_FILE_SIZE" value="5000000" />
  16. <input type="submit" name="send" value="Wyślij"/>
  17. </div>
  18. </form>
  19. <?if( isset($_POST['send']) && (!validateName($_POST['name']) || !validateEmail($_POST['email']) || !validateMessage($_POST['message']) ) ):?>
  20. <p>Proszę poprawić zaznaczone pola i spróbować ponownie</p>
  21. <?elseif(isset($_POST['send'])):?>
  22. <?php
  23. $email = $_POST['email'];
  24. $naglowki = "Reply-to: =?UTF-8?B?".base64_encode($_POST['name'])."?= <$email>".PHP_EOL;
  25. $naglowki .= "From: =?UTF-8?B?".base64_encode($_POST['name'])."?= <$email>".PHP_EOL;
  26. $naglowki .= "MIME-Version: 1.0".PHP_EOL;
  27. $naglowki .= "Content-type: text/html; charset=utf-8".PHP_EOL;
  28. $message = wordwrap($_POST['message'], 70);
  29. $akceptowane='rar|zip|txt|doc|docx|pdf';
  30. $uploaddir = 'pliki/';
  31. $path_parts = pathinfo($_FILES['plik']['name']);
  32. $rozszerzenie = $path_parts['extension'];
  33. $nazwapliku = date('Y-m-d_g_i');
  34. $nazwapliku .= "." . $rozszerzenie;
  35. $akc=explode('|', $akceptowane);
  36. $plik=explode('.', $_FILES['plik']['name']);
  37. $roz=$plik[count($plik)-1];
  38. if(in_array(strtolower($roz), $akc))
  39. {
  40. if(move_uploaded_file($_FILES['plik']['tmp_name'], $uploaddir.$nazwapliku))
  41. {
  42. chmod($uploaddir.$nazwapliku, 0644);
  43. $message .= "<br /><br />";
  44. $message .= "Załączony plik: <a href='http://www.veramente.eu/pliki/".$nazwapliku."'>".$nazwapliku."</a>";
  45. }
  46. }
  47. mail('biuro@veramente.eu', $_POST['subject'], $_POST['name'].'('.$email.') pisze:<br />'.$message, $naglowki);
  48. ?>
  49. <p>Wiadomość została wysłana, dziękujemy.</p>
  50. <?endif?>


Pyton_000
Ale co nie działa. Pokaż jak to robisz.
konrad1cs
Między linijką 23 a 24 wstawiłem
  1. $split = preg_split('/[@.]/', $mail);
  2. var_dump(strlen($split[sizeof($split)-2]));


tak samo w przypadku pomocy Tursona
Turson
Bo masz $email a nie $mail. Zacznij myśleć
konrad1cs
Zmieniłem, jak podpowiedziałeś, ale nadal nie działa. Nie mam pojęcia wgl o php, dlatego nie wychodzi...
Pyton_000
Zamiast mówić że nie działa lepiej byś mówił CO nie działa. Ludzie chcą pomagać ale wypada też się trochę wysilić.
konrad1cs
Jak już wspomniałem zależy mi na tym, aby ludzie mający mejla od operatora np: op, o2, mogli wysyłać maile z formularza (mail@o2.pl)
Pyton_000
To w końcu mogą czy nie bo się pogubiłeś.
Poza tym wiesz co Twój skrypt robi?
Ehh...
Zamień:
  1. $email = $_POST['email'];

na
  1. $email = $_POST['email'];
  2. $split = preg_split('/[@.]/', $email);
  3. if(strlen($split[sizeof($split)-2]) <3)
  4. die('Spadaj');
konrad1cs
Pyton_000 dziękują za bezpośrednią podpowiedź, ale w formularzu nadal wysyłanie maili z adresów o jakich wspomniałem nie jest możliwe.
Nie wiem czy to jest istotne, ale gdybym wpisał: proba@op.op.pl to wtedy formularz działa
ctom
to może zastosuj sobie takie rozwiązanie - bo trochę kręcisz :-)

  1. $filtr = array('op.pl', 'o2.pl' ,'dupa.com');
  2.  
  3. $domenaZmaila = explode('@', $email);
  4.  
  5. if(in_array($domenaZmaila[1] , $filtr)) {
  6.  
  7. // domena jest w filtrze
  8.  
  9. } else {
  10. // domeny NIE MA w filtrze
  11. }
Pyton_000
To zdecyduj się co chcesz aby ten skrypt robił bo raz piszesz że ma nie przepuszczać adresów teraz mówisz że nie działa. Decyduj się.

[edited]
*ctom to co podałeś nie zadziała gdy adres będzie np. @cos.op.pl
Turson
Wydaje mi się, że autor zbyt dokładnie chce sprawdzać e-mail i uważam, że niepotrzebnie.
http://www.w3.org/TR/html-markup/input.email.html + preg_match + zliczanie znaków po @ powinno wystarczyć
ctom
Cytat(Pyton_000 @ 14.12.2013, 15:12:21 ) *
[edited]
*ctom to co podałeś nie zadziała gdy adres będzie np. @cos.op.pl



no tak , bo po to dałem tablice z filtrami domen ... sądziłem, że chce właśnie mieć kontrole nad tym na jakie domeny wysyła (będzie zakazuje) - tylko to robi w dość dziwny sposób.
Ale może nich się autor wypowie (albo narysuje, będzie łatwiej wink.gif )
konrad1cs
Nie chce filtrować adresów, a pozwolić na wysłanie maili praktycznie kazdemu, bo dotychczas Ci co mają pomiędzy "@" a kropką tylko dwa znaki nie mogą wysyłać maili przez ten formularz.
Nie ma nigdzie w kodzie filtra, który by ustalał trzy znaki, więc nie wiem już jak temu zaradzić, zwłaszcza, że php jak narazie jest dla mnie czarna magia
Pyton_000
pokaż funkcje validateEmail
bojaszukam
Wyślij całą funkcję. Sprawdzimy jak to jest rozwiązane i damy własne propozycje smile.gif
konrad1cs
Proszę:
  1. <?php
  2. function validateName($name){
  3. //if it's NOT valid
  4. if(strlen($name) < 4 || $name == 'Imię i nazwisko')
  5. return false;
  6. //if it's valid
  7. else
  8. return true;
  9. }
  10. function validateEmail($email){
  11. return preg_match("/^[a-zA-Z0-9]+[a-zA-Z0-9_-]+@[a-zA-Z0-9]+[a-zA-Z0-9.-]+[a-zA-Z0-9]+.[a-z]{2,4}$/", $email);
  12. }
  13. function validateMessage($message){
  14. //if it's NOT valid
  15. if(strlen($message) < 10)
  16. return false;
  17. //if it's valid
  18. else
  19. return true;
  20. }
  21. ?>
Pyton_000
ehh...
Kod
if(strlen($name) < 4

to zmień.
konrad1cs
a na co dokładnie?
konrad1cs
Pyton_000 pewnie bardzo byś mi pomógł, ale założyłem ten topic, gdyż nie miałem jakiegokolwiek pojęcia o języku php. Gdybym coś potrafił, znalazł bym odpowiedz w wyszukiwarce i nie zaśmiecał forum wink.gif
Pyton_000
To trzeba było od razu powiedzieć że nie masz zamiaru uczyć się PHP i przyszedłeś po gotowca.
Ja daję Ci wędkę i instrukcje jak z niej skorzystać. Co Ty z tym zrobisz Twoja sprawa. Ale nadal będziesz pisał głupie tematy z prośbą o coś.

Przemyśl smile.gif
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.