0

次のスクリプトは、date_enabled が 2 で、3 つの変数のいずれかが空の場合にエラーを生成する必要があります。たとえば、日が空の場合、スクリプトはまだ文をエコーし​​ません。誰かが問題を見ていますか?

$year = $_POST['date-year'];
$month = $_POST['date-month'];
$day = $_POST['date-day'];
$date_enabled = 2;     
if ((($date_enabled ==2)) && ((empty($year) || empty($day) || empty($month)))){
            echo "You didn't enter a valid date";
            }

更新 - 次のスクリプトを実行すると、エコーが返されます: その空 その空 (関数)。これは、 @Expert System のアドバイスのために作成した空と関数 isEmpty も機能することを意味します。

if (empty($day)){
    echo "its empty";
    }
if (!isset($day)){
    echo "its not set";
    }
if (isEmpty($day)){
    echo "its empty (function)";
    }

UPDATE AGAIN - 上記のスクリプトは正しく動作します。問題は私のフォームにあります。現在は問題なく動作しており、ご協力いただきありがとうございます。

4

2 に答える 2

0

代わりに次のコードを試してください。

$year = isSet($_POST["date-year"]) ? $_POST["date-year"] : "";
$month = isSet($_POST["date-month"]) ? $_POST["date-month"] : "";
$day = isSet($_POST["date-day"]) ? $_POST["date-day"] : "";
$date_enabled = 2;
if ((($date_enabled ==2)) && ((empty($year) || empty($day) || empty($month)))){
    echo "You didn't enter a valid date";
}

問題は、配列E_NOTICE内の未定義のインデックスにアクセスしようとしたときに発生するレベルのエラーである可能性があります。$_POSTこれは、ususl/default 構成オプションでは問題 (つまり、実行の停止) を引き起こすことはありませんが、あなたの場合はそうなる可能性があります (推測するだけです)。

于 2013-06-01T14:57:34.430 に答える
0

あなたの質問の「空」の定義が不明確だと思います。質問の空が長さゼロの文字列を意味する場合、空の関数は適切なものではありません。

PHP ドキュメントの empty() 定義

変数が空であると見なされるかどうかを判別します。変数が存在しない場合、またはその値が FALSE の場合、その変数は空と見なされます。変数が存在しない場合、 empty() は警告を生成しません。

たぶん、このカスタム関数はあなたのコンテキストで機能します

function isEmpty($var) {
    return !isset($var) || ($var == '');
}

それで

if (($date_enabled == 2) && 
    (isEmpty($year) || isEmpty($day) || isEmpty($month))){
    echo "You didn't enter a valid date";
}
于 2013-06-01T15:11:01.363 に答える