Zapisywanie i walidacja w newsletter

Witam

Oto kod, który zapisuje userów do Newsletter-a i w związku z tym mam pytanie jak w nim dodać walidację adresu mail, ponieważ obecnie można wpisać obojętnie co i wysyła mi to do bazy adresów, i muszę to ręcznie usuwać.

Dziękuję za wszelkie podpowiedzi i odpowiedzi czy też gotowe rozwiązanie dla tego kodu.

|

| |

SUBSKRYPCJA |
| |

Podaj swój Email colspan=3>
zapisz** wypisz**

[/code]

W php robisz np. blok warunkowy z wykorzystaniem funkcji ereg:

if (!ereg("^[-A-Za-z0-9_]+[-A-Za-z0-9_.]*[@]{1}[-A-Za-z0-9_]+[-A-Za-z0-9_.]*[.]{1}[A-Za-z]{2,5}$", $_POST['email'])) { //kiedy ereg nie zwróci wartości true

						$error_info = "Podałeś nieprawidłowy adres e-mail!";

						include("register.php");

						echo $error_info;



}

Dokumentacja php: ereg

Ładnie napisane tylko w jaki sposób to połączyć z kodem, którym podałem wyżej, niestety jestem w tym “zielony”.

Oj podstawy, podstawy :wink:

Z tego inputa o nazwie “email” będziesz pobierał daną, jaką jest adres email. Teoria: Wynika więc, że superglobalna $_POST zapisze w swojej tablicy asocjacyjnej wartość z tego pola, czyli np. kubus.korwinmikke@chadecja.pl w kluczu o nazwie inputa (‘email’) Praktyka: masz do dyspozycji superglobalną tablicę asocjacyjną

$_POST['email'] = "kubus.korwinmikke@chadecja.pl";

Tę zmienną podstawiasz do naszego bloku warunkowego, który korzysta z funkcji ereg

if (!ereg("^[-A-Za-z0-9_]+[-A-Za-z0-9_.]*[@]{1}[-A-Za-z0-9_]+[-A-Za-z0-9_.]*[.]{1}[A-Za-z]{2,5}$", $_POST['email'])) { //kiedy ereg nie zwróci wartości true

                  $error_info = "Podałeś nieprawidłowy adres e-mail!";

                  include("register.php");

                  echo $error_info;



}

Gdzie umieścić tę funkcję? Otóż w pliku, który został przez Ciebie wskazany w Plik index.php wyglądałby tak:

<?php


if (!ereg("^[-A-Za-z0-9_]+[-A-Za-z0-9_.]*[@]{1}[-A-Za-z0-9_]+[-A-Za-z0-9_.]*[.]{1}[A-Za-z]{2,5}$", $_POST['email'])) { //kiedy ereg nie zwróci wartości true

                  $error_info = "Podałeś nieprawidłowy adres e-mail!";

                  include("register.php");

                  echo $error_info;



}


//jakieś dalsze akcje...

Chociaż musimy ustalić jedno: chcesz mieć akcję formularza w pliku, w którym jest formularz, czy gdzieś osobno? :slight_smile:

Recider próbowałem to dostawić do tego pliku, który prezentuję poniżej a jest odpowiedzialny za dodawanie czy usuwanie adresów e mail lecz mimo to jeśli adres podasz błędny czy tylko podasz np. imię to on i tak zapisuje go, a ja później ręcznie muszę go usuwać.

<?php


if (($email=="") or ($email=="Twój e-m@il"))

