2017-01-31 9 views

ответ

0

@ ответ erier действительно хорош и получить работу.

Поскольку вопрос отмечен с помощью Drupal 7, я думал, что отправлю метод пользовательского модуля Drupal, адаптировав ответ @ erier и уберег его.

Для основы пользовательского модуля вы можете увидеть этот простой пример.

function custom_module_form($form, &$form_state) { 
    $form['csv_upload'] = array(
    '#type' => 'file', 
    '#title' => t('Choose a file'), 
    '#title_display' => 'invisible', 
    '#size' => 22, 
    '#upload_validators' => array('file_clean_name' => array()), 
); 
    $form['upload'] = array(
    '#type' => 'submit', 
    '#value' => 'Upload', 
); 
} 

function custom_module_form_validate($form, &$form_state) { 
    $validators = array('file_validate_extensions' => array('csv')); 

    // Check for a new uploaded file. 
    $file = file_save_upload('csv_upload', $validators); 
    //$file = $form_state['values']['csv_upload']; 

    if (isset($file)) { 
    // File upload was attempted. 
    if ($file) { 
     // Put the temporary file in form_values so we can save it on submit. 
     $form_state['values']['csv_upload_file'] = $file; 
    } 
    else { 
     // File upload failed. 
     form_set_error('csv_upload', t('The file could not be uploaded.')); 
    } 
    } 
} 

function custom_module_submit($form, &$form_state) { 

    $file = $form_state['values']['csv_upload_file']; 
    $file->status = FILE_STATUS_PERMANENT; 
    $file->filename = str_replace(' ', '_', $file->filename); 
    file_save($file); 

    $csv_file = file_load($file->fid); 
    $file = fopen($csv_file->uri, "r"); 


    while(! feof($file)) 
     { 
     $customer = fgetcsv($file)); 
     db_insert('your_db_table') 
     ->fields(array(
      'column1' => $customer[0], 
      'column2' => $customer[1] 
     )) 
     ->execute(); 
     } 

    fclose($file); 

    drupal_set_message('CSV data added to the database'); 
} 

function file_clean_name($file) { 
    $file->filename = str_replace(' ', '_', $file->filename); 
} 

Это означает, что ваш вопрос касался таблицы базы данных.

Если вы имели в виду в HTML таблицу, вы можете адаптировать функцию представить после $csv_file = file_load($file->fid); как это:

$headers = array('column 1', 'column 2'); 
$rows = array(); 

$file = fopen("contacts.csv","r"); 

while(! feof($file)) 
    { 
    $customer = fgetcsv($file)); 
    $rows[] = array($customer[0], $customer[1]); 
    } 

fclose($file); 

return theme('table', array('header' => $headers, 'rows' => $rows); 

Или адаптировать два путем добавления данных в базу данных и отображения на экране без второй базы данных удар.

0

Этот модуль может помочь вам https://www.drupal.org/sandbox/draenen/2442165 Это требует ленты, но она расширяет его для работы с пользовательскими таблицами (не Друпал лиц)

1

Это то, что я придумал - я не PHP эксперт - и это не кажется красивым - но это работает!

$handle = fopen('/path/to/file/filename.csv', 'r'); 
$row = fgetcsv($handle); 

for ($e = 0; $row = fgetcsv($handle); $e++) { 
    $record = array(); 

    foreach ($row as $field) { 
     $record[] = $field; 
    } 

    db_insert('your_db_table') 
    ->fields(array(
     'column1' => $record[0], 
     'column2' => $record[1] 
    )) 
    ->execute(); 
} 

fclose($handle); 

таблица будет выглядеть следующим образом:

column1|column2 
--------------- 
value1|value2 
value1|value2