2013-02-28 84 views
0

有一个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: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的隐藏字段),并带有自己的提交按钮,一个用于删除,另一个用于保存。

事实上,该页面可以在某种类型的内联网中工作,我信任的用户以及我不怕黑客攻击或其他任何内容,但是也欢迎任何安全说明。

(我在Firefox 19.0上测试过,Javascript控制台显示没有错误,w3c验证器说这是一个有效的页面)。

+2

这篇文章不是很适合使用stackoverflow的问答格式。我建议如果上面#1有一个问题,请清楚地问清楚。将其他项目留给其他问题。 – 2013-02-28 20:37:01

+0

好的,我会编辑这个。对不起 – Voitcus 2013-02-28 20:38:37

回答

1

表格应根据您的代码提交。我唯一发现的是你应该用/>终止输入标签。

但是...这样,即使确认被取消,表格也会被提交。使用form.onsubmit处理函数,如果返回false,则表单不会提交。

我不认为@ B3aT的答案是正确的,不是无条件的最佳途径“外化”这么说。许多最简单的是最好的。

+0

问题是它根本不提交 - 只有当我把document.forms [0] .submit()。所以它的工作原理,但我不知道为什么我需要这个... – Voitcus 2013-02-28 20:49:23

+0

而我说,看代码,形式_should_提交。事实上,我甚至做了[小提琴](http://jsfiddle.net/tYqj9/6/),看看你的自我。您是否正确终止输入? – marekful 2013-02-28 20:56:27

+0

是的。在上面我输入它不复制/粘贴,并且两个输入都是'<输入xxxx />'。代码执行(显示'confirm()')。 DTD是“<!DOCTYPE html PUBLIC” - // W3C // DTD HTML 4.01 Transitional // EN“”http://www.w3.org/TR/html4/loose.dtd“>'哪个AFAIR没有需要这样的终止,但我有一个习惯就是按照你的方式去做。 – Voitcus 2013-02-28 21:04:41

1

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

//定期按钮(不提交) //调用自己的函数(保存和删除) //你做你的逻辑之后就document.forms["myform"].submit();

另一种解决方案是增加一个名为勾选“删除“并将”保存“按钮重命名为”完成或完成“。而在服务器端,如果“删除”被激活,然后..删除它。

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

您需要制作自定义的yes/no windows或使用jQuery插件,唯一的浏览器标准是“确认”。

+0

你是对的,如果用户禁用Javascript,这个field_action永远不会被设置为-1,所以让用户更改复选框将会一直工作。也感谢你为'确认'的答案。 – Voitcus 2013-02-28 20:51:57

0

OK,它的工作,这实际上非常愚蠢的错误。问题出在这个按钮上,因为它在表单之外。我非常确定,我没有检查PHP代码,而是从脚本中复制所有内容,而不是像我应该完成的那样复制HTML代码。

据我了解这个正确的行document.forms[0].submit();工作,但它不是因为它是按钮谁提交的表格,但document.form[0]对象本身。

谢谢你的答案。我会尝试Marcell提供的form.onsubmit提示。