Как разрешить только один адрес электронной почты и проверить наличие знака @ для подтверждения адреса электронной почты? - PullRequest
1 голос
/ 18 июля 2010

Мне было интересно, как мне разрешить только один адрес электронной почты? Кроме того, как я могу проверить только знак @ в адресе электронной почты, чтобы проверить его?

Вот мой PHP-код.

if (isset($_GET['email']) && strlen($_GET['email']) <= 255) {
    $email = mysqli_real_escape_string($mysqli, strip_tags($_GET['email']));
} else if($_GET['email'] && strlen($_GET['email']) >= 256) {
    echo '<p>Your email cannot exceed 255 characters!</p>';
}

Ответы [ 5 ]

6 голосов
/ 18 июля 2010

Не.

Вместо этого используйте полностью RFC-совместимый валидатор , после чего отправьте фактическое письмо на адрес.Поистине, отправка почты на этот адрес - единственный реальный способ убедиться, что это законный адрес электронной почты.

4 голосов
/ 18 июля 2010

PHP имеет filter_var , который можно использовать так:

if (filter_var($email, FILTER_VALIDATE_EMAIL)) {
    if (strpos($email, "@") === true) {
        // VALID
    }
}

Это простой способ проверить, является ли общий адрес действительным (и не допускает явных подделок), однако это не гарантирует, что ваш адрес электронной почты действителен согласно RFC 822 , RFC 2822 или RFC 3696 .

Я также хотел бы указать на этот . Это подтвердит адрес электронной почты в соответствии с соответствующими RFC.

0 голосов
/ 18 июля 2010

как мне разрешить только один адрес электронной почты?

Запустите SELECT запрос, чтобы проверить, существует ли такой адрес электронной почты.

как я могу проверить только знак @ в письме

strpos будет достаточно.
Хотя было бы неплохо подтвердить адрес электронной почты, отправив письмо на этот адрес, вы знаете.

Также в вашем коде есть несколько вещей, которые нужно исправить.

ваше else if утверждение не обязательно, должно быть просто else

и mysqli_real_escape_string не должны быть в разделе проверки. Это функция, связанная с базой данных, а не функция проверки.

А если это регистрационная форма, следует использовать метод POST

что-то вроде этого

$err = array();
if (empty($_POST['email']) $err['email'] = "email cannot be empty";
if (strlen($_POST['email']) >= 256) $err['email'] = "email is too long";
if (!strpos("@",$_POST['email'])) $err['email'] = "malformed email";

$query = "SELECT 1 FROM members WHERE email ='".
          mysqli_real_escape_string($mysqli, $_POST['email'])."'";
$res   = mysqli_query($mysqli, $query) or trigger_error(mysqli_error($mysqli).$query);
if (mysqli_num_rows($res)) $err['email']="email already present";

//other validations as well

if (!$err) {
  //escape all the data.
  //run your insert query.
  header("Location: ".$_SERVER['REQUEST_URI']);
  exit;
} else {
  foreach($_POST as $key => $value) {
    $_FORM[$key]=htmlspecialchars($value,ENT_QUOTES);
  }  
  include 'form.php';
}
0 голосов
/ 18 июля 2010

Если это форма, вы можете использовать input type="email" в вашей форме.Он является частью HTML5, поэтому он еще не реализован во всех браузерах.

Это не будет служить цели, но предотвратит загрузку одной страницы при явных ошибках (забыв @ или .com)немного помочьБраузеры, которые его реализуют, не позволяют отправлять форму, если она недействительна;Кроме того, устройства Apple будут использовать специальную клавиатуру для этой записи с символами «@» и «.com».

(просто дополнительная информация, поскольку я не знаю всей вашей ситуации).*

0 голосов
/ 18 июля 2010

попробуйте использовать выражение regex для него ... вы можете найти шаблоны в google

, например:

if (!eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$", $email)){ 
echo "<center>Invalid email</center>"; 
}else{
echo "<center>Valid Email</center>";} 
}

Отредактировано для preg_match:

if (!preg_match("/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$/i", $email)){ 
echo "<center>Invalid email</center>"; 
}else{
echo "<center>Valid Email</center>";
} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...