0

你好开发人员我正在使用java脚本函数动态创建2个文本框和1个选择框......现在我想将创建的(n)字段的值发布到数据库(相关表)中,因为我正在使用codeigniter所以我发布脚本和代码

这是我正在使用的简单 java 脚本

<script>
  var counter=1;
  function generateRow() {
    var count="<font color='red'>"+counter+"</font>";
    var temp ="<p>&nbsp;&nbsp;&nbsp;&nbsp;<div class='_25'><input type='textbox' id='textbox' name='stop"+counter+"' placeholder='Stop Name'></input></div>&nbsp;&nbsp;&nbsp;<div class='_25'><input type='textbox' id='textbox' name='timing"+counter+"' placeholder='Timing'></input></div>&nbsp;<div class='_25'><select id='ampm"+counter+"' name='ampm"+counter+"'><option>a.m</option><option>p.m</option></select>  </div>";

    var newdiv = document.createElement('div');
    newdiv.innerHTML = temp + count;

    var yourDiv = document.getElementById('div');
    yourDiv.appendChild(newdiv);
    counter++;
  }
</script>

这是我对 php 文件的划分

 <div id="div">
 </div>

 <p>&nbsp;</p>
 <div class="_25">
    <p>
      <input type="button" name="button" class="button red" id="button" value="Add"  onclick="generateRow() "/></a>
    </p>
 </div>
 <input type='button' value='Remove Button' id='removeButton'>

这是我的相关表字段

route_number    stop_name   am_pm   timing
4

3 回答 3

4

我最喜欢的方法是尽可能多地使用 DOM。除非绝对必要,否则不要使用计数器(它们只是错误的来源)。这是一个简单的例子:

Html/JS/jQuery(可能会有所不同,我制作了这个以使其易于理解):

<form method="POST" id="theForm">
    <div id="fields">
        <input type="text" name="fields[]"/>
    </div>
    <input type="button" id="addField" value="Add Field"/>
</form>
<script type="text/javascript">
    $(document).ready(function() {
        $('#addField').click(function() {
            $('#fields').append(
                $('<input type="text" name="fields[]"/>')
            );
        })
    });
</script>

请注意我不需要使用任何类型的计数变量。就像 PHP 一样,您可以创建一个 POST 变量数组,而无需指定索引,[]并且服务器(或浏览器?我不确定)将为您构建数组。字段在页面上呈现的顺序<input />将是它们通过提供给您的 PHP 的顺序$_POST。这段代码...

foreach ($_POST['fields'] as $fieldIndex => $fieldValue) {
    doStuff($fieldValue);
}

... 将按照添加的顺序处理每个字段。您甚至可以使用 JavaScript重新排序删除输入,这将反映在$_POST. 这种方法与 JSON 编码相结合,可以快速轻松地处理多输入、自由格式的字段。

更新:

将上面的代码应用到您的用例需要一个可能不明显的小添加。您需要为三个输入(停止、计时和安培)中的每一个创建一个数组,如下所示:

<form method="POST" id="theForm">
    <div id="fields">
        <input type="text" name="fields[stop][]"/>
        <input type="text" name="fields[timing][]"/>
        <select name="fields[ampm][]">
            <option value="am">AM</option>
            <option value="pm">PM</option>
        </select>
        <br/>
    </div>
    <input type="button" id="addField" value="Add Field"/>
</form>
<script type="text/javascript">
    $(document).ready(function() {
        $('#addField').click(function() {
            $('#fields').append(
                $('<input type="text" name="fields[stop][]"/>'),
                $('<input type="text" name="fields[timing][]"/>'),
                $('<select name="fields[ampm][]"><option value="am">AM</option><option value="pm">PM</option></select>'),
                $('<br/>')
            );
        })
    });
</script>

使用一些测试数据填写此表格会产生以下数组:

[fields] => Array
(
    [stop] => Array
        (
            [0] => aaa
            [1] => bbb
        )

    [timing] => Array
        (
            [0] => 1111
            [1] => 2222
        )

    [ampm] => Array
        (
            [0] => am
            [1] => pm
        )

)

在 PHP 中处理它需要一个简单的老式循环:

$numFields = count($_POST['fields']['stop']);

for ($i = 0; $i < $numFields; $i++) {

    // Pack the field up in an array for ease-of-use.
    $field = array(
        'stop' => $_POST['fields']['stop'][$i],
        'timing' => $_POST['fields']['timing'][$i],
        'ampm' => $_POST['fields']['ampm'][$i]
    );

    saveToDatabase($field);
}

不幸的是,我现在没有时间确保所有这些都是正确的。应该是,如果不是,它可能仍然有帮助:)。我会在几个小时后回来查看。

于 2013-04-08T19:17:13.380 回答
0

命名您的动态输入框"stop["+counter+"]"(使用大括号作为名称的一部分),而不是在名称的末尾添加一个计数器。然后在您的发布数据中,$_POST['stop']将是一个值数组,您可以使用计数器作为子数组中的键进行 foreach 循环。并将$_POST['stop'][1]对应于$_POST['timing'][1]...等。

于 2013-04-08T19:04:22.663 回答
0

您可以构造以下 HTMLinput字段:

<input type="text" name="data[]" />
<input type="text" name="data[]" />
<input type="text" name="data[]" />
// ...

data当你var_dump($_REQUEST['data']). 试试看。您甚至不需要索引data[]数组,因为 PHP 会为您完成。

您可能希望使用循环构造处理您的$_REQUEST['data']$_POST['data']数组:foreach

foreach($_REQUEST['data'] as $data){
  // $data is the corresponding input field's value
}
于 2013-04-08T19:10:42.890 回答