iag*_*tme 2 php arrays associative-array superglobals register-globals
我可能有点厚,但我似乎找不到这个问题的答案.我正从一个带有寄存器全局变量的服务器移动到一个关闭它的服务器.这是一件好事,但不幸的是,我已经习惯了几年和几年使用寄存器全局变量ON,导致我编写了草率的代码.我现在正试图解决这个问题.
我正在尝试重写一些在$ _POST中包含变量变量的旧代码.
我知道这是一个愚蠢的例子,但它说明了我试图解决的问题.以下将适用于寄存器全局ON:
<?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>
Run Code Online (Sandbox Code Playgroud)
如何在注册全局变量关闭的情况下使用它?以下显然不起作用:
<?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>
Run Code Online (Sandbox Code Playgroud)
请放轻松我 - 我知道我可能是愚蠢的,但我似乎无法理解这一点.
简单,公正$_POST[$variable].(或者,$_GET或者$_REQUEST,视情况而定.)
但请注意,当您将文本输出到HTML时,必须对其进行编码,否则您将容易受到跨站点脚本攻击:
<input type="text"
name="<?php echo htmlspecialchars($variable);?>"
value="<?php echo htmlspecialchars($_POST[$variable]);?>"
size="20" maxlength="150"
/>
Run Code Online (Sandbox Code Playgroud)
(I典型地定义了一个名为函数h,做echo htmlspecialchars,以减少打字的这种过度的量).