PHP通过表单发布/提交错误信息
我动态生成FORMS,每个表单都有一个ID作为GET变量。所以我们可以说有两种形式:PHP通过表单发布/提交错误信息
<form action='website.com/controller?id=1'>
<input type="submit" name="submitting">
</form>
<form action='website.com/controller?id=2'>
<input type="submit" name="submitting">
</form>
现在,由于一些奇怪的原因,我看到POST请求,在我的控制台,如:
http://website.com/controller?id=2
对于这两种形式。在提交这两个表单时,我会看到相同的POST请求。 PS:我正在修改一个Prestashop模组。
如果你是动态添加页面加载后的形式,并且使用事件处理程序来提交他们,你需要使用事件代表团。
事件处理程序必须附加到页面加载时存在的元素。在页面加载后,您无法将处理程序附加到稍后动态添加的元素。
解决此问题的方法是使用event delegation。例如:
$('form').on('submit', function() {
// This will handle any form which exists at page load. Any form
// dynamically added later will not be handled.
}
$('body').on('submit', '#someFormID', function(e) {
// This is attached to the parent body element, which of course exists
// on load, and will handle submission of anything in the body, even
// those which did not exist at page load. You can then filter to
// match only elements matching the next parameter - eg in this case
// handle only something with id 'someFormID'.
}
$('body').on('submit', function(e) {
// You can also dynamically work out which form has been submitted
var $button = $(e.target),
$form = $button.closest('form'),
action = $form.attr('action');
}
这应该工作:
<form action='website.com/controller' method='get'>
<Input type='hidden' name='id' value='1'>
<input type="submit" name="submitting"> </form>
<form action='website.com/controller' method='get'>
<Input type='hidden' name='id' value='2'>
<input type="submit" name="submitting"> </form>
它为什么要工作?问题中报告的问题是行动和方法都没有得到尊重。这是如何解决这个问题的? – Quentin
当我们执行您将获得两个提交按钮的代码,第一个是第一形态和第二个是第二种形式。对于每个表单,在表单标签中指定了相应的操作,因为默认情况下方法未在表单标签中定义,因此它会将此视为请求GET,您可以使用$ _REQUEST或$ _GET访问提交值。如果你需要一个安全的方式,你可以尝试使用POST并通过$ _POST访问这些值。
例如:如果我们执行的PHP测试文件夹上面的表格并提交,你会越来越喜欢这个像 http://localhost/test/website.com/controller?submitting=Submit
如果您在HTML创建同样的事情,提交的文件夹路径“website.com/控制器?提交=提交“这将被追加。
为了防止自动提交,您可以在表单中添加隐藏的令牌。
这似乎是一些有关表格的随机事实,它不能解释问题中描述的行为或解决所描述的问题*。 – Quentin
你是对的,我忽略了正确地阅读问题并假设他的问题,正如前面提到的,我根据不完整的上下文做出了假设,并且未能正确理解这一点:“现在,出于一些奇怪的原因,我看到POST请求,控制台,如: http://website.com/controller?id=2“这清楚地表明他没有直接通过HTTP提交表格,如果他是他的问题不可能是他所描述的。我删除了我的整个答案。 –
我感谢大家花时间。
最后一步:我想我不能使用Ajax,因为每次我帖子的时候,它得到的最后id
产生form
因此,如果有n
多种形式,POST每一个提交按钮会像:
http://website.com/controller?id=n
如果只有大约一个表格,那就不成问题了。但由于form
发生的可靠性,AJAX失败。
顺便说一句,这是我一直在使用Ajax代码:
jQuery('form[name=someclass]).submit(function(e){
$.ajax({
url: $('form[name=st_blog_comment_form]').attr('action'),
type: 'POST',
headers: { "cache-control": "no-cache" },
dataType: 'json',
data: $('form[name=someclass]').serialize(),
cache: false,
success: function(json){}
)};
或许,我没有用ajax正常。
如果你想得到它的工作,请看看我的答案。你所显示的jQuery代码完全不符合我描述的问题。您的选择器只能处理页面加载时存在的任何表单 - 而不是稍后动态添加的任何表单。此外,由于您用于查找网址的选择器只会匹配您的“st_blog_comment_form”表单,而不是您当前提交的表单,所以它们都会POST到同一个单一网址。试试我的代码,并让我知道你是否有任何问题 - 你快到了! :-) –
在页面加载时,每个表单(它们都是动态生成的)都存在,在开发工具中很容易检查它们的'form'。 – chandlerbing
将每个表格'名称'更改为一个唯一的值,然后测试它 –
@我不能这样做。就像我说的,这些表格是动态生成的。 – chandlerbing
您提供的代码单独存在,不会有您描述的行为。如果不涉及JavaScript,我想不出有什么办法可以得到你描述的效果。你需要提供一个**完整的** [mcve]。 – Quentin