ユーザーが CSV をアップロードし、PHP を使用して既存の MySQL テーブルが切り捨てられ、CSV の値がテーブルに追加されるこのページがあります。
今まで CSV のインポート方法で phpMyAdmin を使用していましたが、ユーザーが自分でファイルをアップロードできるようにページを提供したいと考えています。
CSVの構造はこんな感じ
code, name, price
102, plane toy, 23.7
行の 99% は同じですが、一部の行はユーザーが CSV をエクスポートするショップのソフトウェアによって二重引用符で囲まれています。このような:
223, "Mary's white, tshirt", 23.9
ここでインポートが失敗します。「's white, tshirt」の「,」に到達します。
私はここでキャラクターをバフアウトする方法を見つけましたが、それはパターンが同じで、私の変更で、余分な「、」がどこにあるのかわかりませんが、余分な「」を含むアイテムがあります," を二重引用符で囲んで "item" を指定します。
問題を回避するためにコードを変更するにはどうすればよいですか?
これが私のコードです:
<?php
if(isset($_POST['submit']))
{
$fname = $_FILES['sel_file']['name'];
$chk_ext = explode(".",$fname);
if(strtolower($chk_ext[1]) == "csv")
{
$filename = $_FILES['sel_file']['tmp_name'];
$handle = fopen($filename, "r");
$con = mysqli_connect('localhost','xxxx','zzzz','zzz');
if (!$con)
{
die('Could not connect: ' . mysqli_error($con));
}
mysqli_select_db($con,"TABLE 1");
$sqltruncate = "TRUNCATE TABLE `TABLE 1`";
mysqli_query($con,$sqltruncate) or die(mysqli_error($con));
while (($data = fgetcsv($handle, 1000, ',')) !== FALSE)
{
$sql = "INSERT into `TABLE 1`(code,name,price) values('$data[0]','$data[1]','$data[24]')";
mysqli_query($con,$sql) or die(mysqli_error($con));
}
fclose($handle);
echo "Success";
}
else
{
echo "Invalid file";
}
}
?>
<form action='<?php echo $_SERVER["PHP_SELF"];?>' method='post' enctype='multipart/form-data'>
Choose CSV : <input type='file' name='sel_file' id='sel_file'>
<input type='submit' name='submit' value='submit'>
</form>