Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Помогите, написать скрипт импорта файла csv в БД
 
 автор: Dasha1997   (17.10.2016 в 15:51)   письмо автору
 
 

Здраствуйте.
Есть таблица в базе данных, в которую надо через форму добавить данные( которые в файле csv) . Искала этот вопрос в гугле очень много разных вариантов решения которые меня больше запутали. Можете мне помочь написать скрипт на php, желательно с комментариями. Хочу понять сам процесс скрипта.

  Ответить  
 
 автор: elenaki   (17.10.2016 в 16:21)   письмо автору
 
   для: Dasha1997   (17.10.2016 в 15:51)
 



if (isset($_FILES['failed_csv']['tmp_name']) && $_FILES['failed_csv']['tmp_name'] != "") { /// esli vibran file
    
$filename = $_FILES['failed_csv']['name']; 
$filesize = $_FILES['failed_csv']['size']; 
$filetype = $_FILES['failed_csv']['type']; 
$temp_filename = $_FILES['failed_csv']['tmp_name']; 


if(is_uploaded_file($nm=$temp_filename)) {  
    $counter = 0;
    $buffer = file_get_contents($nm); 
   // delaem massiv iz stroki dannwx
    $file_array = explode("\r\n", $buffer);
    //nachalo perebora massiva
    foreach ($file_array as $line_num => $line) {
    
    //// zagryzka
        $sql = "UPDATE `afm_phones` SET failed=1 where `phone` = '".trim($line)."'";
       // run SQL 
      //echo $sql."<br>"; 
      $result = mysqli_query($g_link, $sql) or die(mysqli_error()); 
      $counter++;
     }
      //exit;
     }
 
       
}


Только здесь у меня простой csv грузится - одна строка, одно поле. Могу поискать и более сложный вариант.

  Ответить  
 
 автор: elenaki   (17.10.2016 в 16:27)   письмо автору
 
   для: Dasha1997   (17.10.2016 в 15:51)
 

Тут у меня греческий закрался, не обращайте внимания.


$filename = $_FILES["userfile"]["tmp_name"];

$fp                 = fopen($filename,"r"); //открываем нужный нам файл на чтение в бинарном режиме, если это дело происходит под виндой   
$fsize         = filesize($filename); //Узнаём размер исходного файла   
$cicl         = ceil($fsize/256) + 1; //узнаём кол-во циклов (можно и поменьше 512K)   

$grammes=0;
for($i = 0; $i < $cicl; $i ++) {  //запускаем цикл   


    if ($i == 0) {   
        fseek ( $fp, 0 ); //ну на первом цикле переходим естественно в начало файла   
    } else {   
        fseek ( $fp, ftell ( $fp ) ); //бегаем по файлу   
    }   
    $text = fread ( $fp, 256000 ); //читаем файл по 512кб   
    ///$text = syn_text ( $text ); //тут я синонимизирую текст, вы можете делать с ним что то своё   

//echo "<pre>";
//echo $text; exit;

     // delaem massiv iz stroki dannwx

$file_array = explode("<br />",nl2br(iconv("windows-1251", "utf-8", $text)));

//echo "<pre>";
//print_r($file_array); exit;


//nachalo perebora massiva so vtoroy stroki
$i=1;

foreach ($file_array as $line_num => $line) {
    
  

//razbivaem stroky na polya i formiruem zapros

$line_exp = explode(";", str_replace("\"", "", $line));

       $line_exp[1] = addslashes(trim($line_exp[1]));    
    $line_exp[2] = addslashes(trim($line_exp[2]));    
    $line_exp[3] = addslashes(trim($line_exp[3]));    
    $line_exp[4] = addslashes(trim($line_exp[4]));
    
    $line_exp[5] = addslashes(trim($line_exp[5]));    
    $line_exp[6] = addslashes(trim($line_exp[6]));    
    //$line_exp[7] = addslashes(trim($line_exp[7]));    
    $line_exp[7] = addslashes(trim(str_replace(",", ".", str_replace(" €", "",$line_exp[7]))));    //// NEO POSO

//echo "<pre>";
//print_r($line_exp); 

    if (isset($line_exp[6])) $im_liksis = date_to_timestamp_4($line_exp[6]);
    if (preg_match( '/AMTRUST.*/', $line_exp[1])) $etairia = "AM TRUST";   
    else $etairia = $line_exp[1];
 
 
$grammes++;
if ($line_exp[7] > 0){ /// ean valane neo poso

//id //onoma //phone //mobile //tk //poli //odos //dimos //pinakida //etairia //symvolaio //date_exp //poso //delete  //

    $update_query = "UPDATE  ".$db_prefix."pelates set 
                        poso    ='".str_replace(",", ".", $line_exp[7])."'  WHERE
                        onoma LIKE '".$line_exp[2]."' AND
                        pinakida LIKE '".$line_exp[4]."' AND
                        symvolaio LIKE '".$line_exp[5]."' AND 
                        date_exp = '".$im_liksis."' AND 
                        etairia LIKE '%".$etairia."%'";
                        
    
//echo $update_query.";<br>";
  //exit;
$result = mysql_query($update_query) or die(" $update_query <b>failed!</b><br>".mysql_error());


    
$i++;
   
}

}
    
    header("Location: clients.php?start=".$_POST["start"]."&end=".$_POST["end"]);
    
    flush ();   
    if (feof ( $fp ) == true) {  //когда достигаем конца файла прекращаем выполнение цикла   
        break;   
    }   
  
}   

fclose ( $fp ); //закрываем файлы   


  Ответить  
 
 автор: confirm   (17.10.2016 в 18:52)   письмо автору
 
   для: elenaki   (17.10.2016 в 16:27)
 

Нельзя так производит загрузку файлов и есть fgetcsv().

  Ответить  
 
 автор: elenaki   (18.10.2016 в 09:30)   письмо автору
 
   для: confirm   (17.10.2016 в 18:52)
 

а мне нужно по частям, у меня большие файлы.

  Ответить  
 
 автор: confirm   (23.10.2016 в 16:42)   письмо автору
 
   для: elenaki   (18.10.2016 в 09:30)
 

Ну это еще не факт что всем так громоздко надо.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования