我想知道你是否可以拥有一个包含多个动作的HTML表单。好吧,我并不是指指定多个action=""
属性。说我有一个简单的表格:
form.html
<form action="action.php" method="post">
<label><input type="radio" value="r1" id="r1" name="r" />Insert in table1</label><br/>
<label><input type="radio" value="r2" id="r2" name="r" />Insert in table2</label><br/>
<label>Value 1<input type="text" id="t1" name="t1" /></label><br/>
<label>Value 2<input type="text" id="t2" name="t2" /></label><br/>
<label><input type="submit" value="Submit" /></label><br/>
</form>
action.php的的
$con = mysqli_connect("example.com","user","pwd","db");
$r = $_POST["r"];
$t1 = $_POST["t1"];
$t2 = $_POST["t2"];
switch($r):
case 'r1':
if($q = $con -> prepare("INSERT INTO table1 VALUES (?, ?)")):
$q -> bind_param("ss",$t1,$t2);
if($q -> execute()):
echo 'Successfully updated table1.';
$q -> close();
endif;
endif;
break;
case 'r2':
if($q = $con -> prepare("INSERT INTO table2 VALUES (?, ?)")):
$q -> bind_param("ss",$t1,$t2);
if($q -> execute()):
echo 'Successfully updated table2.';
$q -> close();
endif;
endif;
break;
endswitch;
mysqli_close($con);
所以我根据无线电输入更新了table1
或table2
,并提供了用户提交的值。请注意,我已经阻止了SQL注入。所以我的问题是,这是一个好的做法,或者我应该制作两个表单,每个表单都有不同的action=""
(使用query string
切换它们,比如/main.php?form=form1
或/main.php?form=form2
) ?
答案 0 :(得分:1)
你做得很好。另一种方法是使用多个Submit
按钮。提交按钮可以使用formaction
属性指定其他网址:
<input type="submit" formaction="main.php?action=form1" value="Insert in table1"/>
<input type="submit" formaction="main.php?action=form2" value="Insert in table2"/>
单击该提交按钮时, formaction
会覆盖表单的action
属性。
然后你可以在PHP中使用switch($_GET['action'])
。
答案 1 :(得分:-1)
一种形式很好(在大多数情况下,更容易和更一致 2 )。代码可以根据数据/状态执行任何操作:此案例涉及每个操作中的不同表格这一事实无关紧要 1
由于使用了一个单选按钮作为鉴别器,它实际上必须是相同的形式(因此相同的动作)而没有不稳定的客户端JavaScript修改 - 这是因为单选按钮本身可以只参加一种形式。
1 要查看所执行的操作真的不重要,请考虑代码是否写成如下,其中操作本身是一个&#34;黑盒子&#34;
case 'r1': f1(); break;
case 'r2': f2(); break;
2 对于单独的表单/操作,有一些争论,特别是在尝试遵守REST或POST / GET差异和幂等行为规则时;但这不能仅仅与上述(或帖子中的例子)争论。我不会捍卫或纵容所呈现的界面。