2

私はおそらく少し太っていますが、これに対する答えが見つからないようです。register globals がオンになっているサーバーから、オフになっているサーバーに移動しています。それは良いことですが、残念なことに、私は何年にもわたってレジスタ グローバルを ON にして作業することに慣れてきたため、ずさんなコードを書くことになりました。私は今それを修正しようとしています。

$_POST 内に可変変数を持つ古いコードを書き直そうとしています。

これがばかげた例であることはわかっていますが、解決しようとしている問題を示しています。以下は、レジスタ グローバルがオンの場合に機能します。

<?php $variable = "fullname";?>
<form action="/test/" method="post">
<label for="fullname">Full Name:</label> <input name="fullname" type="text" value="<?php echo $$variable;?>" size="20" maxlength="150" />
<input name="submit" type="submit" value="Go!" />
</form>

register globals をオフにしてこれを機能させるにはどうすればよいですか? 以下は明らかに機能しません。

<?php $variable = "fullname";?>
<form action="/test/" method="post">
<label for="fullname">Full Name:</label> <input name="fullname" type="text" value="<?php echo $_POST[$$variable];?>" size="20" maxlength="150" />
<input name="submit" type="submit" value="Go!" />
</form>

お手柔らかにお願いします - 私はおそらく私が愚かであることを知っていますが、私はこれについて頭を悩ませることができないようです.

4

6 に答える 6

7

シンプルです$_POST[$variable]。(または$_GET$_REQUEST必要に応じて .)

ただし、テキストを HTML に出力する場合は、エンコードする必要があります。エンコードしないと、クロスサイト スクリプティング攻撃に対して脆弱になることに注意してください。

<input type="text"
    name="<?php echo htmlspecialchars($variable);?>"
    value="<?php echo htmlspecialchars($_POST[$variable]);?>" 
    size="20" maxlength="150"
/>

(私は通常、この過剰な量のタイピングを削減するために、 hdoという関数を定義します。)echo htmlspecialchars

于 2010-08-27T14:43:33.477 に答える
2

あなたと似たようなフォーム操作がいくつかありますが、フォーム内で $_POST を使用している理由がわかりません。あなたが持っているべきものはこれです:

<?php $variable = $_POST["fullname"];?>
<form action="/test/" method="post">
<label for="fullname">Full Name:</label> <input name="fullname" type="text" value="<?php echo $variable; ?>" size="20" maxlength="150" /> 
<input name="submit" type="submit" value="Go!" />
</form>
于 2010-08-27T14:43:25.280 に答える
1

$$あなたは狂気全体を取り除くことができ、単にすることができます$_POST[$variable]

于 2010-08-27T14:46:17.570 に答える
1

$_POST は配列です。それだけではありません。

$_POST[$variable]
于 2010-08-27T14:43:49.430 に答える
1

あなたは確かにあなたが$_POST[$$variable]反対することを意味しました$_POST[$variable]

于 2010-08-27T14:45:54.583 に答える
0

$_SUPER グローバルから変数変数を直接使用することは、特にコードのいずれかがオープン ソースである場合、悪い考えであり、セキュリティ リスクです。入力を変更して、通過させた変数の値を見つけ出すことができます。たとえば、環境変数のダンプを取得する「$_ENV」を渡すことができます。実際、グローバルを登録することはとにかく悪い考えです。

これは@bobinceの回答で言及されています。

そして、あなたの質問に関しては、PHPのレジスタグローバルがオフになっているとあなたの例が機能しないのはそのためです。PHP は (正当な理由で) レジスタ グローバルがオフになっているため、より厳密です。

于 2010-08-27T14:57:32.707 に答える