我想根据表单中的选择将表单提交到不同的地方。我最初计划将所有内容发送到中央文件/位置,并确定下一步该去哪里。但是,如果可以的话,我想不做这个额外的步骤。
如果用户想要创建/编辑/删除元素,请转到第1页 如果用户想要分组/附加元素,请转到第3页。
我正在尝试编写表单生成器。您可以创建/编辑/删除表单,问题和答案。我有完成创建,编辑和删除的所有内容。这些功能在不离开页面的情况下执行,但现在我希望为特定问题分配答案。问题页面和答案页面是分开的。我想要选择一组答案并将一组答案ID(选中的复选框)提交到问题页面,然后将那些ID分配给一个问题。所以基本上创建,编辑和删除功能都是打开而不离开页面,但是assign函数将在不同的页面上执行。
if(empty($delRowID) || empty(updateRowID) || empty($groupRows)) {
qInsert();
}else{
if(!empty($delRowID)) qDelete($delRowID);
if(!empty(updateRowID)) qUpdate($updateRowID);
if(!empty($groupRows)) {
submit $groupRows to Question.php;
}
}
答案 0 :(得分:16)
否,表单只有一个操作。
但你有选择:
但是,您可以使用 javascript :
更改操作属性<input type="submit" value="Edit" onclick="editform();return true;">
<input type="submit" value="Delete" onclick="deleteform();return true;">
和一些小javascript:
function editform() {
document.myform.action = '/edit';
}
function deleteform() {
document.myform.action = '/delete';
}
另见
如果javascript不适合您,您可以在页面中考虑多个表单。
Multiple forms = multiple actions
javascript禁用客户端没有问题,并且符合标准。
或者您可以在服务器端处理编辑或删除的区别。不需要javascript。
向表单添加多个提交按钮,并为它们指定相同的名称,但值不同:
<input type="submit" name="btSubmit" value="Edit">
<input type="submit" name="btSubmit" value="Delete">
然后,您可以检索已单击的按钮的值。在php中,以下应该完成这项工作:
$_POST['btSubmit']
有关经典asp的示例,请参阅http://www.chami.com/tips/internet/042599I.html。
答案 1 :(得分:6)
可以使用JavaScript,但不推荐使用它,因为有些人因为特洛伊木马和某些网站的嘈杂行为而默认关闭JS。在启用JS和禁用JS的情况下,您的站点都可以正常工作。
实际上,您不需要很多表单操作,因为每个操作都可以使用单个表单处理程序脚本中的分支来完成 这是一个非常简单的CRUD应用程序示例,执行显示,编辑,添加 - 所有这些都在一个主体中并使用模板:
的index.php
<?
mysql_connect();
mysql_select_db("new");
$table = "test";
if($_SERVER['REQUEST_METHOD']=='POST') { //form handler part:
$name = mysql_real_escape_string($_POST['name']);
if ($id = intval($_POST['id'])) {
$query="UPDATE $table SET name='$name' WHERE id=$id";
} else {
$query="INSERT INTO $table SET name='$name'";
}
mysql_query($query) or trigger_error(mysql_error()." in ".$query);
header("Location: http://".$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF']);
exit;
}
if (!isset($_GET['id'])) { //listing part:
$LIST=array();
$query="SELECT * FROM $table";
$res=mysql_query($query);
while($row=mysql_fetch_assoc($res)) $LIST[]=$row;
include 'list.php';
} else { // form displaying part:
if ($id=intval($_GET['id'])) {
$query="SELECT * FROM $table WHERE id=$id";
$res=mysql_query($query);
$row=mysql_fetch_assoc($res);
foreach ($row as $k => $v) $row[$k]=htmlspecialchars($v);
} else {
$row['name']='';
$row['id']=0;
}
include 'form.php';
}
?>
form.php的
<form method="POST">
<input type="text" name="name" value="<?=$row['name']?>"><br>
<input type="hidden" name="id" value="<?=$row['id']?>">
<input type="submit"><br>
<a href="?">Return to the list</a>
</form>
list.php的
<a href="?id=0">Add item</a>
<? foreach ($LIST as $row): ?>
<li><a href="?id=<?=$row['id']?>"><?=$row['name']?></a>
<? endforeach ?>
答案 2 :(得分:4)
只需将它们发送到中心位置,然后根据所选内容使用逻辑将它们发送到其他位置。
例如:
<?php
switch($_POST['choice']) {
case 'edit':
$page = 'edit.php';
break;
case 'group':
$page = 'group.php';
break;
}
header("Location: " . $page);
(显然需要一些输入过滤和默认值)
编辑:正如 Col。所指出的那样。使用header()
进行下面的弹片是非常没有意义的,因为它会消灭你的$ _POST数组 - 改为使用include()
,但要小心只允许自己的文件,不要让用户名将包含的文件(例如,使用表单字段值来选择包含的文件)。
答案 3 :(得分:3)
不,你不能在html中有多个动作,但是你可以使用javascript根据点击的按钮来切换动作。
我会做这样的事情(在假mootools中)
<form action='default.php'>
... form elements ...
<button onclick='editButtonClick()' value='edit'/>
<button onclick='deleteButtonClick()' value='delete'/>
</form>
function editButtonClick() {
$('form').action = 'editaction.php';
$('form').submit();
}
function deleteButtonClick) {
$('form').action = 'deleteaction.php';
$('form').submit();
}
答案 4 :(得分:1)
不,它不能(至少不能依赖JavaScript)。
提交到一个URI,并有一个调度例程将数据传递给不同的函数,具体取决于所选的单选按钮(或其他)。
答案 5 :(得分:1)
如果我正在考虑这样做,我会通过POST传递你想做的事情。
然后根据一组函数检查该值,并且每个函数将根据它的选择执行不同的操作
答案 6 :(得分:0)
<input type="submit" value="Add" onclick="submitForm(this,'add')" />
<input type="submit" value="Update" onclick="submitForm(this,'update')" />
<input type="submit" value="Delete" onclick="submitForm(this,'delete')" />
var submitForm = function(context,uri)
{
form = contenxt.parent; //Go back to the form
form.action = uri; // Set the action
form.submit(); //Submit the form;
}
Java脚本是处理此问题的最佳方式,除非您创建3个唯一表单,否则没有太多选择。
答案 7 :(得分:0)
将表单发布到中央formhandler脚本。在该页面上只需使用简单的逻辑(在此实例中使用php)将用户重定向到您想要的特定页面
答案 8 :(得分:-1)
在提交页面上,您可以调用CURL并将所有Get或post变量提供给该URL。