2012-07-03 5 views
1

Не могу понять, почему мой цикл while останавливается после ввода первой строки данных. Пожалуйста помоги. Я пытаюсь загрузить CSV-файл в таблицу MySql - и если данные уже существуют, пропустите и перейдите во вторую строку.PHP while loop не работает

<?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

Привет Бенджамин, разделитель "," изменен на ";" и вся дата отображается как данные; data2; data3; и т. д. – Kunal

0

Хорошо, я нашел проблему. Это не был код. CSV-файл. По какой-то причине .csv версия Excel для Mac «значения, разделенные запятыми», неправильно декодируется функцией php. Однако, если вы экспортируете CSV как «разделенные запятыми окна (.csv)», то это работает как шарм.

enter image description here

Спасибо за вашу помощь.

+0

Возможно, Mac csv был устаревшим форматом, используя CR в качестве терминатора линии, вместо LF или CR + LF см. http://superuser.com/questions/439440/did-mac-os-lion-switch-to-using -line-каналы-LF-н-для-разрывов строк, а не-в – LexLythius