3

ユーザー名が電子メール アドレスであることを確認しようとしていますが、PHP ではこれができません。ここで何が問題なのですか?

//This checks if all the fields are filled or not
if (!empty($_POST['username']) || 
!empty($_POST['password']) ||
!empty($_POST['repassword']) || 
!empty($_POST['user_firstname']) ||
!empty($_POST['user_lastname']) ){
header('Location: register.php?msg=You didn\'t complete all of the required fields');
}

if (filter_var($_POST['username'], FILTER_VALIDATE_EMAIL) === false){
$errors[] = 'The email address you entered is not valid';
}

これがregister.phpで使用したフォームです

<form action="createuser.php" method="post" name="registration_form" id="registration_form">
<label>Email</label>
<input name="username" type="text" id="username" size="50" maxlength="50" /><br />
4

7 に答える 7

5

打ち間違え?

header('Location: register.php?msg=You didn't complete all of the required fields');
                                           ^---unescaped embedded quote

あなたの空のロジックにも欠陥があります。フィールドが空でないかどうかを確認し(たとえば、入力されている)、入力されていないことを訴えています。!ロジックを反転するには、 を削除します。

if (empty(...) || empty(...) || etc...)
于 2012-10-13T23:34:05.627 に答える
2

これの代わりに、メールアドレスを検証するために正規表現を使用してください

function check_email_address($email) {
  // First, we check that there's one @ symbol, 
  // and that the lengths are right.
  if (!preg_match("^[^@]{1,64}@[^@]{1,255}$", $email)) {
    // Email invalid because wrong number of characters 
    // in one section or wrong number of @ symbols.
    return false;
  }
  // Split it into sections to make life easier
  $email_array = explode("@", $email);
  $local_array = explode(".", $email_array[0]);
  for ($i = 0; $i < sizeof($local_array); $i++) {
    if
(!preg_match("^(([A-Za-z0-9!#$%&'*+/=?^_`{|}~-][A-Za-z0-9!#$%&
↪'*+/=?^_`{|}~\.-]{0,63})|(\"[^(\\|\")]{0,62}\"))$",
    $local_array[$i])) {
      return false;
    }
  }
  // Check if domain is IP. If not, 
  // it should be valid domain name
  if (!preg_match("^\[?[0-9\.]+\]?$", $email_array[1])) {
    $domain_array = explode(".", $email_array[1]);
    if (sizeof($domain_array) < 2) {
        return false; // Not enough parts to domain
    }
    for ($i = 0; $i < sizeof($domain_array); $i++) {
      if
(!preg_match("^(([A-Za-z0-9][A-Za-z0-9-]{0,61}[A-Za-z0-9])|
↪([A-Za-z0-9]+))$",
$domain_array[$i])) {
        return false;
      }
    }
  }
  return true;
}

true を返すかどうかを確認し、そうでない場合は単にエラーをスローする場所にリダイレクトします

于 2012-10-16T06:47:54.327 に答える
1

ifステートメントが間違っているため、電子メールを検証することはできません..投稿のいずれかが空でないかどうかをチェックしています。

に置き換えます

if (empty($_POST['username']) || empty($_POST['password']) || empty($_POST['repassword']) || empty($_POST['user_firstname']) || empty($_POST['user_lastname'])) {
于 2012-10-13T23:40:03.180 に答える
0

javascript window.locationを使用するのはどうですか?ヘッダー関数は機密性が高い場合があります。また、デフォルトではフィールドが読み込まれると空になるため、フォームに送信ボタンを配置します。

if(isset($_POST['your_submit_button_name'])){

if (empty($_POST['username']) || 
empty($_POST['password']) ||
empty($_POST['repassword']) || 
empty($_POST['user_firstname']) ||
empty($_POST['user_lastname']) ){
?>
 <script>
 window.location = 'register.php?msg=You didn\'t complete all of the required fields';
 </script>
<?php
}

   if (filter_var($_POST['username'], FILTER_VALIDATE_EMAIL) === false){
   $errors[] = 'The email address you entered is not valid';
   }
}

注:「!」を削除します 空のフィールドをトラップするため、空の関数の前。

于 2012-10-14T01:45:43.067 に答える
0

まず、構文の強調表示を見て、解析エラーが発生する理由を確認してください。

header('Location: register.php?msg=You didn't complete all of the required fields');

なる必要があります:

header('Location: register.php?msg=You didn\'t complete all of the required fields');
于 2012-10-13T23:33:51.830 に答える
0

このソリューションを使用してみてください:

$FormData = $_POST;
if(isset($FormData['button_name'])){
    $Errors = array();
    foreach ($$FormData as $key => $value) {
        if(empty($value)) $Errors[] = 'Some message';
        if($key = 'username'){
            if(filter_var($value, FILTER_VALIDATE_EMAIL){
                $Errors[] = 'The email address you entered is not valid';
            } 
        }
    }
    if(empty($Errors)){
        // @todo Do some action 
    } else {
        header('Location: register.php?msg=You didn\'t complete all of the required fields');
    }
}
于 2012-10-16T06:28:16.340 に答える
0
function check_email($check) {
$expression = "/^[a-zA-Z0-9._-]+@[a-zA-Z0-9._-]+\.([a-zA-Z]{2,4})$/";
if (preg_match($expression, $check)) {
    return true;
} else {
    return false;
} 
}

このメソッドを次のように使用します。

if(!check_email($_REQUEST['ContactEmail'])){
  $register_error .="Enter the correct email address!<br />";
  $reg_error=1; 
}
于 2013-05-14T12:51:20.677 に答える