echo("
Nie podałeś adresu e-mail. Wróć i popraw swój wpis. Wstecz "); else { if ($opcja=="zapisz") { //zapisywanie $katalog=opendir("./users/"); while($plik=readdir($katalog)) { if (($plik == "." ) or ($plik=="..")) { } else { $ludzik=basename($plik); if ($ludzik==$email) {//jesli istnieje echo("Jesteś już na liście osób. Wstecz "); $flaga=true; } } } closedir($katalog); if ($flaga==false) { $plik=fopen("./users/$email","w"); flock($plik, 1); fwrite($plik,"0"); flock($plik, 3); fclose($plik); chmod("./users/$email",0666); $plik=fopen("./mail\_lista/conf/powitanie.txt","r"); flock($plik, 2); $koniec=false; while ($koniec==false) { $linia=fgets($plik,1000); $wiadomosc="$wiadomosc"."$linia"; $koniec=feof($plik); } flock($plik, 3); fclose($plik); $plik=fopen("./mail\_lista/conf/nwt.txt", "r"); flock($plik, 2); $nadawca=fgets($plik,100); $witryna=fgets($plik,200); $temat=fgets($plik,100); flock($plik,3); fclose($plik); $wiadomosc="$wiadomosc"."\n\n"; $plik=fopen("./mail\_lista/conf/stopka.txt","r"); flock($plik, 2); $koniec=false; while ($koniec==false) { $linia=fgets($plik,1000); $wiadomosc="$wiadomosc"."$linia"; $koniec=feof($plik); } flock($plik, 3); fclose($plik); $dl= strlen($witryna); $witryna=substr($witryna,0,$dl-1); $dl= strlen($nadawca); $nadawca=substr($nadawca,0,$dl-1); $dl= strlen($temat); $temat=substr($temat,0,$dl-1); $naglowek = "From: $witryna \<$nadawca\>\nContent-Type: text/plain; charset=\"iso-8859-2\""; mail($email, $temat, $wiadomosc, $naglowek); echo("Zostałeś dopisany do bazy danych. Dziękuję... Wstecz "); } }//zapisywanie if ($opcja=="wypisz") { //wypisywanie $katalog=opendir("./users/"); while($plik=readdir($katalog)) { if (($plik == "." ) or ($plik=="..")) { } else { $ludzik=basename($plik); if ($ludzik==$email) {//jesli istnieje unlink("./users/$email"); echo("Zostałeś usunięty z bazy danych. Wstecz "); $flaga=true; $plik=fopen("./mail\_lista/conf/pozegnanie.txt","r"); flock($plik, 2); $koniec=false; while ($koniec==false) { $linia=fgets($plik,1000); $wiadomosc="$wiadomosc"."$linia"; $koniec=feof($plik); } flock($plik, 3); fclose($plik); $plik=fopen("./mail\_lista/conf/nwt.txt", "r"); flock($plik, 2); $nadawca=fgets($plik,100); $witryna=fgets($plik,200); $temat=fgets($plik,100); flock($plik,3); fclose($plik); $wiadomosc="$wiadomosc"."\n\n"; $plik=fopen("./mail\_lista/conf/stopka.txt","r"); flock($plik, 2); $koniec=false; while ($koniec==false) { $linia=fgets($plik,1000); $wiadomosc="$wiadomosc"."$linia"; $koniec=feof($plik); } flock($plik, 3); fclose($plik); trim($witryna); chop($witryna); trim($nadawca); chop($nadawca); trim($temat); chop($temat); $dl= strlen($witryna); $witryna=substr($witryna,0,$dl-1); $dl= strlen($nadawca); $nadawca=substr($nadawca,0,$dl-1); $dl= strlen($temat); $temat=substr($temat,0,$dl-1); $naglowek = "From: $witryna \<$nadawca\>\nContent-Type: text/plain; charset=\"iso-8859-2\""; mail($email, $temat, $wiadomosc, $naglowek); } } } closedir($katalog); if ($flaga==false) { echo("Niestety nie ma Cię na liście osób. Wstecz "); } }//wypisywanie } ?\> [/code]

To tak…

if (($email=="") or ($email=="Twój e-m@il"))

Nie dawaj w nawiasach warunków, operator logiczny OR zapisz w postaci || (nie wiem akurat, czy to samo)

if ($email=="" || $email=="Twój e-m@il")

$plik=fopen("./users/$email","w");

Jeżeli w parametrze opatrzonym w cudzysłów podajesz zmienną, to ‘opatul’ ją w klamry

$plik=fopen("./users/{$email}","w");

Tak samo przy konkatenacji

$wiadomosc="{$wiadomosc}"."{$linia}";

Nie analizowałem sensowności kodu, ponieważ nie znam się za bardzo przy obsługach plików w PHP, jednakże jeśli spróbujesz zmienić trochę kod tak, jak podałem, możesz uzyskać pożądany efekt. Ewentualnie jeśli chcesz wiedzieć, co szwankuje, to na samym początku po <?php dopisz

ini_set('display_errors',1);

error_reporting(E_ALL);

A w

Niestety próbowałem na różne sposoby, php nie znam, więc sobie z tym nie potrafię dać rady.

Może ma ktoś jeszcze jakieś pomysły w tej sprawie.