0 / 0 / 0
Регистрация: 07.07.2018
Сообщений: 35
1

Разделители в csv

06.11.2018, 15:49. Показов 855. Ответов 15
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
задача , написать прогу которая бы читала цсв файлы, записывала в бд и выводила на экран. Данную задачу я сделал, но она работает только с разделителями через запятую, а эксель сохраняет с точкой с запятой.
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
<?php  
 if(!empty($_FILES["employee_file"]["name"]))  
 {  
      $connect = mysqli_connect("localhost", "root", "", "db_crt");  
      $output = '';  
      $allowed_ext = array("csv");  
      $extension = end(explode(".", $_FILES["employee_file"]["name"]));  
      if(in_array($extension, $allowed_ext))  
      {  
           $file_data = fopen($_FILES["employee_file"]["tmp_name"], 'r');  
           fgetcsv($file_data);  
           while($row = fgetcsv($file_data))  
           {  
                $name = mysqli_real_escape_string($connect, $row[0]);  
                $address = mysqli_real_escape_string($connect, $row[1]);  
                $gender = mysqli_real_escape_string($connect, $row[2]);  
                $designation = mysqli_real_escape_string($connect, $row[3]);  
                $age = mysqli_real_escape_string($connect, $row[4]);  
                $query = "  
                INSERT INTO tbl_employee  
                     (name, address, gender, designation, age)  
                     VALUES ('$name', '$address', '$gender', '$designation', '$age')  
                ";  
                mysqli_query($connect, $query);  
           }  
           $select = "SELECT * FROM tbl_employee ORDER BY id DESC";  
           $result = mysqli_query($connect, $select);  
           $output .= '  
                <table class="table table-bordered">  
                     <tr>  
                          <th width="5%">ID</th>  
                          <th width="25%">Name</th>  
                          <th width="35%">Address</th>  
                          <th width="10%">Gender</th>  
                          <th width="20%">Designation</th>  
                          <th width="5%">Age</th>  
                     </tr>  
           ';  
           while($row = mysqli_fetch_array($result))  
           {  
                $output .= '  
                     <tr>  
                          <td>'.$row["id"].'</td>  
                          <td>'.$row["name"].'</td>  
                          <td>'.$row["address"].'</td>  
                          <td>'.$row["gender"].'</td>  
                          <td>'.$row["designation"].'</td>  
                          <td>'.$row["age"].'</td>  
                     </tr>  
                ';  
           }  
           $output .= '</table>';  
           echo $output;  
      }  
      else  
      {  
           echo 'Error1';  
      }  
 }  
 else  
 {  
      echo "Error2";  
 }  
 ?>
Как исправить в коде или в екселе?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.11.2018, 15:49
Ответы с готовыми решениями:

Разделители в .csv файлах
Доброго времени суток уважаемые знатоки при импорте .csv файла в MySQL столкнулся с проблемой...

Обратиться к файлу в папке через CSV модуль и Параметры CSV
Доброго времени суток, я чувствую что решение проблемы простое, но никак не могу найти решение в...

Экспорт данных после обработки в *.csv, используя Export-Csv
Данные находятся в файле sample.csv Команда Import-Csv -Encoding default -Delimiter...

Разбиение CSV файла на много csv файлов по разделителю
Здравствуйте, есть файл в который нужно разделить, но не ровно по 30 строк например, а по 25, 23,...

15
Эксперт PHP
4925 / 3920 / 1620
Регистрация: 24.04.2014
Сообщений: 11,441
06.11.2018, 16:04 2
В mysql уже есть реализация импорта/экспорта csv с настройками различных разделителей.
Смотри LOAD DATA INFILE ... и SELECT ... INTO OUTFILE ...
0
0 / 0 / 0
Регистрация: 07.07.2018
Сообщений: 35
06.11.2018, 16:13  [ТС] 3
он как бы через запятую, разделяет, а через точку с запятой нет, Пишет всё в одну колонку.

