【问题标题】:Dynamic form fields not sending values动态表单字段不发送值
【发布时间】:2020-10-28 18:55:45
【问题描述】:

在“term”字段中输入的值到达 test.php 但是字段“AttrName”和“Attribute”中的值不会,即使没有添加更多字段,添加更多字段也可以,但不会发送值。

代码:

 <head>
    <script src='https://code.jquery.com/jquery-1.12.4.min.js' integrity='sha384-nvAa0+6Qg9clwYCGGPpDQLVpLNn0fRaROjHqs13t4Ggj3Ez50XnGQqc/r8MhnRDZ' crossorigin='anonymous'></script>
    <script src='https://www.jqueryscript.net/demo/dynamic-forms-fields/js/dynamic-form.js'></script>
    </head>
    <body>
    <form action='test.php' method='post'>
    <input type='text' name='term' size='60' placeholder='term' required /><br />
    <div id='dynamic_form'>
    <input type='text' name='AttrName' placeholder='Attribute name' />: <input type='text' name='Attribute' placeholder='Atributte' /> 
    <a href='javascript:void(0)' id='plus'> &nbsp; +</a> 
    <a href='javascript:void(0)' id='minus'> &nbsp; -</a>
    </div>
    <script>
    var dynamic_form =  $('#dynamic_form').dynamicForm('#dynamic_form','#plus', '#minus', {
    // the maximum number of form fields
        limit: 10,
    });
    </script>
    <br />
    <input type='submit' name='submit' id='submit' />
    </form>
    </body>

UNDATE

test.php:

<?php
echo $term=$_POST['term']."<br />";
echo $AttrName=$_POST['AttrName']."<br />";
echo $Attribute=$_POST['Attribute']."<br />";
?>

【问题讨论】:

  • dynamicForm() 甚至在这里做什么,因为$('#dynamic_form') 什么也没找到?你能演示表单提交时的状态,在它被这个 JavaScript 修改之后?或者提供一个可运行的示例来演示?
  • 在 PHP 中我会运行 print_r($_POST); 来查看发布的内容。
  • 字段名称生成如下:dynamic_form[dynamic_form][0][AttrName]
  • 以下两个答案都是正确的,但您还需要将 id 属性添加到您的 AttrName 和 Attribute 输入中,否则 dynamic-form.js 会抱怨并且只发送一个条目。
  • @RobRuchte,是的,你是对的,我会尝试找出如何做到这一点!谢谢大家!

标签: javascript php forms


【解决方案1】:

您的表单似乎正确地提交了值,但是您在 PHP 中错误地访问了 dynamic-form 值:

dynamic-form 会创建一个嵌套数组,因此您需要使用以下引用:

echo $AttrName=$_POST['dynamic_form']['dynamic_form'][0]['AttrName']."<br />";
echo $Attribute=$_POST['dynamic_form']['dynamic_form'][0]['Attribute']."<br />";

由于您的表单是动态生成的并且可以有任意数量的字段,因此您需要循环 $_POST['dynamic_form']['dynamic_form'] 例如

forEach($_POST['dynamic_form']['dynamic_form'] as $form) {
  echo $form['AttrName'];
  echo $form['Attribute'];
}

来自@Rob Ruchte 的评论:

还将id 属性添加到您的html 以使dynamic-form 正常工作:

<div id='dynamic_form'>
  <input type='text' id='attrName' name='AttrName' placeholder='Attribute name' />:
  <input type='text' id='attribute' name='Attribute' placeholder='Atributte' /> 
  <a href='javascript:void(0)' id='plus'> &nbsp; +</a> 
  <a href='javascript:void(0)' id='minus'> &nbsp; -</a>
</div>

【讨论】:

    【解决方案2】:

    您可以像这样遍历dynamic_form 数组:

    $dynamic_form = $_POST["dynamic_form"]["dynamic_form"];
    
    foreach($dynamic_form as $row){
      echo $row["AttrName"];
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-11-17
      • 2019-09-15
      • 2011-09-28
      • 1970-01-01
      • 1970-01-01
      • 2013-09-14
      • 1970-01-01
      相关资源
      最近更新 更多