2011-08-04 47 views
1

可能重複:
I have problem while uploading the csv file請幫幫忙,錯誤在上傳CSV文件

CSV文件將插入新的值,如果在特定月份的細節尚未存在,它將通過上傳csv文件來更新表中新數據的行,如果特定月份的詳細信息已經存在於表中。

CSV文件的最後一行是越來越重複的遍在工資單表列。我知道我的查詢中存在一些錯誤或其他問題。但我無法弄清楚什麼是錯的。任何人都可以請幫我解決這個問題?

<?php 
    require_once '../config.php'; 

    if(isset($_POST['upload'])) 
    { 
    $fname = $_FILES['sel_file']['name']; 
    $month = $_POST['month']; 
    $chk_file = explode(".",$fname); 

    if(strtolower($chk_file[1]) == 'csv') 
    { 
    //$sel=mysql_query("select * from employee where month='$month'"); 
    //$del=mysql_query("delete from employee where month='$month'"); 
    $query1 = mysql_query("SELECT * FROM payslips where month='$month'"); 
    $pay_num_rows = mysql_num_rows($query1); 
    $filename = $_FILES['sel_file']['tmp_name']; 
    $handle = fopen($filename,"r"); 
    fgetcsv($handle,1000,","); 
    if($pay_num_rows > 1) 
    { 
    while(($data = fgetcsv($handle,1000,",")) != false) 
    { 
    $upd = "UPDATE payslips SET  month='$data[9]',tot_work_days='$data[10]',lop_days='$data[11]',arrear_amt='$data[12]',leav e_encash='$data[13]' where month='$month'"; 
    mysql_query($upd) or die(mysql_error()); 
    } 
    fclose($handle); 
    echo "Successfully Imported"; 
    } 
    if($pay_num_rows == 0) 
    { 
    while(($data = fgetcsv($handle,1000,",")) != false) 
    { 
    $sql = "INSERT into payslips(employee_code,employee_name,employee_address,emp_dateofjoin,emp_designation,emp_hq ,pf_num,esic_num,emp_state,month,tot_work_days,lop_days,arrear_amt,leave_encash) values('$data[0]','$data[1]','$data[2]','$data[3]','$data[4]','$data[5]','$data[6]','$data[ 7]','$data[8]','$month','$data[10]','$data[11]','$data[12]','$data[13]')"; 
    //$upd = "UPDATE employee SET   month='$data[9]',tot_work_days='$data[10]',lop_days='$data[11]',arrear_amt='$data[12]',leav e_encash='$data[13]' where month='$month'"; 
    mysql_query($sql) or die(mysql_error()); 
    } 
    fclose($handle); 
    echo "Successfully Imported"; 

    } 
     else 
     { 
    echo "Invalid File"; 
    } 
    } 
    } 

     ?> 
+0

月份插入是否正確?它看起來好像$ pay_num_rows可能爲0,因爲它找不到任何行,因此改爲插入更多。如果您的csv中有空行,這些行可能會創建新行,因爲它們沒有這些值,所以不會查找爲「月」。您可以嘗試使用http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html。 –

+0

你知道,MySQL有一個CSV導入功能內置的,看到http://dev.mysql.com/doc/refman/5.5/en/load-data.html,它所有的CSV加載你。 – Johan

回答

0

與您發佈的代碼,至少你遇到的問題的問題很多。首先,你不是逃避任何變數,所以SQL Injection是一個簡單的練習。

我也注意到,當你檢查,看看是否在數據庫中存在一個月的if聲明是這樣的:

if($pay_num_rows > 1) ... 

然而,這將表明你想要做一個UPDATE如果有更多比一排,但你的問題描述如果特定月份已不存在它會做一個INSERT。如果有至少一個排,或特定月份已不存在現在反映在您的結構

if($pay_num_rows >= 1){ 
    // UPDATE QUERY HERE 
} 
else { 
    // INSERT QUERY HERE 
} 

更新的邏輯:我會通過固定的條件邏輯是開始。

尋找你的代碼再次出現你的更新循環會隨時更新所有記錄WHERE month='$month',但$month始終是每一個循環是相同的,所以當執行查詢是每一個它已經完成行匹配。爲了更清楚,說你一個月是,你必須在一個月等於一月數據庫中的幾個行會更新ALL那些行,因此無論最後一行中的數據會是什麼寫入行。您需要查看該查詢的WHERE子句。