1

私はフォームを作成していますが、その一部はオプションです。このフォームの出力を表示するには、POST 変数に内容があるかどうかを確認できるようにしたいと考えています。存在する場合、スクリプトは、POST 変数と同じ値と名前を持つ新しい通常の PHP 変数を作成する必要があります。そうでない場合は、同じ名前で値が「未定義」の新しい通常の PHP 変数を作成する必要があります。これは私がこれまでに持っているものです:

function setdefined($var)
{
    if (!$_POST[$var] == "")
    {
        $$var = $_POST[$var]; // This seems to be the point at which the script fails
    }
    else
    {
        $$var = "Not defined";
    }
}
setdefined("email");
echo("Email: " . $email); // Provides an example output - in real life the output goes into an email.

このスクリプトはエラーをスローせず、値が指定されていない "Email: " を返すだけです。これは、関数内で可変変数を使用する方法に問題があると思います。以下のコードは意図したとおりに機能しますが、あまり実用的ではありません。

function setdefined(&$var)
{
    if (!$_POST[$var] == "")
    {
        $var = $_POST[$var];
    }
    else
    {
        $var = "Not defined";
    }
}
$email = "email"; // As the var parameter is passed by reference, the $email variable must be passed as the function argument
setdefined($email);
4

2 に答える 2

2

このようにしてみませんか:

function setdefined($var)
{
    if (isset($_POST[$var]) && !empty($_POST[$var]))
    {
        return $_POST[$var];
    }
    else
    {
        return "Not defined";
    }
}
$email = setdefined('email');
echo("Email: " . $email);

最初の例で作成した変数は、関数内でのみ使用できます

于 2013-01-04T18:40:33.360 に答える
0

おそらく悪意のあるユーザーによって送信されたその未知の変数、グローバル変数を作成できます。これを行うには、これを関数の先頭に追加します。

global $$var ;

これは醜いだけでなく、安全でない可能性もあります。

于 2013-01-04T18:44:07.310 に答える