Добавлено через 1 минуту
что вы имеете в виду?
0
Эксперт PHP
4925 / 3920 / 1620
Регистрация: 24.04.2014
Сообщений: 11,441
06.11.2018, 16:24 4
alex6754, я имею ввиду что mysql эту задачу умеет решать из коробки. Слова, по которым гуглить я указал.
0
0 / 0 / 0
Регистрация: 07.07.2018
Сообщений: 35
06.11.2018, 16:37  [ТС] 5
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
   while($row = fgetcsv($file_data))  
           {  
                $name = mysqli_real_escape_string($connect, $row[0]);  
                $address = mysqli_real_escape_string($connect, $row[1]);  
                $gender = mysqli_real_escape_string($connect, $row[2]);  
                $designation = mysqli_real_escape_string($connect, $row[3]);  
                $age = mysqli_real_escape_string($connect, $row[4]);  
                $query = "  
 LOAD DATA LOCAL INFILE '/Book123.csv'
 INTO TABLE another_base
 FIELDS TERMINATED BY '~'
 LINES TERMINATED BY '\n'
 (name,address,gender,designation,age)";
 
                ";  
                mysqli_query($connect, $query);  
           }  
           $select = "SELECT * FROM tbl_employee ORDER BY id DESC";  \\ошибка синтаксическая T_String
           $result = mysqli_query($connect, $select);  
           $output .= '
