2013-06-18 39 views
0

我有用於上傳CSV文件的代碼。上傳CSV文件時無法打印所需輸出的迭代

$handle = fopen($_FILES['filename']['tmp_name'], "r"); 

while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) { 
    $import="INSERT into matching(date, time, location, epos_id, rbpos_id, type_of_payment, basket_information, user_id, points) values('$data[0]', '$data[1]', '$data[2]', '$data[3]', '$data[4]', '$data[5]', '$data[6]', '$data[7]', '$data[8]')"; 

    mysql_query($import) or die(mysql_error()); 

    $query = 'SELECT * FROM users WHERE ID="'.$data[7].'"'; 
    $result = mysql_query($query) or die(mysql_error()); 

    while($row = mysql_fetch_array($result)){ 
     $id_user = $row['user_id']; 
     $phone = $row['phone']; 
     echo $name = $row['first_name']; 
    } 

    mysql_query($import) or die(mysql_error()); 
} 

fclose($handle); 

現在,我需要遍歷該列$data[7]每一個數據,所以我一唱一和誰擁有user_ID的人的名字,但顯然是因爲沒有打印這是錯的。

PS。請注意,我是唯一一個上傳數據的人,我並不關心安全問題或其他問題。

+0

我想問題出在這裏:'所以我回應每個有user_id ..的人的名字。我假設ID是主鍵。所以只有一個給定ID(主鍵)的記錄。 – ducin

+0

是的,但在csv中會有不同的id,所以我需要找到每個id的名字。 –

+0

數據庫是否接收到csv中的所有插入內容? – Orangepill

回答

0

做了很多PHP數據庫的東西,但沒有太多與MySQL。會不會認爲你用雙引號圍繞ID字符串編寫select語句的方式應該是相反的?即使用雙引號的查詢字符串包圍單引號的ID值:

$query = "SELECT * FROM users WHERE ID='".$data[7]."'"; 

你可能會想嘗試一些調試 - 就像把的print_r($行);進入你的while循環。

+0

謝謝我試過但沒有結果... –

+0

實際上你的select使用了列ID,但你的$ row引用是$ row ['user_id']嗎?這些列是否存在? –

+0

無法確定echo語句嗎? –

0

我提交示例代碼以從csv文件讀取數據。我假設您已經使用move_uploaded_file命令編寫了上傳csv文件的準確代碼。所以我的示例代碼從這一點繼續。

// Set path to CSV file 
$csvFile = 'test.csv'; 
$file_handle = fopen($csvFile, 'r'); 
//fgetcsv($file_handle);//skips the first line while reading the csv file, uncomment this line if you want to skip the first line in csv file 
while (!feof($file_handle)) 
{ 
    $csv_data[] = fgetcsv($file_handle, 1024); 
} 
fclose($file_handle); 

/*echo '<pre>'; 
print_r($csv_data); 
echo '</pre>';*/ 

foreach($csv_data as $data) 
{ 
    echo "<br>column 1 data = ".$data[0]; 
    //Your insert will go something like this 
    $import="INSERT into matching(date, time, ..) values('".mysql_real_escape_string($data[0])."', '".mysql_real_escape_string($data[1])."',....)"; 

    mysql_query($import) or die(mysql_error()); 
} 

僅適用於演示我只打印了第一列的值。如果您想知道數據陣列的完整結構,可以通過取消註釋print_r塊來完成。函數mysql_real_escape_string將安全地將csv數據插入到數據庫表中,如果您不使用此函數,那麼如果您的csv數據包含打破查詢的單引號或雙引號,那麼您的mysql查詢很有可能會失敗。