我决定要完成我的任务,我需要获取上传到我第一页的 CSV 文件,并从中构建一个表单,用 CSV 值填充输入。
我有一个正常的 CSV 上传,但这是为了查看 CSV 并在保存之前对字段进行编辑。我有一个 while 循环,我认为我应该在其中构建表单。唯一的诀窍是我构建了一个 CSV 数据数组,它在上传时处理它,它有 229 个元素长。我需要构建表单名称来反射(reflect)它,所以我将基本上命名 229 个表单字段,这很好。这是单击按钮时成功将 CSV 加载到表中的当前代码:
$file = $_FILES["file"]["tmp_name"];
$handle = fopen($file, "r");
$maxPreviewRows = PHP_INT_MAX; // this will be ~2 billion on 32-bit system, or ~9 quintillion on 64-bit system
$hasHeaderRow = true;
echo '<table>';
/*WE WILL NEED TO QA CONDITIONS AND HIGHLIGHT IN RED HERE. ALSO NEED BORDER STYLINGS*/
if ($hasHeaderRow) {
$headerRow = fgetcsv($handle);
echo '<thead><tr>';
foreach($headerRow as $value) {
echo "<th>$value</th>";
}
echo '</tr></thead>';
}
echo '<tbody>';
$rowCount = 0;
while ($row = fgetcsv($handle)) {
echo '<tr>';
foreach($row as $value) {
echo "<td>$value</td>";
}
echo '</tr>';
if (++$rowCount > $maxPreviewRows) {
break;
}
}
echo '</tbody></table>';
}
因此,这成功地显示了整个 CSV(6 行,每行 229 列)以供预览。现在我只需要让每个字段都可编辑,然后在提交时插入整个表单。我知道如何将表单插入数据库,所以现在我只需要了解如何在 while 循环中构建表单并为每个输入创建名称,以及如何使用实际 CSV 数据填充输入。
最佳答案
这是创建表单的方法。每个表单元素都被命名为 row1col1、row1col2、ro1col3 等...
$file = $_FILES["file"]["tmp_name"];
$handle = fopen($file, "r");
$maxPreviewRows = PHP_INT_MAX; // this will be ~2 billion on 32-bit system, or ~9 quintillion on 64-bit system
$hasHeaderRow = true;
echo '<form>\n';
echo '<table>';
/*WE WILL NEED TO QA CONDITIONS AND HIGHLIGHT IN RED HERE. ALSO NEED BORDER STYLINGS*/
if ($hasHeaderRow) {
$headerRow = fgetcsv($handle);
echo '<thead><tr>';
foreach($headerRow as $value) {
echo "<th>$value</th>";
}
echo '</tr></thead>';
}
echo '<tbody>';
$rowCount = 0;
while ($row = fgetcsv($handle)) {
$colCount = 0;
echo '<tr>';
foreach($row as $value) {
echo "<td><input name='row".$rowCount."col".$colCount."' type='text' value='$value' /></td>";
$colCount++;
}
echo '</tr>';
if (++$rowCount > $maxPreviewRows) {
break;
}
}
echo '</tbody></table>';
echo '<input type=\'submit\' value=\'Submit\' >';
echo '</form>';
关于php - 使用上传的 CSV 中的值创建/填写表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43773735/