ошибка , она выше в коде
0
Эксперт PHP
4925 / 3920 / 1620
Регистрация: 24.04.2014
Сообщений: 11,441
06.11.2018, 16:59 6
Судя по подсветке кола что-то напутано с кавычками
0
0 / 0 / 0
Регистрация: 07.07.2018
Сообщений: 35
07.11.2018, 15:47  [ТС] 7
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
if(in_array($extension, $allowed_ext))  
      {  
           $file_data = fopen($_FILES["employee_file"]["tmp_name"], 'r');  
           fgetcsv($file_data);  
           while($row = fgetcsv($file_data))  
           {  
                $name = mysqli_real_escape_string($connect, $row[0]);  
                $address = mysqli_real_escape_string($connect, $row[1]);  
                $gender = mysqli_real_escape_string($connect, $row[2]);  
                $designation = mysqli_real_escape_string($connect, $row[3]);  
                $age = mysqli_real_escape_string($connect, $row[4]);  
               
LOAD DATA INFILE '/tmp/Book1.csv'  \\такая же ошибка
INTO TABLE some_table
CHARACTER SET cp1251
FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n';
 
$query = " INSERT INTO tbl_employee  
                     (name, address, gender, designation, age)  
                     VALUES ('$name', '$address', '$gender', '$designation', '$age')  
                ";
                 
                mysqli_query($connect, $query);  
           }  
           $select = "SELECT * FROM tbl_employee ORDER BY id DESC";  
           $result = mysqli_query($connect, $select);  
           $output .= '
выдаёт ошибку в другой строке (в коде), что не правильно?

Добавлено через 1 час 12 минут
как правильно? я пробовал по всякому, ппомогите...
0
0 / 0 / 0
Регистрация: 07.07.2018
Сообщений: 35
08.11.2018, 07:41  [ТС] 8
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
<?php  
 if(!empty($_FILES["employee_file"]["name"]))  
 {  
      //setLocale(LC_ALL, 'Russian_Russia.UTF-8');
      setlocale(LC_ALL, 'ru_RU.CP1251', 'rus_RUS.CP1251', 'Russian_Russia.1251', 'russian');
      $connect = mysqli_connect("localhost", "root", "", "db_crt");  
      $output = '';  
      $allowed_ext = array("csv");  
      $extension = end(explode(".", $_FILES["employee_file"]["name"]));  
      if(in_array($extension, $allowed_ext))  
      {  
           $file_data = fopen($_FILES["employee_file"]["tmp_name"], 'r');  
           fgetcsv($file_data);  
           while($row = fgetcsv($file_data, 0, ";"))  
           {  
                $name = mysqli_real_escape_string($connect, $row[0]);  
                $address = mysqli_real_escape_string($connect, $row[1]);  
                $gender = mysqli_real_escape_string($connect, $row[2]);  
                $designation = mysqli_real_escape_string($connect, $row[3]);  
                $age = mysqli_real_escape_string($connect, $row[4]);  
               
 
 
$query = " INSERT INTO tbl_employee  
                     (name, address, gender, designation, age)  
                     VALUES ('$name', '$address', '$gender', '$designation', '$age')  
                ";
                 
                mysqli_query($connect, $query);  
           }  
           $select = "SELECT * FROM tbl_employee ORDER BY id DESC";  
           $result = mysqli_query($connect, $select);  
           $output .= '  
                <table class="table table-bordered">  
                     <tr>  
                          <th width="5%">ID</th>  
                          <th width="25%">Name</th>  
                          <th width="35%">Address</th>  
                          <th width="10%">Gender</th>  
                          <th width="20%">Designation</th>  
                          <th width="5%">Age</th>  
                     </tr>  
           ';  
           while($row = mysqli_fetch_array($result))  
           {  
                $output .= '  
                     <tr>  
                          <td>'.$row["id"].'</td>  
                          <td>'.$row["name"].'</td>  
                          <td>'.$row["address"].'</td>  
                          <td>'.$row["gender"].'</td>  
                          <td>'.$row["designation"].'</td>  
                          <td>'.$row["age"].'</td>  
                     </tr>  
                ';  
           }  
           $output .= '</table>';  
           echo $output;  
      }  
      else  
      {  
           echo 'Error1';  
      }  
 }  
 else  
 {  
      echo "Error2";  
 }  
 ?>
как заставить работать с русским текстом, английский пишет как надо, а с русским проблемка?
0
0 / 0 / 0
Регистрация: 07.07.2018
Сообщений: 35
09.11.2018, 13:42  [ТС] 9
Jewbacabra, я проверил, дело с отображением русского языка не в бд или сиранице, т. к. при изменении в самой mysql выводится на страницу правильные символы русскрго языка. Соответственно , дело в самой загрузке csv в бд. Правильно? т.к. в php врятли пролема следовательно ajax , именно он выдаёт неправильную кодеровку. Так?
Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
 <script>  
      $(document).ready(function(){  
           $('#upload_csv').on("submit", function(e){  
                e.preventDefault(); //form will not submitted  
                $.ajax({  
                     url:"import.php",  
                     method:"POST",  
                     data:new FormData(this),  
                     contentType:false,          // The content type used when sending data to the server.  
                     cache:false,                // To unable request pages to be cached  
                     processData:false,          // To send DOMDocument or non processed data file it is set to false  
                     success: function(data){  
                          if(data=='Error1')  
                          {  
                               alert("Invalid File");  
                          }  
                          else if(data == "Error2")  
                          {  
                               alert("Please Select File");  
                          }  
                          else  
                          {  
                               $('#employee_table').html(data);  
                          }  
                     }  
                })  
           });  
      });  
 </script>
файл цсв на английском отображается и записывается в таблицу бд нормально, а вот файл на русском языке - цифры записываются правильно, а вот слова не записываются вообще, просто пустые ячейки.
как исправить данную проблему?

Добавлено через 32 минуты
PHP
1
2
3
4
5
6
7
$query = " INSERT INTO tbl_employee  
                     (name, address, gender, designation, age)  
                     VALUES ('$name', '$address', '$gender', '$designation', '$age')  
                ";
                 
            //    mysqli_query($connect, $query);
                if(!mysql_query($connect, $query)) exit("Ошибка - ".mysql_error()."<br>Запрос - ".$query);
когдая заменил на данную строчку- if(!mysql_query($connect, $query)) exit("Ошибка - ".mysql_error()."<br>Запрос - ".$query);
ответил
Warning: mysql_query() expects parameter 1 to be string, object given in Z:\home\q\www\import.php on line 44
Ошибка -
Запрос - INSERT INTO tbl_employee (name, address, gender, designation, age) VALUES ('ыв1', '22', 'вав', 'вак', '231')
значит данные получает?
0
Эксперт PHP
3851 / 3196 / 1343
Регистрация: 01.08.2012
Сообщений: 10,820
09.11.2018, 20:42 10
alex6754, менять кодировку данных перед записью в БД, для этого есть функция iconv
0
0 / 0 / 0
Регистрация: 07.07.2018
Сообщений: 35
12.11.2018, 13:23  [ТС] 11
прописывал вссё равно только англйский, и в бд кодеровку менял сp1251, utf8. меняется только в бд знак вопрос где русские буквы и пустые яячейки соответственно.
0
0 / 0 / 0
Регистрация: 07.07.2018
Сообщений: 35
13.11.2018, 13:29  [ТС] 12
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
$connect = mysqli_connect("localhost", "root", "", "db_crt");  
      //header('Content-Type: text/html; charset=utf-8');
     // mysql_query("SET NAMES utf8");
/*mysql_query("SET CHARACTER SET 'utf8';");
mysql_query("SET SESSION collation_connection = 'utf8_general_ci';");*/
    $rff=mysql_query("SET NAMES utf8");
      $output = '';  
      $allowed_ext = array("csv");  
      $extension = end(explode(".", $_FILES["employee_file"]["name"]));  
      if(in_array($extension, $allowed_ext))  
      {  
                //$file_data = iconv('UTF-8', 'CP1251//TRANSLIT',$file_data);
                 //меняем кодировку на utf-8. Может и не понадобится, было оптимизировано для MS EXCEL
            $line = iconv('CP1251', 'UTF-8//TRANSLIT',$line); 
            $line = trim($line," \t");
           $file_data = fopen($_FILES["employee_file"]["tmp_name"], 'r');  
           fgetcsv($file_data);  
           while($row = fgetcsv($file_data, 0, ";"))  
           {  
                $name = mysqli_real_escape_string($connect, $row[0]);  
                $address = mysqli_real_escape_string($connect, $row[1]);  
                $gender = mysqli_real_escape_string($connect, $row[2]);  
                $designation = mysqli_real_escape_string($connect, $row[3]);  
                $age = mysqli_real_escape_string($connect, $row[4]);  
               
//$query = 'LOAD DATA INFILE '/tmp/Book1.csv'
//INTO TABLE tbl_employee
//CHARACTER SET cp1251
//FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n'';
 
$query = " INSERT INTO tbl_employee  
                     (name, address, gender, designation, age)  
                     VALUES ('$name', '$address', '$gender', '$designation', '$age')  
                ";
                 
               mysqli_query($connect, $query);
            //if(!mysql_query($connect, $query)) exit("Ошибка - ".mysql_error()."<br>Запрос - ".$connect.$query); 
 
           }

не помогает, правилно написано?
0
Эксперт PHP
3851 / 3196 / 1343
Регистрация: 01.08.2012
Сообщений: 10,820
13.11.2018, 14:10 13
alex6754, вы применяете iconv к необъявленной ранее переменной $line и нигде потом её не используете.
0
0 / 0 / 0
Регистрация: 07.07.2018
Сообщений: 35
14.11.2018, 08:17  [ТС] 14
PHP
1
2
3
 $file_data = iconv('CP1251', 'UTF-8//TRANSLIT',$file_data); 
            $file_data = trim($file_data," \t");
             $file_data = str_replace("\r","",$file_data);
Правильно? вё равно так же не записывает русский язык
0
Эксперт PHP
3851 / 3196 / 1343
Регистрация: 01.08.2012
Сообщений: 10,820
14.11.2018, 08:49 15
alex6754, да. Проверьте кодировку php скрипта и базы данных, везде должно быть UTF8.

Цитата Сообщение от alex6754 Посмотреть сообщение
PHP
1
2
3
4
$connect = mysqli_connect("localhost", "root", "", "db_crt");
...
$rff=mysql_query("SET NAMES utf8");
...
mysql и mysqli - разные драйверы. Если выбрали второй, используйте только mysqli_ функции.
0
0 / 0 / 0
Регистрация: 07.07.2018
Сообщений: 35
14.11.2018, 12:52  [ТС] 16
mysqli_query($connect, "SET CHARSET UTF8");

не чего не меняет
0
14.11.2018, 12:52
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.11.2018, 12:52
Помогаю со студенческими работами здесь

Запись в CSV-файл из массива. Не является форматом csv!
В общем искал работу... Дали тестовое написать парсер для сайта с выводом информации в csv-файл....

Конвертировать CSV ANSI в CSV UTF-8 или шо делать
Привет, есть проблема, импортирую данные из CSV в mssql через Винформс, все хорошо инсертится если...

Разделители
Число в таком виде Нужно переделать в такой вид $result =...

Разделители
Доброго времени суток! У меня следующий вопрос. есть код: echo &quot;&lt;ul class=\&quot;cat\&quot;&gt;&quot;; ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru