【发布时间】:2020-03-19 17:39:09
【问题描述】:
所以我尝试使用 PHP 构建网络“应用程序”,将银行对帐单从 .CSV 文件导入到 mySQL 数据库。但不幸的是,我的代码仍然存在一些缺陷,例如,当我运行此代码时,一切正常,除了:
- 如果 .CSV 文件包含特殊字符(如 (š,ž,č) 或“,”(用于浮点数)而不是读起来像新数组,但我想将“,”替换为“。”以便 mySQL 将数字识别为浮点数并用相似字符 (s,z,c) 替换特殊字符。
- 如果我在 .csv 文件中有一个标题,我希望跳过这个标题(第一行),可能最简单的方法是先读取文件并计算行数,这样我才能获得文件中的最大行数,然后使用 while 或 for 循环?像 while(($row>=2)
<?php
$conn= mysqli_connect('localhost','admin','admin','database_test');
if (isset($_POST['submit'])){
$createTable="CREATE TABLE Bank_statements(
id INT(3) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
date DATE NOT NULL,
purpose TEXT(100) NOT NULL,
debit FLOAT(255,2) NOT NULL,
kredit FLOAT(255,2) NOT NULL
);";
if (mysqli_query($conn,$createTable)){
$file=fopen($_FILES['file_nkbm']['tmp_name'],"r");
while($data=fgetcsv($file)){
foreach($data as $dat){
$expl=explode(";",$dat);
$convert_date=strtotime($expl[4]);
$date=date('y-m-d',$convert_date);
$debit=doubleval($expl[5]);
$kredit=doubleval($expl[6]);
$purpose=$expl[8];
$addData="INSERT INTO Bank_statements(date,debit,kredit,purpose) VALUES
('$date','$debit','$kredit','$purpose');";
if (mysqli_query($conn,$addData)){
echo "success";
}else{
echo "fail".mysqli_error($conn);
}
}
}
fclose($_FILES['file_nkbm']['tmp_name']);
$query="SELECT * FROM Bank_statements;";
$result=mysqli_query($conn,$query);
while ($row=mysqli_fetch_array($result)){
echo $row['id'].$row['date'].$row['purpose'].$row['debit'].$row['kredit']."<br>";
}
}else{
echo "table already exist";
}
}
mysqli_close($conn);
?>
如果我尝试手动编辑 .csv 文件,结果还可以,但这不是程序的重点或目标。
【问题讨论】:
-
扔掉第 1 行 = 只需在 while 循环之前读取一行并将其扔掉(即不要对它做任何事情
-
将
,更改为.和str_replace(',', '.', The field with the comma in) -
您目前正在列级别执行(尝试的)行逻辑