我有一个CSV文件,我用来填充表格 - 工作正常。该表是一个查询表,因此用户可以选择他们想要更多信息的项目并提交电子邮件。
在此电子邮件中,我需要包含商品详情。到目前为止,我只能在要提交的行中获得“1”字段的值。
在我的搜索中,我找到了一种方法,可以将行中所需的字段转换为一行,但我似乎无法弄清楚如何将每一行单独用作复选框的值。
这是我的代码:
$file = fopen('myfile.csv', 'r');
$fields = array();
if ($file) {
while (($data = fgetcsv($file)) !== false) {
if(empty($fields)) {
$fields = $data;
continue;
}
$row = array_combine($fields, $data);
$output = sprintf("%s - %s - %u <br />\n",
$row['make'],
$row['model'],
$row['serial']);
echo $output;
}
fclose($file);
}
这会创建一个像......
这样的列表Tanglewood - TW66 - 311592807
MICHAEL KELLY - MKDF4FL - 311595895
Epiphone - DR500MCE - 311599764
ALVAREZ - MD70CE - 311603486
FENDER - *CD220SCE ASH BURL - 311606198
哪个是完美的......但是在表格中我有复选框来选择查询。该复选框只需要具有该行的值,因此我需要计算行数,然后为我们所在的任何数字行抓取1行。
像echo $output[3];
这样的东西会给我
Epiphone - DR500MCE - 311599764
编辑---
<form action="<?php echo $_SERVER['REQUEST_URI'] ?>" method="post">
<table class="tablesaw" data-tablesaw-sortable data-tablesaw-sortable-switch>
<thead>
<tr>
<th scope="col" data-tablesaw-sortable-col data-tablesaw-priority="2"></th>
<th scope="col" data-tablesaw-sortable-col data-tablesaw-priority="persist">Make</th>
<th scope="col" data-tablesaw-sortable-col data-tablesaw-priority="1">Model</th>
<th scope="col" data-tablesaw-sortable-col data-tablesaw-priority="2">Serial</th>
<th scope="col" data-tablesaw-sortable-col data-tablesaw-priority="3">RPD</th>
<th scope="col" data-tablesaw-sortable-col data-tablesaw-priority="4">Retail</th>
<th scope="col" data-tablesaw-sortable-col data-tablesaw-priority="5">Net Price</th>
<th scope="col" data-tablesaw-sortable-col data-tablesaw-priority="6">Photo</th>
</tr>
</thead>
<tbody>
<?php
$file = fopen('file.csv', 'r');
$fields = array();
if($file)
{
while(($data=fgetcsv($file, ',')) !== false)
{
if(empty($fields))
{
$fields = $data;
continue;
}
$row = array_combine($fields, $data);
$output[] = sprintf("%s - %s - %u <br />\n", $row['make'], $row['model'], $row['serial']);
}
fclose($file);
}
for($x=0; $x < count($output); $x++)
{
// Build lines of checkbox rows here
echo($output[$x]);
}
?>
<?php
$f = fopen("file.csv", "r");
$columns1 = array(1);
$columns2 = array(2,3,4,5,6);
$columns3 = array(7);
$flag = true;
while (($line = fgetcsv($f)) !== false) {
if($flag) { $flag = false; continue; }
echo "<tr>";
foreach ($line as $index=>$val) {
if (in_array($index+1, $columns1)) {
echo("\t<td><input type='checkbox' name='checkboxvar[]' value='$val'></td>\r\n");
}
if (in_array($index+1, $columns1)) {
echo("\t<td>$val</td>\r\n");
}
if (in_array($index+1, $columns2)) {
echo("\t<td>$val</td>\r\n");
}
if (in_array($index+1, $columns3)) {
if($val == "0"){
echo("\t<td></td>\r\n");
} else {
echo("\t<td><a class=' wpex-lightbox' href='http://mirc.pixelcraftstudio.net/wp-content/uploads/mirc_inv_pics/$val.jpg' target='_self' data-type='image'><img style='width:24px; height:24px; margin-top:8px;' src='http://mirc.pixelcraftstudio.net/wp-content/themes/mirc-child/tablesaw/icon-instagram.jpg'/></a></td>\r\n");
}
}
}
echo "</tr>\n";
}
fclose($f);
?>
</tbody>
</table>
<input style="position:fixed; bottom:0px; left:50%; font-size:16px; margin- left:-155px;" name="submit" type="submit" value="Contact Us About Your Selected Items" />
</form>
答案 0 :(得分:0)
我认为你需要创建一个数组,目前你的代码不会这样做。尝试更改此行:
$output = sprintf("%s - %s - %u <br />\n", $row['make'], $row['model'], $row['serial']);
为:
$output[] = sprintf("%s - %s - %u <br />\n",$row['make'], $row['model'], $row['serial']);
现在:
echo $output[3];
等应包含您的数据。
您可能需要像这样构建数组:
$output[] = array("make"=>"$row['make']", "model"=>"$row['model']", "serial"=>"$row['serial']");
现在:
echo $output[3]['make'];
等应包含您的'make'数据,对每个数组元素重复('model'和'serial')。
编辑 - 新代码
我没有解决你的桌子建筑需求。我所做的只是将数据转换为您请求的格式。我的原始代码有几个问题,它没有像你发布的那样运行。 $ fields包含7个元素,$ data包含6个元素。因此,array_combine()失败。我不得不在csv文件的最后一个元素中添加'null'。我将您的示例数据加载到Excel中并从中创建了一个csv文件。此外,键是区分大小写的,因此$ row ['make']必须变为$ row ['Make'],....等。数组基于0,因此echo($output[2])
将输出Epiphone - DR500MCE - 311599764
。我希望这符合您的需求。
$file = fopen('inventory.csv', 'r');
$fields = array();
if($file)
{
while(($data=fgetcsv($file, ',')) !== false)
{
if(empty($fields))
{
$fields = $data;
continue;
}
$row = array_combine($fields, $data);
$output[] = sprintf("%s - %s - %u <br />\n", $row['Make'], $row['Model'], $row['Serial']);
}
fclose($file);
foreach($output as $key=>$value)
{
// Build lines of checkbox rows here
echo($key . ': '. $value);
}
}
修改 - 添加
这很简单,使用for循环而不是foreach循环,如下所示:
for($x=0; $x < count($output); $x++)
{
// Build lines of checkbox rows here
echo($output[$x]);
}
这样,您还可以通过将数字值添加到ID来更改每个复选框的id属性。
编辑 - 上次
这是一个完整的网页,它将表格构建为您之前发布的csv页面,并将所需的值放在复选框中。要使生活变得简单,唯一要做的就是更新Excel文件以包含照片路径/名称。务必在该字段中包含开始和结束img标记,你应该好好去。
<!DOCTYPE HTML>
<html>
<head>
<title>Sample Table</title>
</head>
<body>
<form action="<?php echo $_SERVER['REQUEST_URI'] ?>" method="post">
<table class="tablesaw" data-tablesaw-sortable data-tablesaw-sortable-switch>
<thead>
<tr>
<th scope="col" data-tablesaw-sortable-col data-tablesaw-priority="2">Select</th>
<th scope="col" data-tablesaw-sortable-col data-tablesaw-priority="persist">Make</th>
<th scope="col" data-tablesaw-sortable-col data-tablesaw-priority="1">Model</th>
<th scope="col" data-tablesaw-sortable-col data-tablesaw-priority="2">Serial</th>
<th scope="col" data-tablesaw-sortable-col data-tablesaw-priority="3">RPD</th>
<th scope="col" data-tablesaw-sortable-col data-tablesaw-priority="4">Retail</th>
<th scope="col" data-tablesaw-sortable-col data-tablesaw-priority="5">Net Price</th>
<th scope="col" data-tablesaw-sortable-col data-tablesaw-priority="6">Photo</th>
</tr>
</thead>
<tbody>
<?php
$file = fopen('inventory.csv', 'r');
$fields = array();
if($file)
{
while(($data=fgetcsv($file, ',')) !== false)
{
if(empty($fields))
{
$fields = $data;
continue;
}
$output[] = array_combine($fields, $data);
}
fclose($file);
foreach($output as $main)
{
echo(' <tr>' . PHP_EOL);
echo(" <td><input type='checkbox' name='checkboxvar[]' value='{$main['Make']} - {$main['Model']} - {$main['Serial']}'></td>");
foreach($main as $key=>$value)
{
echo("<td>$value</td>");
}
echo(PHP_EOL . ' </tr>' . PHP_EOL);
}
}
?>
</tbody>
</table>
<br>
<input style="position: fixed; bottom: 0px; left: 50%; font-size: 16px; margin-left: -155px;" name="submit" type="submit" value="Contact Us About Your Selected Items">
</form>
</body>
</html>
答案 1 :(得分:0)
以下是我用来生成表格的代码。
<?php
$f = fopen("file.csv", "r");
$columns1 = array(1);
$columns2 = array(2,3,4,5,6);
$columns3 = array(7);
$flag = true;
while (($line = fgetcsv($f)) !== false) {
if($flag) { $flag = false; continue; }
echo "<tr>";
foreach ($line as $index=>$val) {
if (in_array($index+1, $columns1)) {
echo("\t<td><input type='checkbox' name='checkboxvar[]' value='$val'> </td>\r\n");
}
if (in_array($index+1, $columns1)) {
echo("\t<td>$val</td>\r\n");
}
if (in_array($index+1, $columns2)) {
echo("\t<td>$val</td>\r\n");
}
if (in_array($index+1, $columns3)) {
if($val == "0"){
echo("\t<td></td>\r\n");
} else {
echo("\t<td><a class=' wpex-lightbox' href='http://mirc.pixelcraftstudio.net/wp-content/uploads/mirc_inv_pics/$val.jpg' target='_self' data-type='image'><img style='width:24px; height:24px; margin-top:8px;' src='http://mirc.pixelcraftstudio.net/wp-content/themes/mirc-child/tablesaw/icon-instagram.jpg'/></a></td>\r\n");
}
}
}
echo "</tr>\n";
}
fclose($f);
?>
所以第一列我有复选框,并且可以得到第一列显示第一列的值。但我需要将第1,2和3列的值包含在复选框中。
也许我首先获得3项的思考方法不是最好的方法吗?
第7列仅拆分,因为它的图像需要预览图标