代码之家  ›  专栏  ›  技术社区  ›  popeye

PHP通过表单发布/提交错误信息

  •  0
  • popeye  · 技术社区  · 7 年前

    我动态生成表单,每个表单都有一个ID作为GET变量。假设有两种形式:

    <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
    

    对于这两种形式。在提交这两个表格时,我看到了相同的帖子请求。

    PS:我正在修改一个Prestashop模块。

    4 回复  |  直到 7 年前
        1
  •  0
  •   Don't Panic    7 年前

    如果在页面加载后动态添加表单,并使用事件处理程序提交表单,则需要使用事件委派。

    事件处理程序必须附加到页面加载中存在的元素。您不能将处理程序附加到稍后在页面加载后动态添加的元素。

    解决这个问题的方法是使用 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');
    }
    
        2
  •  0
  •   Mohammed Amin Sayyed    7 年前

    这应该有效:

    <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>
    
        3
  •  0
  •   popeye    7 年前

    我感谢大家抽出时间。

    最后一步:我想我不能使用Ajax,因为每次我发布帖子,它都会得到 id 上次生成的 form 所以如果有 n 表单数量,每个提交按钮的发布将如下所示:

    http://website.com/controller?id=n
    

    如果只有一张表格,那就不会有问题。但是自从 事件可靠,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。

        4
  •  -1
  •   Venugopal    7 年前

    当我们执行代码时,您将获得两个提交按钮,第一个用于第一个表单,第二个用于第二个表单。对于每个表单,表单标记中都指定了相应的操作,因为默认情况下,表单标记中没有定义方法,因此它会将此视为请求获取,您可以使用$\u request或$\u GET访问提交值。如果您需要一种安全的方式,您可以尝试使用POST并通过$\u POST访问千个值。

    例如:如果我们在php测试文件夹中执行上述表单并提交,您将得到如下结果 http://localhost/test/website.com/controller?submitting=Submit

    如果您在html中创建相同的内容,并提交到文件夹路径“website.com/controller?submiting=submit”,则将追加此内容。