2017-01-31 2 views

Antwort

0

@ Antwort erier ist wirklich gut und wird den Job zu erledigen.

Da die Frage mit Drupal 7 markiert ist, dachte ich, ich würde eine benutzerdefinierte Drupal-Modul-Methode einreichen, die Antwort von @ erier adaptieren und sie verschönern.

Für die Grundlagen eines benutzerdefinierten Moduls können Sie dieses einfache Beispiel sehen.

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); 
} 

Das geht davon aus, dass es sich bei Ihrer Frage um eine Datenbanktabelle handelte.

$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); 

oder die beiden, indem die Daten in die Datenbank anzupassen und ohne eine zweite Datenbank auf dem Bildschirm:

Wenn Sie in einer HTML-Tabelle bedeutet, können Sie die einreichen Funktion nach $csv_file = file_load($file->fid); wie folgt anpassen schlagen.

1

zu arbeiten - ich bin kein PHP-Experte - und es scheint nicht schön - aber es funktioniert!

$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); 

Die Tabelle wird dann wie folgt aussehen:

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