Javascript 在php表单中处理动态数量的输入时遇到问题

Javascript 在php表单中处理动态数量的输入时遇到问题,javascript,php,html,forms,postgresql,Javascript,Php,Html,Forms,Postgresql,因此,我做了一些研究,但由于缺乏php方面的经验,我还没有找到一个非常有效的解决方案。我有一个表单中的html表,我可以用Javascript动态地向其中添加行,所以当我提交表单时,我希望能够处理未知数量的数据。这就是我的表格 <form action = "getCreditReport.php" method = "post"> <tbody> <tr id='addr0' data-id="0" class="hidden"&

因此,我做了一些研究,但由于缺乏php方面的经验,我还没有找到一个非常有效的解决方案。我有一个表单中的html表,我可以用Javascript动态地向其中添加行,所以当我提交表单时,我希望能够处理未知数量的数据。这就是我的表格

 <form action = "getCreditReport.php" method = "post">
      <tbody>
          <tr id='addr0' data-id="0" class="hidden">
              <td data-name="courseDropdown[]">
                  <select name="courseDropdown[]">
                      <option value = "">Select Course</option>

                          <?php
                              $dbconn = pg_connect("host=localhost dbname=ourDB user=postgres password=*******")
                               or die('Could not connect: ' . pg_last_error());

                               $stat = pg_connection_status($dbconn);
                               if ($stat === PGSQL_CONNECTION_OK) {
                                   echo 'Connection status ok';
                               } else {
                                     echo 'Connection status bad';
                                 }

                               $result = pg_query($dbconn, "SELECT id, title FROM courses");
                while ($row = pg_fetch_row($result)) {
                    echo "<option value=".$row[0].">".$row[1]."</option>";
                }
                pg_close($db);
                header('Content-type: application/json');
                echo json_encode($result);
                ?>

              <td data-name="yearDropdown[]">
                  <select name="yearDropdown[]">
                      <option value = "">Select Year Taken</option>
                      <option value = "2015">2015</option>
                      <option value = "2014">2014</option>
                      <option value = "2013">2013</option>
                      <option value = "2012">2012</option>
                      <option value = "2011">2011</option>
                      <option value = "2010">2010</option>
                      <option value = "2009">2009</option>
                      <option value = "2008">2008</option>
                   </select>
               </td>

               <td data-name="selterm[]">
                   <select name="selterm[]">
                       <option value = "">Select Term</option>
                       <option value = "1">Spring</option>
                       <option value = "2">Fall</option>
                       <option value = "3">Winter</option>
                       <option value = "4">Summer</option>
                   </select>
               </td>
               <td data-name="del">
               <button nam"del0" class='btn btn-danger glyphicon glyphicon-remove row-remove'></button>

                </td>
            </tr>
        </tbody>
        <input type= "submit" value = "Submit">
    </form>
我添加行的函数会复制每个选择框的名称,因为它们是一个数组,我希望在处理它们时,我可以在getCreditReport.php中执行类似的操作

<html>
<body>
`<?php

    $dbconn = pg_connect("host=localhost dbname=ourDB user=postgres password=*****") 
    or die('Could not connect: ' . pg_last_error()); 
        // For as many rows as the user submits
        for ($i = 0; $i < count($_POST['courseDropdown']); $i++) {
            $courseDropdown = $_POST['courseDropdown'][$i];  // Get this course from the array

            // Do some PHP Stuff Here, maybe...
            echo $courseDropdown;
        }
        pg_close();

    ?>
</body>
</html>
我希望$_POST['courseDropdown']将是用户在提交之前添加的行中所有选定选项的值的数组,但当我尝试运行它时,并没有任何响应

再说一次,我对PHP非常缺乏经验,所以请对我放轻松,但这里可能发生了什么?这是解决问题的好方法吗?如果不是,还有什么更好的方法?提前谢谢

下面是添加动态行的代码

<script>    
    function addDynamicRows(table) {
            // Dynamic Rows Code

            // Get max row id and set new id
            var newid = 0;
            $.each(table.find("tr"), function () {
                if (parseInt($(this).data("id")) > newid) {
                    newid = parseInt($(this).data("id"));
                }
            });
            newid++;

            var tr = $("<tr></tr>", {
                id: "addr" + newid,
                "data-id": newid
            });

            // loop through each td and create new elements with name of newid
            $.each(table.find("tbody tr:nth(0) td"), function () {
                var cur_td = $(this);

                var children = cur_td.children();

                // add new td and element if it has a nane
                if ($(this).data("name") != undefined) {
                    var td = $("<td></td>", {
                        "data-name": $(cur_td).data("name")
                    });

                    var c = $(cur_td).find($(children[0]).prop('tagName')).clone().val("");
                    // Here we won't make the name unique because we want each select name to be
                    // part of the same array. e.x courseDropdown[] for each one will push each 
                    // value to an array that will be passed
                    c.attr("name", $(cur_td).data("name"));
                    c.appendTo($(td));
                    td.appendTo($(tr));
                } else {
                    var td = $("<td></td>", {
                        'text': table.find('tr').length
                    }).appendTo($(tr));
                }
            });

            // add the new row
            $(tr).appendTo(table);

            $(tr).find("td button.row-remove").on("click", function () {
                $(this).closest("tr").remove();
            });
        }
    </script>

在getCreditReport.php中,在$dbconn位之前,可以执行如下操作:var\u dump$\u POST;Die复制行的函数是什么样的?你试过var_dump$\u POST来查看提交了什么吗?var_dump$\u POST给我:array3{[courseDropdown]=>array1{[0]=>string0}[yearDropdown]=>array1{[0]=>string0}……看起来所选的值实际上并没有注册,我确实为所有选项选择了值。我将更新我的帖子,以包含add row函数的代码。确定使用该函数向表中添加一组行,查看源代码或使用Inspect元素/Firebug,并查看新选项上的名称设置。我感觉名字没有定下来。我已经检查过了,只是再检查了一遍。在getCreditReport.php中,在$dbconn位之前,可以执行如下操作:var\u dump$\u POST;Die复制行的函数是什么样的?你试过var_dump$\u POST来查看提交了什么吗?var_dump$\u POST给我:array3{[courseDropdown]=>array1{[0]=>string0}[yearDropdown]=>array1{[0]=>string0}……看起来所选的值实际上并没有注册,我确实为所有选项选择了值。我将更新我的帖子,以包含add row函数的代码。确定使用该函数向表中添加一组行,查看源代码或使用Inspect元素/Firebug,并查看新选项上的名称设置。我感觉名字没有定下来。我已经检查过了,只是再检查了一遍。所有的s都被恰当地命名。