LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1187|回复: 4

问个最土的php问题

[复制链接]
发表于 2006-10-14 21:40:02 | 显示全部楼层 |阅读模式
自己实在太菜了,请大家指教

如下代码。点击submit之后,这个网页刷新,不应该是以表单的形式把上次设置的$test返回吗?为什么在刷新之后echo "$test"没反应,而且isset($test)也返回0呢?多谢!

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>notes</title>
</head>
<body>
<form method="post" action="<? echo $PHP_SELF ?>">
<input name="test" size="100" maxlength="100">
<br>
<input type="submit" value="Submit"><br>
</form>

<?php
echo "$test";
if (isset($test))
{
echo "if";
}
?>

</body>
</html>

多谢!
发表于 2006-10-14 22:34:12 | 显示全部楼层
you should use $_GET['test']

I think you PHP manual is too old.
回复 支持 反对

使用道具 举报

发表于 2006-10-15 00:28:55 | 显示全部楼层
这个说来话长了,表单提交的值被服务端接收时,实际上是被存放在一个超变量数组中的。用get方式提交的被存放在$_GET中,post提交的表单被存放在$_POST中,而表单单元的name值则是键名,在本例中,你的表单方式是post,表单单元的name是test,因此你可以通过调用$_POST['test']来获得test的值。

而你说的通过$test获取的方法,仅仅存在于当global_register参数开启的情况下,那时候各超变量数组中的各个值,会以他们的键名作为变量名称,而成为一个独立的变量。但这种方式存在安全隐患,遂不为大多数服务器采用,而且现在安装完php的时候,默认global_register也是off的。

对于本例提供3个方案:
1,使用$_POST['test']代替$test使用
推荐

2,修改php的配置文件,开启global_register
反对

3,在程序开始时加入将$_POST超变量数组自动转为变量的程序,代码如下:
while(list($k,$v)=each($_POST))if($k&&$v)${$k}=$v;
***注意,在使用该代码时,表单单元名称以非字母与下划线开头的,有可能会出现错误
折衷
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-10-15 00:40:32 | 显示全部楼层
谢谢谢谢:)
我第一次写php,那些代码都是从网上或者书上查的,可惜到了自己手里就搞不定了。再次谢谢啦。

不过有个小修正,是用$_POST['test']代替1楼源码中的“$test”:)
回复 支持 反对

使用道具 举报

发表于 2006-10-17 23:38:31 | 显示全部楼层
因为现在PHP默认将register_globals设为off,官方也不推荐将其打开
所以希望最好看PHP官方的手册,这样比较权威
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表