1

有一个 PHP 生成的 HTML 4 过渡页面,用于编辑来自单个记录的数据库中的数据。用户有两个选择:存储更改或删除记录。我使用带有控件的表单(其中一些是隐藏的):

<form method="post" action="object_mod.php"><!-- this is another file -->
<!-- inputs follow -->

因为我想处理两个动作,即。</FORM>删除或保存记录我在表单上的标记之前放置了两个提交按钮:

<input type="submit" id="btnSubmit" value="Save">
<input type="submit" id="btnDelete" value="Delete">
</form>

因为用户应该确认删除,所以我添加了以下onclick事件:

<input type="submit" id="btnDelete" value="Delete" onclick="javascript:deleteRecordConfirm();">

(我也试过没有javascript:and onclick="javascript:deleteRecordConfirm(); return true;"),但它没有提交表单。

JS函数是

function deleteRecordConfirm(){
  if(confirm('Are you sure to delete?')){
    document.getElementById("field_action").value=-1;
    //document.forms[0].submit();
    return true;
  }
}

field_action设置为 -1,所以我在 object_mod.php 中知道我想删除记录而不是保存它。

问题来了,为什么这个表格在删除时不提交

我认为,如果用户禁用了 Javascript 以提交表单,即使没有确认也是很好的,这就是我<INPUT TYPE="submit">用于删除的原因。这是个好主意吗?我正在考虑给两个独立的表单(实际上删除应该只有一个带有记录 id 的隐藏字段)和它们自己的提交按钮,一个用于删除,另一个用于保存。

事实上,该页面可以在某种 Intranet 中运行,我信任的用户和我不怕黑客攻击或其他什么的,但也欢迎任何安全说明。

(我在 Firefox 19.0 上对其进行了测试,Javascript 控制台没有显示任何错误,w3c 验证器说它是一个有效页面)。

4

3 回答 3

2

表单应根据您的代码提交。我发现的唯一一件事是您应该使用/>.

但是...这样,即使取消了确认,也会提交表单。使用form.onsubmit处理程序,如果返回 false,表单将不会提交。

我不认为@B3aT 的答案是正确的,因为这不是无条件地“外部化”的最佳方式可以这么说。许多最简单的就是最好的。

于 2013-02-28T20:46:42.570 回答
1

我认为最好的方法是“外部化”实际的表单发布。

//制作常规按钮(不提交)//调用您自己的功能(保存和删除)//在您完成逻辑之后document.forms["myform"].submit();

另一种解决方案是添加一个名为“删除”的复选框并将“保存”按钮重命名为“完成或执行”。而在服务器端,如果“删除”被激活,那么..删除它。

通常“删除”是“每个条目”级别所必需的(同一用户有多个记录),因此您必须创建一个单独的按钮/链接并最终执行 ajax 请求/访问带有 ?delete=1&id=3 的 URL。

您需要制作自定义是/否窗口或为其使用 jQuery 插件,唯一的浏览器标准是“确认”。

于 2013-02-28T20:41:19.913 回答
0

好的,它起作用了,这实际上是一个非常愚蠢的错误。问题出在这个按钮上,因为它在表单之外。我非常确定我有它,所以我没有查看 PHP 代码,而是从脚本中复制了所有内容,而不是我应该做的 HTML 输出。

正如我正确理解的那样,这条线document.forms[0].submit();起作用了,但这不是因为提交表单的是按钮,而是document.form[0]对象本身。

感谢您的所有回答。我会试试form.onsubmitMarcell 的这个提示。

于 2013-02-28T21:34:52.723 回答