2013-09-26 53 views
0

我在使用从表单获取信息并保存到服务器上的csv的脚本时遇到了一些麻烦。问题是,我有一个有多个表格的表格,在这些表格中有一个“+”按钮来添加另一行。我正在使用jQuery来这样做。这可以正常工作,并将行数保存到隐藏输入中,并为textarea名称分配_0,_1,_2。PHP将变量分配给多个动态表单行

我真的很困惑,我将如何使用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> 

任何帮助将不胜感激。

回答

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; 
+0

这是伟大不过,我正在寻找一种方法来检测多少行已添加并为它们分配变量,以便我可以将它们处理为CSV ... – kala233

+0

您可以在数组上使用count()或foreach()。无论您想要对数据进行处理,处理为CSV都无关紧要。 –

+0

我会试试这个!谢谢! – kala233

0

一旦表单提交到您的php脚本,$ _GET或$ _POST数组将被填充,这取决于表单的方法..所以你将需要通过数组工作,像...

foreach($_POST as $key=>value) { 
    //process value 
}