Проверка за актуален емайл адрес

IvayloGoranov

Registered
Здравейте. Правя си система за коментари и проблем се явява следното за мен, че примерно да напиша емайл от типа на :
admin@bg.com го приема ?
Има ли вариант да се прави проверка дали емайл адреса е валиден ?
Код:
<tr>
								<td>Е-мейл:</td>
								<td><input type="text" name="email" class="pole" /></td>
							</tr>
Ето тук потребителя вписва адреса си какво да добавя за да прави проверка ?
 
Код:
$email = trim(htmlspecialchars(addslashes( $_POST['email'])));
if (!preg_match('/^[a-z0-9&\'\.\-_\+]+@[a-z0-9\-]+\.([a-z0-9\-]+\.)*+[a-z]{2}/is', $email)) {
        echo'Грешно въведен е-майл адрес';
        exit;
    }
 
eregi функцията, мисля че ще свърши работа.

Ще използвам тази тема вместо да правя нова и ще попитам какъв е начина да се изпраща активационен имейл при регистрация?
 
Meniak каза:
Код:
$email = trim(htmlspecialchars(addslashes( $_POST['email'])));
if (!preg_match('/^[a-z0-9&\'\.\-_\+]+@[a-z0-9\-]+\.([a-z0-9\-]+\.)*+[a-z]{2}/is', $email)) {
        echo'Грешно въведен е-майл адрес';
        exit;
    }
Това къде точно да го добавя ?
В поста, който съм копирал в моята тема ли?
 
Meniak, s флага в регулярния израз не ти трябва, няма да match-ваш нови редове в email адрес. Също така не е нужно да го ескейпваш толкова сериозно. Всъщност точно това, че ескейпваш стринга и за html и за sql инжекции го кара да минава проверката добре.

В регулярния израз символите \ и ; не sa разрешени, но ' и & са разрешени, което е много странно. След като стринга мине през addslashes ' става на \', а & на & и проверката не минава заради \ и ;. Все пак най-малкото за всеки случай, че проверката се направи без стринга да е ескейпван е добре тези неща да се премахнат от регулярния израз.

Също така разрешени са + и -, които мисля, че не могат да присъстват във валиден email адрес.

Мисля, че нещо такова ще е по-добър вариант:
PHP:
<?php
    $email = trim( $_POST['email'] );

    if( !preg_match('/^[a-z0-9_\.]+@[a-z0-9\-]+\.([a-z0-9\-]+\.)*+[a-z]{2}/i', $email) ) {
        echo 'Error';
        exit;
    }

    // Тук вече ако този email ще се извежда на екрана
    // трябва да мине през htmlspecialchars, а ако ще се
    // вкарва в база данни трябва да мине през addslashes, но
    // не и двете едновременно. Това ще ти обърка записа в БД или
    // ще изведе на екрана нещо като bla\'tralala ако в стринга присъства
    // апостроф
?>
и все пак има доста регулярни изрази за проверка на валиден email в интернет. Може да се потърси и някой по-пълен вариант.
 
bobbykokala каза:
eregi функцията, мисля че ще свърши работа.

Ще използвам тази тема вместо да правя нова и ще попитам какъв е начина да се изпраща активационен имейл при регистрация?


Ако ти се сменя след време от eregi на preg_match си го направи с eregi :)

Колкото до проверката, ами то може да се направи цялостна проверка дали съществува, но според мен на теб ти стига да проверяваш дали е попълнен валидно.
 
Абе какво стана с моя отговор, че не разбрах на темата ми ?
В една тема различни неща. Моля кажете ми как да направя проверката.
 
IvayloGoranov каза:
Абе какво стана с моя отговор, че не разбрах на темата ми ?
В една тема различни неща. Моля кажете ми как да направя проверката.
Мейла, който си дал горе е валиден. Има си всичко, за да бъде мейл. Друг е въпроса, че такъв мейл провайдер не съществува.
Всички решения, които ти дадоха в темата са правилни.
 
sandh каза:
Meniak, s флага в регулярния израз не ти трябва, няма да match-ваш нови редове в email адрес. Също така не е нужно да го ескейпваш толкова сериозно. Всъщност точно това, че ескейпваш стринга и за html и за sql инжекции го кара да минава проверката добре.

В регулярния израз символите \ и ; не sa разрешени, но ' и & са разрешени, което е много странно. След като стринга мине през addslashes ' става на \', а & на & и проверката не минава заради \ и ;. Все пак най-малкото за всеки случай, че проверката се направи без стринга да е ескейпван е добре тези неща да се премахнат от регулярния израз.

Също така разрешени са + и -, които мисля, че не могат да присъстват във валиден email адрес.

Мисля, че нещо такова ще е по-добър вариант:
PHP:
<?php
    $email = trim( $_POST['email'] );

    if( !preg_match('/^[a-z0-9_\.]+@[a-z0-9\-]+\.([a-z0-9\-]+\.)*+[a-z]{2}/i', $email) ) {
        echo 'Error';
        exit;
    }

    // Тук вече ако този email ще се извежда на екрана
    // трябва да мине през htmlspecialchars, а ако ще се
    // вкарва в база данни трябва да мине през addslashes, но
    // не и двете едновременно. Това ще ти обърка записа в БД или
    // ще изведе на екрана нещо като bla\'tralala ако в стринга присъства
    // апостроф
