0

我很难理解从表单中提取信息并保存到服务器上的 csv 的脚本。问题是,我有一个包含多个表格的表格,在这些表格中有一个“+”按钮来添加另一行。我正在使用 jquery 来做到这一点。这工作正常,还将行数保存到隐藏输入中,并将 _0、_1、_2 分配给 textarea 名称。

我真的很困惑如何根据用户添加的行数使用 PHP 为这些变量动态分配变量。这是我的表格:

<table style="width:100%;" id="directEmployees">
<tbody>
    <tr>
        <td>Name</td>
        <td>Time Start</td>
        <td>Time Finish</td>
        <td>Job Description</td>
        <td>Plant/Machinery Issued/Used</td>
        <td>P.P.E Issued?</td>
        <td>Materials Issued/Used</td>
    </tr>
    <tr>
        <td width="20%"><textarea style="width:100%;" name="directName_0" id="directName_0"></textarea></td>
        <td width="10%"><textarea style="width:100%;" name="directTimeStart_0" id="directTimeStart_0"></textarea></td>
        <td width="10%"><textarea style="width:100%;" name="directTimeEnd_0" id="directTimeEnd_0"></textarea></td>
        <td width="20%"><textarea style="width:100%;" name="directJob_0" id="directJob_0"></textarea></td>
        <td width="15%"><textarea style="width:100%;" name="directPlant_0" id="directPlant_0"></textarea></td>
        <td width="10%"><textarea style="width:100%;" name="directPPE_0" id="directPPE_0"></textarea></td>
        <td width="15%"><textarea style="width:100%;" name="directMaterials_0" id="directMaterials_0"></textarea></td>
    </tr>
</tbody>
</table>
<h2 id="addEmployee" style="cursor:pointer;">+</h2>

<button type="submit">Submit</button>

</form>

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js" type="text/javascript"></script>
<script type="text/javascript">

$(document).ready(function(){
    var additional_rows = 0;
    $('#addEmployee').click(function() {
        additional_rows = additional_rows + 1;
        $('#rowsEmployee').val(additional_rows);

        var addTable = '<tr><td width="20%"><textarea style="width:100%;" name="directName_' + additional_rows + '" id="directName_' + additional_rows + '"></textarea></td><td width="10%"><textarea style="width:100%;" name="directTimeStart_' + additional_rows + '" id="directTimeStart_' + additional_rows + '"></textarea></td><td width="10%"><textarea style="width:100%;" name="directTimeEnd_' + additional_rows + '" id="directTimeEnd_' + additional_rows + '"></textarea></td><td width="20%"><textarea style="width:100%;" name="directJob_' + additional_rows + '" id="directJob_' + additional_rows + '"></textarea></td><td width="15%"><textarea style="width:100%;" name="directPlant_' + additional_rows + '" id="directPlant_' + additional_rows + '"></textarea></td><td width="10%"><textarea style="width:100%;" name="directPPE_' + additional_rows + '" id="directPPE_' + additional_rows + '"></textarea></td><td width="15%"><textarea style="width:100%;" name="directMaterials_' + additional_rows + '" id="directMaterials_' + additional_rows + '"></textarea></td></tr>';

        $('#directEmployees tbody').append(addTable);
    });
});

</script>

任何帮助将不胜感激。

4

2 回答 2

0

将表单提交到您的 php 脚本后,将填充 $_GET 或 $_POST 数组,具体取决于表单方法..因此您需要处理数组,例如...

foreach($_POST as $key=>value) {
  //process value 
}
于 2013-09-26T09:50:20.923 回答
0

PHP 能够通过使用方括号从具有单个名称的多个输入中创建一个数组。我不完全确定您要完成什么,但如果行数是动态的,您可能希望避免给每个行一个唯一的名称。

您可能会考虑类似于以下的命名约定:

<textarea style="width:100%;" name="directTimeStart[]" id="directTimeStart_0"></textarea></td>
<textarea style="width:100%;" name="directTimeEnd[]" id="directTimeEnd_0"></textarea></td>
<textarea style="width:100%;" name="directJob[]" id="directJob_0"></textarea></td>
<textarea style="width:100%;" name="directPlant[]" id="directPlant_0"></textarea></td>
<textarea style="width:100%;" name="directPPE[]" id="directPPE_0"></textarea></td>
<textarea style="width:100%;" name="directMaterials[]" ... ></td>

这将使您完全忘记客户端的编号,并将任务转移到 PHP。在 PHP 中,您可以使用 访问第一行,使用 访问$_GET[directTimeStart][0]第二行$_GET[directTimeStart][1],依此类推。

$count = count($_POST['directTimeStart']);
for ($i = 1; $i <= $count; $i++) {
 $csv .= $_POST[directTimeStart][$i] . ',';
 $csv .= $_POST[directTimeEnd][$i] . ',';
 $csv .= $_POST[directJob][$i] . ',';
 $csv .= $_POST[directPlan][$i] . ',';
 $csv .= $_POST[directPPE][$i] . ',';
 $csv .= $_POST[directMaterials][$i] . '\n';
}

return $csv;
于 2013-09-26T09:50:48.593 回答