我想将.csv文件上传到我的mysql数据库表中。我的编码工作正常。我需要的是我想根据某些条件上传记录。如果条件为真,则仅将数据上载到数据库中。这是我的代码:
<html>
<head>
<title>Upload CSV and Insert into Database Using PHP</title>
<head>
<body>
<form method='POST' enctype='multipart/form-data'>
Upload CSV: <input type='file' name='csv_data' /> <input type='submit' name='submit' value='import' />
</form>
</body>
</html>
<?php
if (isset($_POST['submit'])) {
if (!empty($_FILES['csv_data']['name'])) {
if(pathinfo( $_FILES['csv_data']['name'],PATHINFO_EXTENSION) =='csv') {
$handle = fopen($_FILES['csv_data']['tmp_name'], "r");
$headers = fgetcsv($handle, 1000, ",");
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
$item1 = mysqli_real_escape_string($dbConnection, $data[0]);
$item2 = mysqli_real_escape_string($dbConnection, $data[1]);
$check="select id from m_tl_course";
$che=get_records_sql($check);
foreach ($che as $ch){
$re=$ch->id;
}
if($re == $item2){
$import = "INSERT into tbl_csv values('','$item1','$item2')";
mysqli_query($dbConnection, $import);
echo "<script>alert('Master Course Files Uploaded Successfully')</script>";
}else
{
echo "<script>alert('Id Not Match')</script>";
}
fclose($handle);
print "Import done";
}
else{
echo "only csv file allowed";
}
} else {
echo "Please select file";
}
}
这里我从m_tl_course表中检索一个id并将其存储到变量$ re中,并检查变量$ re是否等于我的.csv字段item2表示只记录上传到我的表中。
此编码工作正常。但如果我从.csv上传3条记录,则表示只有最后一条记录会存储到我的表格中。
如何解决此错误。请帮助我。
答案 0 :(得分:0)
在这些情况下,我倾向于使用临时表来导入完整的csv文件。这样做的好处是
当您从csv
中读取的每一行连续读取相同数据时,以下部分应从循环中移出到顶部 $check="select id from m_tl_course";
$che=get_records_sql($check);
foreach ($che as $ch){
$re=$ch->id;
}
你还应该考虑一个键入ID的关联数组,因此设置了使用...
<html>
<head>
<title>Upload CSV and Insert into Database Using PHP</title>
<head>
<body>
<form method='POST' enctype='multipart/form-data'>
Upload CSV: <input type='file' name='csv_data' /> <input type='submit' name='submit' value='import' />
</form>
</body>
</html>
<?php
if (isset($_POST['submit'])) {
if (!empty($_FILES['csv_data']['name'])) {
if(pathinfo( $_FILES['csv_data']['name'],PATHINFO_EXTENSION) =='csv') {
// Get Current ID list and place it into an associative array
$check="select id from m_tl_course";
$che=get_records_sql($check);
foreach ($che as $ch){
$arrId[ $ch->id] = true; // just want to set an array
}
$handle = fopen($_FILES['csv_data']['tmp_name'], "r");
$headers = fgetcsv($handle, 1000, ",");
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
$item1 = mysqli_real_escape_string($dbConnection, $data[0]);
$item2 = mysqli_real_escape_string($dbConnection, $data[1]);
if(isset($arrId[$item2])){
$import = "INSERT into tbl_csv values('','$item1','$item2')";
mysqli_query($dbConnection, $import);
echo "<script>alert('Master Course Files Uploaded Successfully')</script>";
}else
{
echo "<script>alert('Id Not Match')</script>";
}
fclose($handle);
print "Import done";
}
else{
echo "only csv file allowed";
}
} else {
echo "Please select file";
}
}
答案 1 :(得分:0)
好像你没有正确设置括号。请参阅以下代码中的评论,以查看我添加的括号:
<?php
if (isset($_POST['submit']))
{
if (!empty($_FILES['csv_data']['name']))
{
if(pathinfo( $_FILES['csv_data']['name'],PATHINFO_EXTENSION) =='csv')
{
$handle = fopen($_FILES['csv_data']['tmp_name'], "r");
$headers = fgetcsv($handle, 1000, ",");
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE)
{
$item1 = mysqli_real_escape_string($dbConnection, $data[0]);
$item2 = mysqli_real_escape_string($dbConnection, $data[1]);
$check="select id from m_tl_course";
$che=get_records_sql($check);
foreach ($che as $ch)
{
$re=$ch->id;
}
if($re == $item2)
{
$import = "INSERT into tbl_csv values('','$item1','$item2')";
mysqli_query($dbConnection, $import);
echo "<script>alert('Master Course Files Uploaded Successfully')</script>";
}
else
{
echo "<script>alert('Id Not Match')</script>";
}
fclose($handle);
print "Import done";
}//INSERTED THIS BRACKET
}
else
{
echo "only csv file allowed";
}
}
else
{
echo "Please select file";
}
}
?>