PHP编程问题 两个隐藏表单域---为什么act在先action在后? 这里的action与私有变量$action有关系吗?

<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;
}
}
?>
展开
 我来答
input988
2012-07-26 · 贡献了超过157个回答
知道答主
回答量:157
采纳率:0%
帮助的人:102万
展开全部
第一个问题:
表单提交的数据,无论是post还是get,都会通过 act=数据&action=数据的形式提交,get是通过url,而post是通过报文实体。
表单里的顺序是可以改变的,也就是说,顺序无所谓。 因为提交的数据到 处理页面(这里是$this->action指定的页面 index.php),会通过php程序先后获得提交的数据而处理,在这里先获得的是action数据判断形状,再判断act行为是计算什么。
总结:这里act和action的先后,取决于php处理的逻辑先后而不是表单提交的先后。

第二个问题:
这里的action是隐藏域的名, 私有变量$action是指提交的页面地址,无直接联系。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式