?>
и все пак има доста регулярни изрази за проверка на валиден email в интернет. Може да се потърси и някой по-пълен вариант.
Аре друг път ще ти се моля ако имаш по добро решение на проблема просто да го дадеш на човека и да не ми пишеш дисертации как се пишат регулярни изрази щото от натегачи за реклами ми е дошло до гуша.
 
Meniak - дал съм по-добро решение и съм обяснил защо е по-добро. А това дали ще продължаваш да си пишеш програмите неграмотно си е твоя работа.
 
sandh каза:
Meniak - дал съм по-добро решение и съм обяснил защо е по-добро. А това дали ще продължаваш да си пишеш програмите неграмотно си е твоя работа.


Не се занимавай да обясняваш на неблагодарни хора. Те както може би виждаш не вдяват нищо и чакат само готовия код макар, че си се постарал и това да му дадеш. :)
 
Вижте сега не искам да се карам или заяждам с никого това което сам го дал сам си го писал по мой изискване, написал сам го така защото искам да е така ако на вас не ви харесва виждам че сте прочели инструкциите и знаете как се пише. винаги има по-добро и по-добро. И webdeveloper тея заключения кой вдявал и кой е благодарен и т.н.т моля запази си ги за тебе не е нуйно да се обиждаме мисля че сме големи хора. Мисля с това да сложа край на разногласията.
 
Meniak, както казах - твоя си работа как си пишеш кода. Може да ти изглежда, че се натягам, но.. ти правиш основни грешки. Не се сърди, че те поправят.

IvayloGoranov - извинявай за офтопика.
 
sandh каза:
Meniak, s флага в регулярния израз не ти трябва, няма да match-ваш нови редове в email адрес. Също така не е нужно да го ескейпваш толкова сериозно. Всъщност точно това, че ескейпваш стринга и за html и за sql инжекции го кара да минава проверката добре.

В регулярния израз символите \ и ; не sa разрешени, но ' и & са разрешени, което е много странно. След като стринга мине през addslashes ' става на \', а & на & и проверката не минава заради \ и ;. Все пак най-малкото за всеки случай, че проверката се направи без стринга да е ескейпван е добре тези неща да се премахнат от регулярния израз.

Също така разрешени са + и -, които мисля, че не могат да присъстват във валиден email адрес.

Мисля, че нещо такова ще е по-добър вариант:
PHP:
<?php
    $email = trim( $_POST['email'] );

    if( !preg_match('/^[a-z0-9_\.]+@[a-z0-9\-]+\.([a-z0-9\-]+\.)*+[a-z]{2}/i', $email) ) {
        echo 'Error';
        exit;
    }

    // Тук вече ако този email ще се извежда на екрана
    // трябва да мине през htmlspecialchars, а ако ще се
    // вкарва в база данни трябва да мине през addslashes, но
    // не и двете едновременно. Това ще ти обърка записа в БД или
    // ще изведе на екрана нещо като bla\'tralala ако в стринга присъства
    // апостроф
?>
и все пак има доста регулярни изрази за проверка на валиден email в интернет. Може да се потърси и някой по-пълен вариант.

Извинявай на мен този код не ми се получава как да го направя,благодаря ти:
<?php
include "config.php"; //Инклудваме конфиг файла!
if (isset($_POST['submit'])) { //Проверяваме дали е натиснат бутона submit!

$text = htmlspecialchars(addslashes($_POST['text']));
$grad = htmlspecialchars(addslashes($_POST['grad']));
$tel = htmlspecialchars(addslashes($_POST['tel']));
$email = trim(htmlspecialchars(addslashes( $_POST['email'])));
$ime = htmlspecialchars(addslashes($_POST['ime']));
$kategoriq = htmlspecialchars(addslashes($_POST['kategoriq']));

$data = date("d.F.Y H:i"); //Взимаме датата и часът на вавеждането на коментара!
$ip = $_SERVER['REMOTE_ADDR']; //Взимаме ипто на потребителят който е въвел коментара!
if ($email == NULL || $tel == NULL || $text == NULL || $grad == NULL) { //Правим провекра дали полетата са празни!
echo "Моля попълнете задължителните полета!"; //И ако са празни извеждаме грешка!
if( !preg_match('/^[a-z0-9_\.]+@[a-z0-9\-]+\.([a-z0-9\-]+\.)*+[a-z]{2}/i', $email) ) {
echo 'Error';
exit;
}
}
else {
$sql = "INSERT INTO publikuvai
(kategoriq, ime, grad, tel, email, text, data, ip) VALUES
('$kategoriq', '$ime', '$grad', '$tel', '$email', '$text', '$data', '$ip')"; //Ако всичко е попълнено както трябва въвждаме данните в Базата данни!
mysql_query($sql) or die (mysql_error()); //Испълняваме заявката!
header("LOCATION: publikuvai.php?id=$id"); //Този код прави така, че когато рефрешнете страницата след добавянето на коментар да не добавя коментара на ново!
}}?>
 

Back
Горе