2015-04-09 14 views
0

Я хочу загрузить данные csv в mysql, исключая заголовок. Мой скрипт работает, но отображается ошибкаPHP Замечание: Неопределенное смещение

Notice: Undefined offset: 32 in C:\wamp\www\mvc\excel\upload.php on line 38 

сообщения после выполнения запроса. Что не так, и как я могу это исправить.

Вот мой код

if (isset($_POST['submit'])) { 


    //Import uploaded file to Database 

    $file = $_FILES['filename']['tmp_name']; 

    $handle = fopen($file,"r"); 

    //loop through the csv file and insert into database 
    for ($lines = 0; $data = fgetcsv($handle,1000,",",'"'); $lines++) { 
     if ($lines == 0) continue; 
     if ($data[0]) { 

      $import="INSERT into contacts 
        (name, contacttype, nationality, mobile1, country1, 
        email1, phone, fax, twon, area, restatus, retype, 
        reproject1, contactgroup, freezone1, gender, 
        dateofbirth, married, children, educationlevel, 
        jobsector, driverslicense, media, media2, age, 
        salary, created, upload, image, companyname, 
        businesscategory, subcategory, jobrole, upload_id) 
        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]', 
         '$data[12]','$data[13]','$data[14]','$data[15]', 
         '$data[16]','$data[17]','$data[18]','$data[19]', 
         '$data[20]','$data[21]','$data[22]','$data[23]', 
         '$data[24]','$data[25]','$data[26]','$data[27]', 
         '$data[28]','$data[29]','$data[30]','$data[31]', 
         '$data[32]','$uploadid') "; 
      print $import; 
      mysql_query($import) or die(mysql_error()); 
     } 

     fclose($handle); 

     print "Import done"; 

     //view upload form 
    } 
} 

Благодаря

+0

jobrole значение столбца не может присутствовать в вашем файле CSV –

+0

, где находится строка кода 38? – Saty

+0

строка 38 является $ import = "INSERT в контакты (имя .......) – arok

ответ

1

"Undefined смещение" означает, что код называется отсутствующий индекс массива. Для предотвращения этого следует использовать так:

for ($lines = 0; $data = fgetcsv($handle,1000,",",'"'); $lines++) { 
     if ($lines == 0) continue; 
     for ($i = 0; $i <= 32; $i ++) 
     { 
      if (!isset($data[$i])) 
       $data[$i] = ''; 
     } 

       $import="INSERT into contacts 
        (name, contacttype, nationality, mobile1, country1, 
        email1, phone, fax, twon, area, restatus, retype, 
        reproject1, contactgroup, freezone1, gender, 
        dateofbirth, married, children, educationlevel, 
        jobsector, driverslicense, media, media2, age, 
        salary, created, upload, image, companyname, 
        businesscategory, subcategory, jobrole, upload_id) 
        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]', 
         '$data[12]','$data[13]','$data[14]','$data[15]', 
         '$data[16]','$data[17]','$data[18]','$data[19]', 
         '$data[20]','$data[21]','$data[22]','$data[23]', 
         '$data[24]','$data[25]','$data[26]','$data[27]', 
         '$data[28]','$data[29]','$data[30]','$data[31]', 
         '$data[32]','$uploadid') "; 
       print $import; 
       mysql_query($import) or die(mysql_error()); 
} 
fclose($handle); 
print "Import done"; 
+3

Сделайте ему одолжение, переместите 'fclose' и' print' вне цикла for. Или его следующая ошибка будет считываться из нераспечатанного файла – RiggsFolly

+1

@Ri ggsFolly Спасибо за полезный намек, вы правы. Я отредактировал свой ответ. – Serge

+0

@Serge спасибо, что это сработало – arok

Смежные вопросы