文件上传后,以PHP表格格式打印CSV文件的前3列
我是PHP新手,我被这个问题困住了文件上传后,以PHP表格格式打印CSV文件的前3列,php,file-upload,html-table,import-from-csv,Php,File Upload,Html Table,Import From Csv,我是PHP新手,我被这个问题困住了 $mimes = array('application/vnd.ms-excel','text/plain','text/csv','text/tsv'); if (((in_array($_FILES['uploadedfile']['type'],$mimes))) && ($_FILES["uploadedfile"]["size"] > 0)) { $filename = $_SESSION['username']
$mimes = array('application/vnd.ms-excel','text/plain','text/csv','text/tsv');
if (((in_array($_FILES['uploadedfile']['type'],$mimes)))
&& ($_FILES["uploadedfile"]["size"] > 0))
{
$filename = $_SESSION['username'].$_FILES["uploadedfile"]["name"];
move_uploaded_file($_FILES["uploadedfile"]["tmp_name"],"./uploads/".$filename);
echo "Stored in: " . "./uploads/" .$filename;
echo "<br />\n";
echo 'Daylight hours will be calculated for this latitude : '.$_POST['latCSV'];
echo "<br>";
//print out uploaded file.csv
echo "<table BORDER=1>\n\n";
echo " <tr><th>AvgCrown</th><th>MinCrown</th><th>MaxCrown</th><th>dateLogged</th><th>DaylightHours</th></tr>";
echo "<tbody id='tblBdyLoggedData'>";
$f = fopen("./uploads/" .$filename, "r");
$i=0; //just a counter
while (($line = fgetcsv($f)) !== false) {
echo "<tr>";
foreach ($line as $cell) {
// Save the value before you output
$lastColValue = htmlspecialchars($cell);
//unset($lastColValue[3]);
echo "<td>" . $lastColValue . "</td>";
}
//checking if date is valid
checkDateString($lastColValue);
// If you want to store all log dates in an array:
$logDates[] = $lastColValue;
$firstlogDate = $logDates[$i];
echo "<td>" . checkDateString($lastColValue) . "</td>";
//call function using firstlogDate for every row
echo "<td>" . calcDaylight($firstlogDate,$_POST["latCSV"]) . " </td>";
echo "</tr>\n";
$i = $i+1;
}
fclose($f);
echo "</tbody></table></body></html>";
}
$mimes=array('application/vnd.ms excel'、'text/plain'、'text/csv'、'text/tsv');
if((在_数组($_FILES['uploadedfile']['type'],$mimes)中)
&&($_文件[“uploadedfile”][“size”]>0))
{
$filename=$\u会话['username']。$\u文件[“uploadedfile”][“name”];
移动上传的文件($上传文件[“上传文件”][“tmp\U名称”],“/uploads/”$文件名);
echo“存储在:“.”/uploads/”$filename中;
回显“
\n”;
echo“将为此纬度计算昼时:”。$\u POST['latCSV'];
回声“
”;
//打印出上传的文件.csv
回显“\n\n”;
回显“avgcrownmincrownmaxcrowndadelogeddaylighthours”;
回声“;
$f=fopen(“./uploads/”$filename,“r”);
$i=0;//只是一个计数器
而(($line=fgetcsv($f))!==false){
回声“;
foreach($行作为$单元格){
//在输出之前保存该值
$lastColValue=htmlspecialchars($cell);
//未设置($lastColValue[3]);
回显“$lastColValue.”;
}
//检查日期是否有效
checkDateString($lastColValue);
//如果要在阵列中存储所有日志日期:
$logDates[]=$lastColValue;
$firstlogDate=$logDates[$i];
echo“.checkDateString($lastColValue)。”;
//对每行使用firstlogDate调用函数
echo“.calcDaylight($firstlogDate,$_POST[“latCSV”])”;
回音“\n”;
$i=$i+1;
}
外国法郎(f美元);
回声“;
}
我希望在上传文件时只打印CSV文件的前3列,因为其他两列将使用各自的函数进行计算。Datelogged将从csv中获取,并正确重新格式化,昼时也将从Datelogged中计算。此代码可能会对您有所帮助
?php
echo "<html><body><table>\n\n";
$f = fopen("so-csv.csv", "r");
while (($line = fgetcsv($f)) !== false) {
$count=0;
echo "<tr>";
foreach ($line as $cell )
{
if($count<3)
{
echo "<td>" . htmlspecialchars($cell) . "</td>";
$count++;
}
}
echo "<tr>\n";
}
fclose($f);
echo "\n</table></body></html>";
?php
回显“\n\n”;
$f=fopen(“so csv.csv”,“r”);
而(($line=fgetcsv($f))!==false){
$count=0;
回声“;
foreach($行作为$单元格)
{
如果首先($count,请使用PHP文件系统库解析$file\u内容:
$foo=split(“,”,$file_contents)
参考:
现在,您可以访问前三列:
echo foo[0] . '/' . foo[1] . '/' . foo[2];
替换此项:
foreach ($line as $cell) {
// Save the value before you output
$lastColValue = htmlspecialchars($cell);
//unset($lastColValue[3]);
echo "<td>" . $lastColValue . "</td>";
}
foreach($line作为$cell){
//在输出之前保存该值
$lastColValue=htmlspecialchars($cell);
//未设置($lastColValue[3]);
回显“$lastColValue.”;
}
为此:
$lineValues = array_values($line);
if (count($line) < 3) {
echo "<td>This line is unusable</td><td></td><td></td>";
}
for ($colNum = 0; $colNum < 3; $colNum++) {
echo "<td>" . htmlspecialchars($lineValues[$colNum]) . "</td>";
}
$lineValues=数组值($line);
如果(计数($line)<3){
echo“该行无法使用”;
}
对于($colNum=0;$colNum<3;$colNum++){
echo“.htmlspecialchars($lineValues[$colNum])”;
}
@Hardik…它确实有帮助,但它没有给我前3列,而是给了我前3行。但是谢谢你的帮助!我已经更新了我的代码,将前三行作为表rowAvgCrown、MinCrown、MaxCrown、dateLogged的三列。我想传递所有这些值,但我只想显示表中的前3列e表..我已更新了代码。如果有问题,请尝试此操作,然后告诉我。我尚未测试此代码,因此可能它有一些错误。您是否再次更改代码..它现在似乎已损坏..当您在其中包含if语句时,它工作正常