0

登録フォームで電子メールを 2 回検証しようとしています。そのために、「空」関数または両方のフィールドを実行して、実際の電子メール フィールドが空でないことを最初に確認しようとしていますが、一部の場合は受け入れない理由は、予期しない '(' について不平を言うことです。

ここに行があります:

if (empty(($_POST['e-mail']) OR ($_POST['e-mail2']))) {
    $error[] = 'Please Enter your Email ';
}

なぜ私がそれを取得しているのか、それを修正する方法を知っている人はいますか?

4

5 に答える 5

0

empty()に論理式を渡していますが、これは明らかに間違ってい
ます。両方の変数を個別にチェックする必要があります。

if (empty($_POST['e-mail']) OR empty($_POST['e-mail2'])) {
    $error[] = 'Please Enter your Email ';
}
于 2013-02-16T13:09:32.573 に答える
0

あなたが意味した:

if (empty($_POST['e-mail']) OR empty($_POST['e-mail2']))

PHPはそれを推測することはできず、次のように式を評価するだけです。

if (empty(($_POST['e-mail']) OR ($_POST['e-mail2'])))
if (empty('value_of_email1'  OR 'value_of_email1'  ))
if (empty(                  true                   ))
if (                        false                   )

送信された値の1つが真である(つまり空ではない)場合でも、OR式はに評価されtrueます。

于 2013-02-16T13:09:39.487 に答える
0

empty()メソッド内で論理式を使用できるとは思いません。empty()論理式を2つの別々のメソッド呼び出しに分けてみてください。

試す:

if (empty($_POST['e-mail']) OR empty($_POST['e-mail2'])) {
    $error[] = 'Please Enter your Email ';
}

の詳細についてはempty()empty()に関するPHPマニュアルを参照してください。

于 2013-02-16T13:11:24.553 に答える
0

試す:

if (empty($_POST['e-mail']) || empty($_POST['e-mail2'])) {
    $error[] = 'Please Enter your Email ';
}

isset()値をチェックする前に、POST キーが実際に設定されていることを確認する関数を含めることもできます。


編集

わかりやすくするために、ここに編集を投稿します。値の存在と、入力の 1 つの値が別の値と等しいかどうかの両方を検証する場合は、2 つのサニティ チェックを行う必要があります。

// Check existence of values
if (empty($_POST['e-mail']) || empty($_POST['e-mail2'])) {
    $error[] = 'Please Enter your Email ';
}

// Check equivalence
if ($_POST['e-mail'] != $_POST['e-mail2']) {
    $error[] = 'Your e-mails do not match';
}
于 2013-02-16T13:02:22.907 に答える
0

後世に…

$email1 = filter_var('aaa@email.com', FILTER_VALIDATE_EMAIL);
$email2 = filter_var('aaa@email.com', FILTER_VALIDATE_EMAIL);
$unmatched1 = filter_var('aaa@emil.com', FILTER_VALIDATE_EMAIL);
$unmatched2 = filter_var('aab@email.com', FILTER_VALIDATE_EMAIL);
$invalid1 = filter_var('aaa.com', FILTER_VALIDATE_EMAIL);
$invalid2 = filter_var('email.com', FILTER_VALIDATE_EMAIL);
$empty = filter_var('', FILTER_VALIDATE_EMAIL);

var_dump(!$email1 || $email1 !== $email2);
var_dump(!$email1 || $email1 !== $unmatched2);
var_dump(!$unmatched1 || $unmatched1 !== $email2);
var_dump(!$email1 || $email1 !== $invalid2);
var_dump(!$invalid1 || $invalid1 !== $email2);
var_dump(!$email1 || $email1 !== $empty);
var_dump(!$empty || $empty !== $email2);

与えます:

bool(false) // Desired in validation...
bool(true)
bool(true)
bool(true)
bool(true)
bool(true)
bool(true)

https://ignite.io/code/511f8bf8ec221e7f21000000

したがって、置き換えvar_dumpif単純化するとe-mail2(検証する必要はありません):

$email = filter_var($_POST['e-mail'], FILTER_VALIDATE_EMAIL);

if (!$email || $email !== $_POST['e-mail2']) {
    // error stuff, including separate check on empty.
}
于 2013-02-16T13:43:38.797 に答える