表单传递$name和$_POST['name']的区别
如题,为什么我在linux环境下前着就不行呢,php 4.2
而在windows就可以,说说两者的区别吧
问题点数:20、回复次数:11Top
1 楼longxin123(龙的心)回复于 2005-08-01 18:42:15 得分 0
怎么没人顶呀
Top
2 楼apol(出来混,早晚是要还的!)回复于 2005-08-01 19:00:07 得分 2
在PHP4里,global设置默认是off,那你用post方法传递变量的时候,直接用$就取不到,必须用$_POST['name']
PHP3里是on ,所以可以随便用。Top
3 楼longxin123(龙的心)回复于 2005-08-01 19:16:36 得分 0
那他们有什么区别呢Top
4 楼gzty(【风逍遥】123笨小孩天天快乐)回复于 2005-08-02 00:01:08 得分 2
打开的话没什么区别
但是建议关闭后用$_POST好点
Top
5 楼fyxw(7级乱射)回复于 2005-08-02 08:35:30 得分 1
global如果是off那不仅是post,其他的get、session等等都不能直接用$取,养成好习惯$_POST方式取怎么都不会错!Top
6 楼heiyeshuwu(黑夜路人)回复于 2005-08-02 10:17:40 得分 10
呵呵,这个算是我学习PHP的时候碰到比较郁闷的问题,也是比较经典的问题。
global_register 这个选项是在php.ini里面设置的,如果该选项为on的话,那么就是说我们通过get或者post的变量就自动是全局变量,就能够直接访问,比如: test.php?id=1&name=heiyeluren,那么我们在程序里就能够直接引用变量id和变量name了,post变量也是一样。
如果global_register为off的情况下,那么我们通过get或者post的变量就无法直接引用,因为不是全局变量,而且把变量存进了一个数组里,比如get过来的变量:test.php?id=1&name=heiyeluren,那么变量就存储进了一个叫做$_GET的数组里,那么我们要引用id这个变量的话,就必须使用 $_GET[id]来引用了,因为id已经是$_GET这个数组里面的一个元素了,如果要引用post的变量,就使用$_POST来引用。
php3里面php.ini中register_global默认的值是on,也就是说默认就是打开全局变量的,就能够直接引用变量。php4以后的php.ini里面的register_global是off,就是关闭了全局变量,那么你要引用的时候就必须使用$_GET和$_POST数组来引用,如果你是直接引用的话,那么就会出错了。
如果你的代码是全局变量的,那么你可以更改php.ini中的register_global = on来恢复全局变量注册来解决你的问题。
另外,你肯定想知道为什么要有这么一个选项,搞的这么复杂,其实是为了安全。更详细的知识可以去搜索一下。
Top
7 楼heiyeshuwu(黑夜路人)回复于 2005-08-02 10:18:50 得分 1
php真是有点复杂,这个小问题能讲这么多,呵呵,也许是我表达能力不行。 -_-#Top
8 楼mysqlaping(处女主任的兄弟)回复于 2005-08-02 12:30:59 得分 1
建议先将传递同变量名的值先清空
such as
<?php
$id="";
$name="";
$id=$_POST['id'];
$name=$_POST['id'];
?>Top
9 楼mysqlaping(处女主任的兄弟)回复于 2005-08-02 12:31:32 得分 1
更正$name=$_POST['name'];
Top
10 楼longxin123(龙的心)回复于 2005-08-03 16:44:30 得分 0
对于大家的讨论我受益匪浅,谢谢大家。Top
11 楼hucool(鱼淼)回复于 2005-08-03 17:11:15 得分 2
说到底还是为了安全,其实直接取变量和$_POST['var'] 是一样的!只不过后者更安全罢了!Top




