Bro*_*ias 5 html php forms action
我想根据表单中的选择将表单提交到不同的地方.我最初计划将所有内容发送到中央文件/位置,并让它确定下一步要去哪里.但是,如果可以的话,我想不做这个额外的步骤.
如果用户想要创建/编辑/删除元素,请转到第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;
}
}
Run Code Online (Sandbox Code Playgroud)
mar*_*pet 18
不,表单只有一个动作.
但你有选择:
但是,您可以使用javascript更改action属性:
<input type="submit" value="Edit" onclick="editform();return true;">
<input type="submit" value="Delete" onclick="deleteform();return true;">
Run Code Online (Sandbox Code Playgroud)
加上一点点javascript:
function editform() {
document.myform.action = '/edit';
}
function deleteform() {
document.myform.action = '/delete';
}
Run Code Online (Sandbox Code Playgroud)
也可以看看
如果javascript不适合您,您可以在页面中考虑多个表单.
Run Code Online (Sandbox Code Playgroud)Multiple forms = multiple actions
javascript禁用客户端没有问题,符合标准.
或者您可以在服务器端处理编辑或删除的区别.不需要JavaScript.
向表单添加多个提交按钮,并为它们指定相同的名称,但值不同:
<input type="submit" name="btSubmit" value="Edit">
<input type="submit" name="btSubmit" value="Delete">
Run Code Online (Sandbox Code Playgroud)
然后,您可以检索已单击的按钮的值.在PHP中,以下应该做的工作:
$_POST['btSubmit']
Run Code Online (Sandbox Code Playgroud)
有关经典asp的示例,请参见http://www.chami.com/tips/internet/042599I.html.
可以使用JavaScript,但不推荐使用它,因为有些人因为特洛伊木马和一些网站的嘈杂行为而默认关闭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';
}
?>
Run Code Online (Sandbox Code Playgroud)
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>
Run Code Online (Sandbox Code Playgroud)
list.php的
<a href="?id=0">Add item</a>
<? foreach ($LIST as $row): ?>
<li><a href="?id=<?=$row['id']?>"><?=$row['name']?></a>
<? endforeach ?>
Run Code Online (Sandbox Code Playgroud)
只需将它们发送到中心位置,然后根据选择的内容使用逻辑将它们发送到其他位置。
例如:
<?php
switch($_POST['choice']) {
case 'edit':
$page = 'edit.php';
break;
case 'group':
$page = 'group.php';
break;
}
header("Location: " . $page);
Run Code Online (Sandbox Code Playgroud)
(显然需要一些输入过滤和默认值)
编辑:如下面的Shrapnel校长所指出的header(),为此使用是毫无意义的,因为它随后将清除$ _POST数组-使用include()代替,但要小心,只允许自己创建文件,而切勿让用户命名文件将包含在内(例如,使用表单字段值来选择包含的文件)。
| 归档时间: |
|
| 查看次数: |
44873 次 |
| 最近记录: |