PHP编程问题: index.php文件里选择图形时action会有赋值,那么类FORM里第二个隐藏域是否多余?有何用?

<html><head><title>图形的周长和面积计算器</title></head><body><?phpfunction__autoload($className... <html>
<head>
<title>图形的周长和面积计算器</title>
</head>
<body>
<?php
function __autoload($className) {
include("class_" . ucfirst($className) . ".php");
}
?>
<center>
<h2>图形的周长和面积计算器</h2>
<hr>
<a href="index.php?action=1">矩形</a>
<a href="index.php?action=2">三角形</a>
<a href="index.php?action=3">圆形</a> <hr>
</center>

<?php
switch($_REQUEST["action"]){
case 1:
$form=new Form("矩形",$_REQUEST,"index.php");
echo $form;
break;
case 2:
$form=new Form("三角形",$_REQUEST,"index.php","post", "_blank");
echo $form;
break;
case 3:
$form=new Form("圆形",$_REQUEST);
echo $form;
break;
default:
echo "请选择一个形状<br>";
}
if(isset($_REQUEST["act"])) {
switch($_REQUEST["act"]){
case 1:
$shape=new Rect($_REQUEST);
break;
case 2:
$shape=new Triangle($_REQUEST);
break;
case 3:
$shape=new Circle($_REQUEST);
break;
}

echo "面积为:".$shape->area()."<br>";
echo "周长为:".$shape->perimeter()."<br>";
}
?>
</body>
</html>

<?php
class Form {
private $formName;
private $request;
private $action;
private $method;
private $target;
function __construct($formName, $request, $action="index.php", $method="get", $target="_self")
{
$this->formName=$formName;
$this->request=$request;
$this->action=$action;
$this->method=$method;
$this->target=$target;
}
function __toString(){
$str='<table align=center border=0 width=400>';
$str.='<caption><h3>'.$this->formName.'</h3></caption>';
$str.='<form action='.$this->action.' method='.$this->method.' target='.$this->target.'>';

switch($this->request["action"]) {
case 1:
$str.='<tr><th>矩形高度:</th><td>';
$str.='<input type="text" name="height" value='.$this->request["height"].'>';
$str.='</td></tr>';
$str.='<tr><th>矩形宽度:</th><td>';
$str.='<input type="text" name="width" value='.$this->request["width"].'>';
$str.='</td></tr>';
break;
case 2:
$str.='<tr><th>第一条边:</th><td>';
$str.='<input type="text" name="side1" value='.$this->request["side1"].'>';
$str.='</td></tr>';
$str.='<tr><th>第二条边:</th><td>';
$str.='<input type="text" name="side2" value='.$this->request["side2"].'>';
$str.='</td></tr>';
$str.='<tr><th>第三条边:</th><td>';
$str.='<input type="text" name="side3" value='.$this->request["side3"].'>';
$str.='</td></tr>';
break;
case 3:
$str.='<tr><th>圆的半径:</th><td>';
$str.='<input type="text" name="radius" value='.$this->request["radius"].'>';
$str.='</td></tr>';
break;
}
$str.='<tr><td align=center colspan=2><input type="submit" value="计算"></td></tr>';
$str.='<input type="hidden" name="act" value='.$this->request["action"].'>';
$str.='<input type="hidden" name="action" value='.$this->request["action"].'>';
$str.='</form>';
$str.='</table>';

return $str;
}
}
?>
展开
 我来答
elyions
2012-07-27 · 超过10用户采纳过TA的回答
知道答主
回答量:39
采纳率:0%
帮助的人:24.6万
展开全部
第二个隐藏域里面的action理论上是多余的,
因为$_REQUEST['act']=$_REQUEST['action'],
但是放在这里就不是多余的了,因为界面还要跳转到这个php,所以是需要action这个参数的。

为什么有两个隐藏域,
if(isset($_REQUEST["act"])) {}

也就是说,在调用FORM类之前,不执行这段代码。这个php其实通过获取不同的参数完成了两个任务。

第一次只有action的时候使用form类,不执行if(isset($_REQUEST["act"])) {}部分;
然后创建了第二个界面有action和act参数,使用到if(isset($_REQUEST["act"])) {}里面的代码。
追问
但是我把那个隐藏域注释掉后程序也可以运行啊,为什么?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
yyppgg5
2012-07-27 · TA获得超过126个赞
知道小有建树答主
回答量:179
采纳率:0%
帮助的人:91.5万
展开全部
<a href="index.php?action=1">矩形</a>

我认为关键在这里 这句的意思就是把一个值为1的变量action传给index。php页面
$_REQUEST["action"]){这个的意思其实就是GET 得到上面传过来的值
$str.='<input type="hidden" name="action" value='.$this->request["action"].'>';

这句意思就是把名为action 值为1的变量存在一个隐藏框 作用我估计是表单提交后存入数据库
追问
但是我把那个隐藏域注释掉后程序也可以运行啊,为什么?
追答
确实是多余的 我今天在一本书上面看到一句话 它是这样解释的 把action的值存储为隐藏的表单输入框 以使得处理过程也可以访问这个值  
关键在这个“也”字 说明了隐藏框多余
原文引自《php+mysql基础教程》
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
thinkingbullet
2012-08-01 · 超过14用户采纳过TA的回答
知道答主
回答量:61
采纳率:0%
帮助的人:35.5万
展开全部
这要看这段代码的用途了,如果只是让人根据选择出现对应的图片那么隐藏框可要可不要,如果想让程序保存用户选择的结果,那么隐藏框就是需要的,提交后保存到数据库。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
aaa1040628736
2012-07-27 · TA获得超过171个赞
知道答主
回答量:63
采纳率:100%
帮助的人:11.9万
展开全部

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式