Форум программистов, компьютерный форум, киберфорум
Наши страницы
PHP
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
natasha_t
0 / 0 / 0
Регистрация: 09.02.2017
Сообщений: 6
1

Импорт из Excel

09.02.2017, 22:39. Просмотров 751. Ответов 5
Метки нет (Все метки)

Здравствуйте! Ребята, помогите пожалуйста, решить проблему. Я использую библиотеку phpexcel для импорта данных из excel в MySQl. Во всех колонках у меня обычные строковые данные, а в 22 колонке у меня находятся данные в виде Иванов Иван Иванович#Иванов Иван Иванович, которые я распарсиваю по #, потом по пробелу. Так вот проблема в том что в цикле все данные из других колонок правильно извлекаются, а вот эта строка парсится всегда одна и та же (первая в цикле). Т.е. в базу записываются всегда одни и те же авторы ко всем записям. Как исправить проблему?
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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
<?php
    
      if (isset($_POST['submit'])) {
     
  
    $file = (trim($_FILES['xls']['name']));
    $file_type = $_FILES['xls']['type'];
    $file_size = $_FILES['xls']['size']; 
 
    if (!empty($file)) {
   //if ((($file_type == 'text/cvs') || ($file_type == 'image/jpeg') || ($file_type == 'image/jpeg') || ($file_type == 'image/png')) && ($file_size > 0) && ($file_size <= GW_MAXFILESIZE)) 
   if (($file_type == 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet') && ($file_size > 0) && ($file_size <= GW_MAXFILESIZE)) 
     {
        if ($_FILES['xls']['error'] == 0) {
         
             // Переместить файл в папку
          $target = GW_UPLOADPATH . $file;
          if (move_uploaded_file($_FILES['xls']['tmp_name'], $target)) {
            
            echo '<p>Данные из файла успешно импортированы!</p>';
           
           
          }
        //////////////////////
        
        require_once "Classes/PHPExcel.php";
// echo $file_name;
$excel  = PHPExcel_IOFactory::load($file_name);
 
 $j=2; 
 
//$vv= array();
$recc = array();
Foreach($excel ->getWorksheetIterator() as $worksheet) {
 $lists[] = $worksheet->toArray();
}
 
$i=0;
  
 $k=0;
 
 
  while($lists[0][$j][5]!='')
  {
 
// echo $lists[0][$j][21];
 $post_id=clear_string($lists[0][$j][0]);
  $post_title=clear_string($lists[0][$j][5]);
    $post_god=clear_string($lists[0][$j][9]);
     
  
   $values = explode("#",$lists[0][$j][21]);
   foreach($values as $val) {
   
 
    $val = explode(",",$values[$i]);
     $i++;
    foreach($val as $v) {
        
       $vv[$k]=$v;
 
   $k++;
  
   
   }
 echo $j;
  }
   
  
   echo '<pre>';
   print_r($val);
echo '</pre>';
 
 echo '<pre>';
   print_r($vv);
echo '</pre>';
 
 
  // echo '<pre>';
  // print_r($v);
//echo '</pre>';
    
   //echo $j;
   
 //  echo '<pre>';
  // print_r($values);
//echo '</pre>';
    
    //$fname=array();
    $x=0;
    for($l=0;$vv[$l];$l=$l+5) {
    $first=explode(" ",$vv[$l]);
    
     foreach($first as $f) {
    
     $fname[$x]=$f;
    
    $x++;
    
     }
    }
   // echo '<pre>';
    //print_r($first);
  //  echo '</pre>';
    
   // echo '<pre>';
    //print_r($vv);
  //  echo '</pre>';
//   print_r($fname);
    
    //////////////////////////авторы
 
    
    $j++;
    
    
      $post_firstNameAuthor = clear_string($fname[0]); 
       $post_secondNameAuthor = clear_string($fname[1]); 
       $post_thirdNameAuthor = clear_string($fname[2]); 
 
    $result_post = mysql_query("SELECT post_cod FROM post WHERE post_cod='$post_id'",$link);
If (mysql_num_rows($result_post) > 0)
{
    echo 'Ошибка добавления! Идентификатор записи <b>"'.$post_title.'"</b> найден в базе данных';
    echo "<br />";
}
else {
    
    echo 'Добавлена запись <b>"'.$post_title.'"</b>';
    echo '<br />';
    
 mysql_query("INSERT INTO post (post_cod,name_post, god_vyp)
VALUES( 
 '".$post_id."',                                            
'".$post_title."',
 '".$post_god."',
)",$link);
                        
        }
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.02.2017, 22:39
Ответы с готовыми решениями:

Заполнение данных в форму или импорт из Excel
Имеется: excel файл с столбцами: группа, семестр, предмет, вид занятий(на...

Импорт сайта
Здравствуйте! Извиняюсь перед администрацией если не туда написал....

Импорт RSS ленты
Здравствуйте! Пдоскажите, я получил новости с RSS ленты используя simplepie, а...

Импорт из XML
Нужно чтоб из такого: &lt;data&gt; &lt;neededcell&gt; &lt;cell cid=&quot;67&quot; id=&quot;4&quot; /&gt; ...

Импорт из csv в БД
Всем привет. Нашёл много материала по этому поводу в интернете,но нигде не могу...

5
Para bellum
Эксперт PHP
4099 / 3049 / 983
Регистрация: 06.01.2011
Сообщений: 8,926
10.02.2017, 08:11 2
Сделайте распечатку массива $lists и покажите. Если элементов много -- все показывать не нужно, покажите только пару.
0
Vas-e-na
418 / 415 / 78
Регистрация: 21.06.2010
Сообщений: 1,362
10.02.2017, 09:57 3
1. переменная $file_name неинициализирована
2. массив $values перебирается через foreach, но используется обращение $values[$i] - явных выход за границы
3. Итерационная переменная $x обнуляется не в том месте (это и есть наверное причина)
4. переменные $post_***NameAuthor не используются
5. Код обрезан снизу.
Это так, то что я нашел просто отформатировав код.
Покажите исходный код полностью, и приложите тестовый файл excel.
Пока что это полный фарш, и странно что это вообще работает.
0
natasha_t
0 / 0 / 0
Регистрация: 09.02.2017
Сообщений: 6
11.02.2017, 00:43  [ТС] 4
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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
<?php
 
    $db_host        = 'localhost';
$db_user        = 'root';
$db_pass        = '';
$db_database    = 'post'; 
 
$link = mysql_connect($db_host,$db_user,$db_pass);
 
mysql_select_db($db_database,$link) or die("Нет соединения с БД ");
 
    
        define('GW_UPLOADPATH', 'userfiles/');
  define('GW_MAXFILESIZE', 32768000);      // 32 KB
        
?>
<!DOCTYPE html>
<!--[if lt IE 7 ]><html class="ie ie6" lang="en"> <![endif]-->
<!--[if IE 7 ]><html class="ie ie7" lang="en"> <![endif]-->
<!--[if IE 8 ]><html class="ie ie8" lang="en"> <![endif]-->
<!--[if (gte IE 9)|!(IE)]><!--><html lang="ru"> <!--<![endif]-->
 
<head>
    
    <title>Импорт записей</title>
</head>
 
<body>
 
    <div class="karkas">
        
        <div class="content-main">
            <div class="content">
            
                    <div class="post-content">
                        
                            
            <div class="post-main">
                    
                    
                        
                        <div class="post-head">
                            
                                                    
                            
                            <div id="block-sorting">
<p id="nav-breadcrumbs"><a href="index.php" >Главная страница</a> \ <span>Импорт записей</span></p>
 
</div>
 
<br />
<br />
    <?php
    
      if (isset($_POST['submit'])) {
     
  
    $file = (trim($_FILES['xls']['name']));
    $file_type = $_FILES['xls']['type'];
    $file_size = $_FILES['xls']['size']; 
 
    if (!empty($file)) {
  
   if (($file_type == 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet') && ($file_size > 0) && ($file_size <= GW_MAXFILESIZE)) 
     {
        if ($_FILES['xls']['error'] == 0) {
         
            
          $target = GW_UPLOADPATH . $file;
          if (move_uploaded_file($_FILES['xls']['tmp_name'], $target)) {
            
            echo '<p>Данные из файла успешно импортированы!</p>';
           
           
          
            $file_name='userfiles/'.$file;
          }
        //////////////////////
        
        require_once "Classes/PHPExcel.php";
 
$excel  = PHPExcel_IOFactory::load($file_name);
 
$vv= array();
$recc = array();
Foreach($excel ->getWorksheetIterator() as $worksheet) {
 $lists[] = $worksheet->toArray();
}
 
$i=0;
  
 $k=0;
 
 
 $irec=0;
 $krec=0;
 
 $j=2; 
 do {
 
 
 $form_post_id=clear_string($lists[0][$j][0]);
 
  $form_post_title=clear_string($lists[0][$j][1]);
   $form_post_date=clear_string($lists[0][$j][2]);
 
   $values = explode("#",$lists[0][$j][3]);
   foreach($values as $val) {
   
 
    $val = explode(",",$values[$i]);
      $i++;
    foreach($val as $v) {
        
       $vv[$k]=$v;
 
   $k++;
  
   
   }
 
   }
   
   
    $fname=array();
    $x=0;
    for($l=0;$vv[$l];$l=$l+5) {
    $first=explode(" ",$vv[$l]);
    
     foreach($first as $f) {
    
     $fname[$x]=$f;
    
    $x++;
    
     }
    }
    
    
    
    //////////////////////////авторы
   
   
    
       $form_post_firstNameAuthor = clear_string($fname[0]); 
       $form_post_secondNameAuthor = clear_string($fname[1]); 
       $form_post_thirdNameAuthor = clear_string($fname[2]); 
    
     
       $form_post_uch_step_Author = clear_string($vv[1]);
       $form_post_uch_zv_Author = clear_string($vv[2]);
          $form_post_dr_zv_Author = clear_string($vv[3]);
     $form_post_dolya_Author = clear_string($vv[4]); 
     
     
 
      
    $result_post = mysql_query("SELECT post_cod FROM xyz_post WHERE post_cod='$form_post_id'",$link);
If (mysql_num_rows($result_post) > 0)
{
    echo 'Ошибка добавления! Идентификатор записи <b>"'.$form_post_title.'"</b> найден в базе данных';
    echo "<br />";
}
else {
    
    echo 'Добавлена запись <b>"'.$form_post_title.'"</b>';
    echo '<br />';
    
    
    mysql_query("INSERT INTO xyz_post (post_cod,name_post, date_time)
                        VALUES( 
                            '".$form_post_id."',                        
                            '".$form_post_title."',
                            '".$form_post_date."'
                            )",$link);
                        
            
 
    $result_uch_step_Author = mysql_query("SELECT * FROM xyz_uch_step WHERE name_uch_step='$form_post_uch_step_Author'",$link);
    $row_uch_step_Author=mysql_fetch_array($result_uch_step_Author);
    $id_uch_step_Author=$row_uch_step_Author['id_uch_step'];
    
    $result_uch_zv_Author = mysql_query("SELECT * FROM xyz_uch_zv WHERE name_uch_zv='$form_post_uch_zv_Author'",$link);
    $row_uch_zv_Author=mysql_fetch_array($result_uch_zv_Author);
    $id_uch_zv_Author=$row_uch_zv_Author['id_uch_zv'];
    
    $result_dr_zv_Author = mysql_query("SELECT * FROM xyz_dr_zv WHERE name_dr_zv='$form_post_dr_zv_Author'",$link);
    $row_dr_zv_Author=mysql_fetch_array($result_dr_zv_Author);
    $id_dr_zv_Author=$row_dr_zv_Author['id_dr_zv'];
    
    
    $result = mysql_query("SELECT * FROM xyz_authors WHERE surname_author='$form_post_firstNameAuthor' AND name_author='$form_post_secondNameAuthor' AND patronymic_author='$form_post_thirdNameAuthor' AND uch_step='$id_uch_step_Author' AND uch_zv='id_uch_zv_Author' AND dr_zv = '$id_dr_zv_Author'",$link);
If (mysql_num_rows($result) > 0)
{
    $row = mysql_fetch_array($result);
   $id_author=$row['author_cod'];
   }
else
{
  $id_author=uniqid("pref_", true); 
  
    
                        mysql_query("INSERT INTO xyz_authors(author_cod,surname_author, name_author,patronymic_author,uch_step,uch_zv,dr_zv)
                        VALUES( 
                            '".$id_author."',                       
                           '".$form_post_firstNameAuthor."',
       '".$form_post_secondNameAuthor."',
      '".$form_post_thirdNameAuthor."',     
       '".$id_uch_step_Author."',
       '".$id_uch_zv_Author."',
          '".$id_dr_zv_Author."'
                            )",$link);
                            $id = mysql_insert_id();
                      }
                        
                        $a='a';
                        mysql_query("INSERT INTO xyz_connect(author_cod,work_cod,author_or_soauthor,dolya)
                        VALUES( 
                            '".$id_author."',                       
                            '".$form_post_id."',                        
                          '".$a."',
                           '".$form_post_dolya_Author."'
                            )",$link);
                            $id = mysql_insert_id();
                                
                        
                    
                    
}           
    
$j++;
 
    
 }
 while($lists[0][$j][0]!='');
    
        }
      
     @unlink($_FILES['xls']['tmp_name']);
   
    }
   else {
        echo '<p class="error">Файл должен быть с расширением .xlsx и не пустой</p>';
      }
    
 
    ?>
            
         <form id="form-registration" enctype="multipart/form-data" method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
    <input type="hidden" name="MAX_FILE_SIZE" value="<?php echo GW_MAXFILESIZE; ?>" />
    
  
    <label for="file1">Импортируемый файл:</label>
    
    <input type="file" id="file1" name="xls" value="Выбор файла"/>
   
   <br />
   <br />
    <input type="submit" class="button-save" value="Импорт записей" name="submit" />
  </form>                   
            
                        </div><!-- Конец блока post-head-->
                    
                    </div><!-- Конец блока post-content-->                      
                </div><!-- Конец блока post-main-->
            
                
            </div><!-- Конец блока content-->
            <div class="sidebar-main"><!-- Начало блока sidebar-main-->
                <?php
        require_once("include/block-sitebar.php");
        ?>
            </div><!-- Конец блока sidebar-main-->
        </div><!-- Конец блока content-main-->
        <div class="footer-main"><!-- Начало блока footer-main-->
            <div class="footer"><!-- Начало блока footer-->
                        <?php
        //require_once("include/block-footer.php");
        ?>
        </div>
        </div><!-- Конец блока footer-main-->
        
    </div><!-- Конец блока karkas -->
 
</body>
 
</html>
0
Вложения
Тип файла: xlsx test.xlsx (19.5 Кб, 3 просмотров)
natasha_t
0 / 0 / 0
Регистрация: 09.02.2017
Сообщений: 6
11.02.2017, 01:01  [ТС] 5
Array
(
[0] => Array
(
[0] => Array
(
[0] => 123
[5] => название
[9] => 2017
[21] => Иванов Иван Иванович, параметр1, параметр2, параметр3, 2150 # Петров Валерий Николаевич, параметр1, параметр2, параметр3, 1510
)
)
0
Vas-e-na
418 / 415 / 78
Регистрация: 21.06.2010
Сообщений: 1,362
13.02.2017, 10:57 6
natasha_t, код не рабочий, двух скобок не хватает как минимум, файл excel не соответствует дампу.
Исправил скобки
Исправил индекс
Прогнал, добавив в файл вторую строку, т.к. без неё все бесполезно
Итог:
Массив $vv не сбрасывается в цикле ни разу, заполняется данный массив через индекс $k, который в свою очередь не сбрасывается в цикле. Данные из массива $vv извлекаются через индекс $l, который в отличие от $k сбрасывается в цикле, а также через статическую адресацию ($vv[1], $vv[2] итд).
В следствии всего выше перечисленного, выводятся данные только из диапазона $vv[0]-$vv[4]. Индексы $vv[5], $vv[10] итп тоже обрабатываются, но не выводятся, т.к. обращение к $fname идет статическое, а в диапазон $fname[0]-$fname[2] попадают данные только из $vv[0];
Для подтверждения ошибки рекомендую сделать дамп переменных $vv и $fname в конце кода (перед </body>) и убедиться.
Для исправления ошибки рекомендую переписать весь код полностью используя многомерные массивы, а не тот фарш что сейчас используется, т.к. из-за него и не работает.
0
13.02.2017, 10:57
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.02.2017, 10:57

Импорт в контроллер
Всем привет. Выдам свою проблему: Имеется контроллер &lt;?php ...

Импорт данных
Как сделать импорт файлов из XML источника или как лучше? И еще, как...

Импорт .sql в PHP
Всем привет. Задача возникла сделать импорт бд через php. Все заработало,...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru