2012-07-03 131 views
1

我不明白爲什麼while循環在插入第一行數據後停止。請幫忙。我試圖在MySql表格中上傳.csv文件 - 如果數據已經存在,跳過並轉到第二行。PHP while while while not working

<?php 
$dbhost = "xxxx"; 
$dbname = "xxxx"; 
$dbuser = "xxxx"; 
$dbpass = "xxxx"; 
mysql_connect ($dbhost, $dbuser, $dbpass)or die("Could not connect: ".mysql_error()); 
mysql_select_db($dbname) or die(mysql_error()); 

fgetcsv_PHP(); 

function fgetcsv_PHP() 
{ 

    if (($handle = fopen("events.csv", "r")) !== FALSE) 
    { 

     $length = 1000; 
     $delimiter = ","; 



     while (($data = fgetcsv($handle)) !== FALSE) 
     { 
      // Count number of array elements in $data 
      $num = count($data); 
      // Print opening table row HTML tag 
      $data[5]= strtolower($data[5]); 
      $data[11]= "2012-06-22 10:30:40"; 
      $import="INSERT into candidatedb(event,rec,title,name,surname,email,phone,discip,exper,wheread,comment,stamp) values('$data[0]','$data[1]','$data[2]','$data[3]','$data[4]','$data[5]','$data[6]','$data[7]','$data[8]','$data[9]','$data[10]','$data[11]')"; 


      $result = mysql_query("SELECT * from candidatedb WHERE email = '$data[5]' AND surname = '$data[4]'"); 
      $num_rows = mysql_num_rows ($result); 
      echo $num_rows; 

      if ($num_rows > 0) { 

       echo "Email address: $data[5] already exist </br>"; 
      } 

      else {  

        mysql_query($import) or die(mysql_error()); 
        echo "Done! $data[5] inserted<br/>"; 
      } 
     } 
     // Close the file pointed to by $handle 
     fclose($handle); 
    } 
} 

"Done!<br/> $num record uploaded" 
?> 




<?php /*?> 
     $import="INSERT into candidatedb(event,rec,title,name,surname,email,phone,discip,exper,wheread,comment,stamp) values('$data[0]','$data[1]','$data[2]','$data[3]','$data[4]','$data[5]','$data[6]','$data[7]','$data[8]','$data[9]','$data[10]','$data[11]')"; 

     mysql_query($import) or die(mysql_error()); 
<?php */?> 
+2

不是答案,但:請不要使用'mysql_ *'函數來獲取新代碼。他們不再被維護,社區已經開始[棄用流程](http://goo.gl/KJveJ)。請參閱[**紅框**](http://goo.gl/GPmFd)?相反,您應該瞭解[準備好的語句](http://goo.gl/vn8zQ)並使用[PDO](http://php.net/pdo)或[MySQLi](http://php.net/ mysqli的)。如果你不能決定,[本文](http://goo.gl/3gqF9)將有助於選擇。如果你關心學習,[這是一本很好的PDO教程](http://goo.gl/vFWnC)。 – PeeHaa

+1

那麼,你的問題是什麼?什麼不行?有沒有錯誤? – poke

+0

另一件要添加到@PeeHaa的建議建議:不要在SQL查詢字符串中插入原始值,而是將自己暴露給SQL注入。使用mysqli_real_escape_string或(更好),一個準備好的聲明。 – LexLythius

回答

0

如果您嘗試調試這個東西北京時間輸出:

fgetcsv_PHP(); 

function fgetcsv_PHP() { 

$length = 1000; 
$delimiter = ","; 
if (($handle = fopen("events.csv", "r")) !== FALSE) { 
    while (($data = fgetcsv($handle, $length, $delimiter)) !== FALSE) 
    { 
     echo "read line: ".implode($data, ';')." <br>\n"; 
    } 
    fclose($handle); 
} 
} 
+0

嗨,本傑明,分隔符「,」改爲「;」並且所有日期都顯示爲data; data2; data3; – Kunal

0

好吧,我發現這個問題。這不是代碼是.csv文件。由於某些原因,Excel for Mac的「逗號分隔值」的.csv版本不能被php函數正確解碼。但是,如果您將.csv導出爲「windows逗號分隔(.csv)」,那麼它就像魅力一樣。

enter image description here

謝謝你的幫助。

+0

也許Mac csv是使用CR作爲行終止符的傳統格式,而不是LF或CR + LF,請參閱http://superuser.com/questions/439440/did-mac-os-lion-switch-to-using直插式的飼料-LF-N換行符,INSTEAD-OF – LexLythius