好的爱情是你通过一个人看到整个世界,坏的爱情是你为了一个人舍弃世界。

PHP从网页传递变量的改变

技术文档 5341浏览 0评论

PHP 自从 4.1.0 开始,支持一种比较安全的变量传递方式。原本我们在写 PHP 程序时,从窗体以 POST 方式传入 PHP 程序时,PHP 可以直接拿来使用。
例如,有一个窗体是下面这个样子:
 
<form action=test.php method=post>  
<input type=text name=username>  
<input type=button value=送出 name=b1>
</form>

当上述的 HTML 按了送出之后,在 test.php 这个程序就会有一个变量名为 $username,其值是我们所填入的名称。但是使用者也可以直接在网址列输入 http://url/test.php?userna... 来设定 $username 这个变量的值为 myname。这会有什么问题呢?让我们以 PHP 4.1.0 release note 所提出的例子来说明。
假设我们有一个程序如下:
<?php if (authenticate_user()) { $authenticated = true; } ... ?>
使用者可以经由网址列输入一个变量 $authenticated=true,这样一来,不管是否通过 authenticate_user() 的检查,$authenticated 永远都是 true。
所以在 4.1.0 之后,有一个新的方式可以让我们使用,就是将传进来的变量全部都存在数组中。以第一个例子而言,我们以 POST 的方式从窗体传来变量 $username,新的取得变量方式是:$_POST[&#34;username&#34;],也就是说所有以 POST 传递过来的变量全部存在 $_POST 这个数组中。详细说明请参考 http://www.php.net/release... 。 在 4.2.0 之前,新旧二种方式都可以使用,但是在 4.2.0 之后,Default 只能使用新的方式来传递变量。所以如果你安装的了新 PHP 而发现无法使用旧的 PHP 程序,别惊讶。如果您还是要以旧的方式来传递变量,请修改 php.ini (通常位于 /usr/local/lib/),将原本的 register_globals = Off 改成下列这个样子,并移除开头的批注符号 #, register_globals = Off register_globals = On 新的方式下,用来存放变量的数组有下列七种:
$_GET:存放以 GET 传来的变数
$_POST:存放以 POST 传来的变数
$_COOKIE :包含了存在 HTTP cookie 的变量
$_SERVER:存放 server 变数 (如 REMOTE_ADDR)
$_ENV:存放环境变量
$_REQUEST:存放了 GET、POST、及Cookie 变量,也就是从使用者端传来的变量。换句话说,这个变量的内容并不可靠。
$_SESSION:包含了在 session 已注册的变量。

转载请注明:自由的风 » PHP从网页传递变量的改变

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址