Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 将html表单表头写入csv文件_Php_Csv - Fatal编程技术网

Php 将html表单表头写入csv文件

Php 将html表单表头写入csv文件,php,csv,Php,Csv,我现在有两个问题要解决。我有一个html表单,表单中有一个表格。我试图做的是包含我已经准备好的表头,并将其作为第一行写入csv文件。我似乎想不出那一个。这就是我的html表单的外观 <html> <form> <table> <h1> Shorts </h1> <thead> <tr> <th> Header 1 </th> <th> Header 2 </th&

我现在有两个问题要解决。我有一个html表单,表单中有一个表格。我试图做的是包含我已经准备好的表头,并将其作为第一行写入csv文件。我似乎想不出那一个。这就是我的html表单的外观

<html>
<form>
<table>
<h1> Shorts </h1>
<thead>
<tr>
  <th> Header 1 </th>
  <th> Header 2 </th>
  <th> Header 3 </th>
  <th> Header 4 </th>
  <th> Header 5 </th>
</tr>
</thead>
//form input here....

</table>
</form>
</html>

短裤
标题1
标题2
标题3
标题4
标题5
//这里的表单输入。。。。
这是我的php脚本

     <?php

function myfputcsv($handle, $array, $delimiter = ',', $enclosure = '"', $eol = "\n") {
    $return = fputcsv($handle, $array, $delimiter, $enclosure);
    if($return !== FALSE && "\n" != $eol && 0 === fseek($handle, -1, SEEK_CUR)) {
        fwrite($handle, $eol);
    }
    return $return;
}

if(isset($_POST['mydrivers']))  {  
$header=array("Driver", "Date", "Customer #", "Invoice #", "Product Description", "Size", "CS", "Btls", "CHK Itls");
$data=array();

$rows = 0;
$fp = fopen('driver' . date('m-d-y'). ".csv", 'a');

while ( ! feof($fp) ) 
{ 
    $stuff = fgets($fp); 
    if ($stuff) $rows++; 
} 
fseek($fp, 0);

//myfputcsv($handle, $header);
 fputcsv($fp, $header);
 foreach (array_slice($_POST,0,count($_POST)-1) as $key => $value) {    
     //$header[]=$key;
     $data[]=$value;
 }  



    myfputcsv($fp, $data);
fclose($fp);
echo "data added";
}

?>

当我打开csv文件时,唯一的信息就是输入数据。如何在第一行中包含所有
元素


我的第二个问题是如何将此文件保存到其他位置?该文件将命名为
'filename'。日期(“m-d-y”)。“.csv”
并且该位置允许我将其保存在桌面上,我是否会创建一个带有桌面路径和文件名变量的变量,并在使用fopen()时被调用?我之所以没有将其作为附件下载,是因为数据将不断添加到文件中

由于标题是硬编码的,我建议您将表单中的标题硬编码为隐藏变量,如下所示:

<form method="post" action="...">
<input type="hidden" name="header1" value="Header 1">
<input type="hidden" name="header2" value="Header 2">
<input type="hidden" name="header3" value="Header 3">
<input type="hidden" name="header4" value="Header 4">
<input type="hidden" name="header5" value="Header 5">
...
</form>

提交发件人时,只能传递
input
textarea
元素。使用Ajax是以编程方式生成服务器端的表头还是以HTML硬编码的?表头是以HTML硬编码的。是否可以在数组中写入头,然后让该数组写入文件?我曾想过这是否可能,但我不知道如何编写代码。我想我的headers变量应该是这样的<代码>$headers=数组(“头1”、“头2”、“头3”、“头4”、“头5”)但是我不知道从这里该怎么办。@bobdon Yes,我在下面更新了我的答案以包含此选项当我硬编码头服务器端时,我收到一个错误,说fputcsv()期望参数1是一个资源,而null是给定的。我假设您正在从函数
myfputcsv()中调用这两行代码
其中定义了
$handle
。如果你在其他地方这样做,我认为你在使用
$fp
。在您有
myfputcsv($fp$data)的地方尝试这些代码行现在。好的,这确实有效,但问题是当我再次输入数据时,标题再次出现。因此,我没有3行数据,而是4行数据,因为用againI编写的标题也更新了我的代码,以反映您所说的内容。我得到的结果是页眉一直打印一次,条目已经提交。处理这个问题的一个快速方法是计算文件中的行数,如果是0,则放入页眉,否则,跳过该部分并只转储数据。
$headers = array("header 1", "header 2", "header 3", "header 4", "header 5");
fputcsv($handle, $headers);