У меня есть код, когда начинается цикл, работает сначала вроде-бы правильно, но почемуто заходит на второй круг, и бывает что идет на шаги больше чем указан count()
<?php
include "../config.php";
include 'simplexlsx-master/src/SimpleXLSX.php';
set_time_limit(500);
$user_events_log = array();
function event($a, $b, $c, $d, $dbsql) {
$event = 'UPDATE app_temp_log SET `table_name` = "' . $a . '", `count` = "' . $b . '", `progress` = "' . $c . '", `event` = "' . $d . '" WHERE id = 100';
$dbsql->query($event);
}
function import_log($a, $b, $c, $d, $e, $dbsql) {
$log = 'INSERT INTO ' . 'app_file_import_log' . ' (`admin_name`, `admin_type`, `file_name`, `file_size`, `events`) VALUES (" '. $a .'", " '. $b .'", " '. $c .'", " '. $d .'", " '. $e .'")';
$dbsql->query($log);
if (!empty($dbsql->error)) {
var_dump($dbsql->error);
}
}
// Принимаем файл
$uploaddir = '../../uploads/';
$uploadfile = $uploaddir . basename($_FILES['file']['name']);
// Достаем именя всех таблиц в базе
$tables_array = array();
$check_tables_in_data_base = $db->query("SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = 'BASE TABLE' AND TABLE_SCHEMA=" . "'" . DB_NAME . "'");
while ($collumn = $check_tables_in_data_base->fetch_assoc()) {
array_push($tables_array, $collumn['TABLE_NAME']);
}
// Идем в файл
if (move_uploaded_file($_FILES['file']['tmp_name'], $uploadfile)) {
array_push($user_events_log, '<li>' . 'Файл загружен' . '</li>');
event("", "", "", 'Файл загружен', $db);
if ($xlsx = SimpleXLSX::parse($uploadfile)) {
// Определяем сколько вкладок в документе
$count_tabs = count($xlsx->sheetNames());
// $count_tabs = 5;
// Запускаем цикл по вкладкам
$import_progress = 0;
// var_dump($count_tabs);
// var_dump($xlsx->sheetName( 21 ));
// var_dump($xlsx->rows(21)[0][16]);
// die();
for ($tab = 0; $tab < $count_tabs; $tab++) {
if ($tab <= $count_tabs) {
$import_progress++;
} else {
$import_progress = $import_progress;
}
// echo $xlsx->sheetName( $tab );
$table_name = 'app_catalog_' . $xlsx->rows($tab)[0][16];
// echo '<pre>'; print_r( $xlsx->rows($tab));
// var_dump(count($xlsx->rows($tab)));
// Проверяем есть ли такая таблица в базе
if (array_intersect(explode(' ', $table_name), $tables_array)) {
$sql_table_clear = 'TRUNCATE TABLE ' . $table_name;
$db->query($sql_table_clear);
array_push($user_events_log, '<li>' . 'Чистка таблицы ' . $xlsx->sheetName( $tab ) . '</li>');
event($table_name, $count_tabs, $import_progress, 'Чистка таблицы ' . $xlsx->sheetName( $tab ), $db);
} else {
if ($table_name != 'app_catalog_') {
$sql_create_new_table = "CREATE TABLE $table_name (
`number` int(11) NOT NULL,
`name` text NOT NULL,
`brand` text NOT NULL,
`a` text NOT NULL,
`b` text NOT NULL,
`c` text NOT NULL,
`d` text NOT NULL,
`e` text NOT NULL,
`f` text NOT NULL,
`g` text NOT NULL,
`h` text NOT NULL,
`amount` text NOT NULL,
`application` text NOT NULL,
`note` text NOT NULL,
`jrone` text NOT NULL,
`ee` text NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;";
$db->query($sql_create_new_table);
array_push($user_events_log, '<li>' . 'Создание таблицы ' . $xlsx->sheetName( $tab ) . '</li>');
event($table_name, $count_tabs, $import_progress, 'Создание таблицы ' . $xlsx->sheetName( $tab ), $db);
}
}
// Формируем запрос в Базу данных
$val_array = "";
for ($request = 0; $request < count($xlsx->rows($tab)); $request++) {
if ($request == 0) {
continue;
}
$row = $xlsx->rows($tab)[$request];
$val_array = $val_array . '(' . "'$row[0]','$row[1]','$row[2]','$row[3]','$row[4]','$row[5]','$row[6]','$row[7]','$row[8]','$row[9]','$row[10]','$row[11]','$row[12]','$row[13]','$row[14]','$row[15]'" . '),';
}
$sql_table_clear = 'TRUNCATE TABLE app_catalog_' . $table_name;
$sql_request = 'INSERT INTO ' . $table_name . ' (`number`, `name`, `brand`, `a`,`b`,`c`,`d`,`e`,`f`,`g`,`h`, `amount`,`application`, `note` ,`jrone`, `ee`) VALUES ' . $val_array;
$sql_request = trim($sql_request, ',');
$sql_request = $sql_request . ';';
$import_result = $db->query($sql_table_clear) . $db->query($sql_request);
if ($import_result != true) {
$error = $db->error;
if ($table_name != 'app_catalog_') {
array_push($user_events_log, '<li>' . '<b>Ошибка обновления таблицы</b>' . '<strong>' . $error . '</strong>' . $xlsx->sheetName($tab) . ', проверьте SQL запрос ' . '<code>'.$sql_request.'</code><textarea>'.$sql_request.'</textarea></li>');
event($table_name, $count_tabs, $import_progress, 'Ошибка обновления таблицы ' . $xlsx->sheetName($tab), $db);
} else {
array_push($user_events_log, '<li>' . '<b>Ошибка обновления таблицы</b>' . '<strong>' . $error . '</strong>' . $xlsx->sheetName($tab) . ', проверьте SQL запрос ' . '<code>'.$sql_request.'</code><textarea>'.$sql_request.'</textarea></li>');
event($table_name, $count_tabs, $import_progress, 'Ошибка обновления таблицы ' . $xlsx->sheetName($tab) . '. Отсутствует имя таблици в столбце Q или имя указано неверно!', $db);
}
} else {
array_push($user_events_log, '<li>' . 'Таблица ' . $xlsx->sheetName($tab) . ' обновлена' . '</li>');
event($table_name, $count_tabs, $import_progress, 'Таблица ' . $xlsx->sheetName($tab) . ' обновлена', $db);
}
}
} else {
event("", "", "100", SimpleXLSX::parseError(), $db);
}
import_log($_POST['admin_name'], $_POST['admin_type'], $_FILES['file']['name'], $_FILES['file']['size'], str_replace('</li>,', '</li>', implode(',', $user_events_log)), $db);
event("", "", "100", 'Импорт окончен', $db);
echo "true";
} else {
echo "false";
}
for ($tab = 0; $tab < $count_tabs; $tab++)иfor ($request = 0; $request < count($xlsx->rows($tab)); $request++). Простойvar_dump( count($xlsx->sheetNames()) );иvar_dump( count($xlsx->rows($tab)) );подскажет Вам сколько раз крутится каждый цикл. А вообще, уберите код из одного цикла - выведите что-то и проверьте верно ли это. Если все ок - верните код обратно. Поступите также со вторым циклом. Это же простые методы отладки. Также проверьте не переопределяете ли Вы в где переменные по которым бежит цикл$tabи$request– Nov 08 '21 at 10:14