3

ロビン・ニクソンの本からのコード:

<?php
if (isset($_POST['name'])) $name = $_POST['name'];
else $name = '(enter your name)';
echo <<<_END
<html>
    <head>
        <title>Test</title>
    </head>
    <body>
    Your name is $name<br />
    <form method = 'post' action = 'count.php'>
        What's your name?
        <input type='text' name='name' />
        <input type='submit' />
    </form>
    </body>
</html>
_END
?>

2 行目では、変数が設定されているかどうかを で確認しisset()ます。3 行目に条件があります。設定されていない場合、スクリプトは「名前を入力してください」と出力します。それは私が理解していないことです:私はこのページを開きます-それは印刷されます:

あなたの名前 (あなたの名前を入力してください) あなたの名前は何ですか? (および提出フォーム)

何も入力せずに「送信」を押すと、次のように出力されます。

あなたの名前は (「名前を入力してください」とは印刷されません) あなたの名前は何ですか? (および提出フォーム)

何も入力しませんでしたが、関数は、変数が 以外の値に設定されていることを示しましたNULL。なんで?空の値を渡す場合、なぜそれを使用するのでしょうか? なぜ使用しないのemptyですか?しかし、すべてのプログラムで、このような解決策が見られます。なぜisset()そこで関数を使用する必要があるのですか? 何がわからないのですか?

4

5 に答える 5

4

このisset関数は、テキスト フィールドに、でキャプチャされて<input type='text' name='name' />送信されたデータがあるかどうかを確認するために使用されます。POST$_POST['name']

フォームを送信すると、$_POST['name']空白または空の文字列になります。したがって、空の文字列Your name is What's your name? (and the submission form)としてisset評価されたが表示されます。true

テキストフィールドが空であることを確認したい場合は、empty()関数を使用する必要があります。これissetは、フィールドが空白/空であるかどうかと、両方をチェックします。

  if (!empty($_POST['name'])) $name = $_POST['name'];
  else $name = '(enter your name)';
于 2012-11-19T20:30:59.480 に答える
0

送信ボタンに名前を追加し、最初にテストして、フォームが既に送信されていることを確認します。このような:

<input type='submit' name="submit" />

<?php
if (isset($_POST['submit'])) {
if (isset($_POST['name']))  $name = $_POST['name'];
....
}
?>
于 2012-11-19T20:43:05.020 に答える
0

isset を !empty に変更します。post 変数から空の文字列を取得しています。

if (!empty($_POST['name'])) $name = $_POST['name'];
else $name = '(enter your name)';

または、より簡潔にするために:

$name=empty($_POST['name'])?'(enter your name)':$_POST['name'];
于 2012-11-19T20:30:21.300 に答える
0

これは、空の文字列 (ブラウザーによってサーバーに送信される) が変数を「設定」する有効な値と見なされ、isset()true を返すためです。

empty()何かが入力されたことを確認したい場合は、代わりにチェックする必要があります。

于 2012-11-19T20:34:39.273 に答える
0

他の誰もが言ったように、empty()うまくいくかもしれませんが、あなたの質問は、空ではなくなぜ isset なのかということです。

Empty は、0、0.0、"0" など、FALSE と評価されるものに対して TRUE を返すため、意図しない結果につながる可能性があります。

完全を期すために、おそらく最初に設定されているかどうかを確認し、次に空であるかどうかを確認し、それに応じて処理する必要があります。

多くの PHP コーダーもisset() を使用してキーが配列に存在するかどうかを確認する習慣を身につけていると思います。

その章の別の例で、ニクソンには空の文字列を処理する特別なケースがあることに気付くでしょう。

于 2012-11-19T20:42:02.700 に答える