2

我可能有点厚,但我似乎无法找到这个问题的答案。我正在从一个注册全局变量打开的服务器移动到一个关闭它的服务器。这是一件好事,但不幸的是,我已经习惯了多年使用寄存器全局变量打开,这导致我编写草率的代码。我现在正试图解决这个问题。

我正在尝试重写一些在 $_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>

如何在注册全局变量关闭的情况下进行这项工作?以下显然不起作用:

<?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"
/>

(我通常定义一个名为hthat does的函数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 是一个数组,不仅仅是这样。

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

你确定你的意思$_POST[$$variable]是反对$_POST[$variable]

于 2010-08-27T14:45:54.583 回答
1

你可以摆脱整个$$疯狂,简单地做$_POST[$variable]

于 2010-08-27T14:46:17.570 回答
0

直接从 $_SUPER 全局变量中使用变量是一个坏主意和安全风险,特别是如果您的任何代码是开源的。可以修改输入以四处寻找并找出您允许通过的任何变量的值。例如,他们可以传入“$_ENV”,这会让他们转储您的环境变量。事实上,注册全局变量无论如何都是一个坏主意。

@bobince 的回答中提到了这一点。

而且,关于您的问题,这就是为什么您的示例不适用于 PHP 的全局寄存器关闭的原因。PHP 更严格(有充分的理由)注册全局关闭,afaik,更难做变量变量技巧。

于 2010-08-27T14:57:32.707 回答