Игра "Шпиль"




Принцип обмена данными из 1С с сайтом (на MySQL) и выдачи (публикации) этих данных по запросу.
PHP-Скрипт автоматической загрузки данных из файла данных в формате CSV в базу данных сайта работающего на WordPress.

В продолжение моей темы: 1С:Альфа-Авто Автосалон Автосервис: обмен с сайтом.
С помощью данного скрипта можно загружать в автоматическом режиме, по расписанию, данные сервисных книжек (ремонтов авто) из 1С:Альфа-Авто Автосалон Автосервис.
Также можно загружать данные в ручном режиме: для этого делается скрытая страница, где размещается специальная кнопка.
Комментарии размещенные внутри скрипта разъяснят логику и порядок действия.
Комментарии с "/////    echo" использовались для отладки.
Дополнительно создана таблица для журналирования результатов загрузки данных.
Скрипт включает в себя защиту от SQL инъекций (думаю безопасность соблюдена в полной мере).
В кратце:
1. Пишется скрипт, который запускает этот.
2. Создается регламентное задание в WordPress, по которому запускается скрипт из п.1. 
3. Этот скрипт осуществляет проверку на существование файла обмена в папке.
4. Если данные не новые, загрузка не производится.
5. Если данные новые, очищается таблица сервисных книжек.
6. Загружаются новые данные.

Собственно сам скрипт:

<?php // Полная загрузка сервисных книжек, создан 2024-01-05 12:44:55

global $wpdb2;
global $failure;
global $file_hist;

/////  echo '<H2><b>Старт загрузки</b></H2><br>';

$failure=FALSE;
//подключаемся к базе
$wpdb2 = include_once 'connection.php'; ; // подключаемся к MySQL
// если не удалось подключиться, и нужно оборвать PHP с сообщением об этой ошибке
if (!empty($wpdb2->error))
{
/////   echo '<H2><b>Ошибка подключения к БД, завершение.</b></H2><br>';
$failure=TRUE;
wp_die( $wpdb2->error );
}

$m_size_file=0;
$m_mtime_file=0;
$m_comment='';
/////проверка существования файлов выгрузки из 1С
////файл выгрузки сервисных книжек
$file_hist = ABSPATH.'/_1c_alfa_exchange/AA_hist.csv';
if (!file_exists($file_hist))
{
/////   echo '<H2><b>Файл обмена с сервисными книжками не существует.</b></H2><br>';
$m_comment='Файл обмена с сервисными книжками не существует';
$failure=TRUE;
}

/////инициируем таблицу лога
/////если не существует файла то возврат и ничего не делаем
if ($failure){
///включает защиту от SQL инъекций и данные можно передавать как есть, например: $_GET['foo']
/////   echo '<H2><b>Попытка вставить запись в лог таблицу</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>$m_mtime_file,'last_size_upload'=>$m_size_file,'comment'=>$m_comment));
wp_die();
/////    echo '<H2><b>Возврат в начало.</b></H2><br>';
return $failure;
}
/////проверка лога загрузки, что бы не загружать тоже самое
$masiv_data_file=stat($file_hist);   ////передаем в массив свойство файла
$m_size_file=$masiv_data_file[7];    ////получаем размер файла
$m_mtime_file=$masiv_data_file[9];   ////получаем дату модификации файла
////создаем запрос на получение последней удачной загрузки
////выбираем по штампу времени создания (редактирования) файла загрузки AA_hist.csv, $m_mtime_file

/////   echo '<H2><b>Размер файла: '.$m_size_file.'</b></H2><br>';
/////   echo '<H2><b>Штамп времени файла: '.$m_mtime_file.'</b></H2><br>';
/////   echo '<H2><b>Формирование запроса на выборку из лога</b></H2><br>';
////препарируем запрос
$text_zaprosa=$wpdb2->prepare("SELECT * FROM `vin_logs` WHERE `last_mtime_upload` = %s", $m_mtime_file);
$results=$wpdb2->get_results($text_zaprosa);

if ($results)
{   foreach ( $results as $r)
{
////если штамп времени и размер файла совпадают, возврат
if (($r->last_mtime_upload==$m_mtime_file) && ($r->last_size_upload==$m_size_file))
{////echo '<H2><b>Возврат в начало, т.к. найдена запись в логе.</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>$m_mtime_file,'last_size_upload'=>$m_size_file,'comment'=>'Загрузка отменена, новых данных нет, т.к. найдена запись в логе.'));
wp_die();
return $failure;
}
}
}
////если данные новые, пишем в лог запись о начале загрузки
/////echo '<H2><b>Попытка вставить запись о начале загрузки в лог таблицу</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>0, 'last_size_upload'=>$m_size_file, 'comment'=>'Начало загрузки'));

////очищаем таблицу
$clear_tbl_zap=$wpdb2->prepare("TRUNCATE TABLE %s", 'vin_history');
$clear_tbl_zap_repl=str_replace("'","`",$clear_tbl_zap);
$results=$wpdb2->query($clear_tbl_zap_repl);
/////   echo '<H2><b>Очистка таблицы сервисных книжек</b></H2><br>';
if (empty($results))
{
/////   echo '<H2><b>Ошибка очистки таблицы книжек, завершение.</b></H2><br>';
//// если очистка не удалась, возврат
$failure=TRUE;
wp_die();
return $failure;
}

////загружаем данные
$table='vin_history';         // Имя таблицы для импорта
//$file_hist Имя CSV файла, откуда берется информация     // (путь от корня web-сервера)
$delim=';';          // Разделитель полей в CSV файле
$enclosed='"';      // Кавычки для содержимого полей
$escaped='\

24 Comments

  1. awa

    Прикольно, только совсем непонятно, как реально удаляются ячейки. Только экспериментальным путем удалось выяснить, что удалаяется строка, когда она помечена целиком. В справке об этом ни слова. Также непонятно, когда заканчивается игра. Осталось у меня одна строка с пятью цифрами, и все они помечены. И игра дальше не продолжается, и никакого сообщения о выигрыше/конце игры…

    А главный косяк — можно в ячейках спокойно цифры менять на те, которые нужны!

    Reply
  2. ASDF2

    (1) Ок. Замечания принял, спасибо. Закрыл поле для редактирования. В справку добавил данные об удалении строки.

    Reply
  3. ASDF2

    Че-то вообще ничего загрузить не получается…

    Reply
  4. Olga_siberia

    почему не могу скачать, для девушек говоришь?

    Reply
  5. ASDF2

    (4) не знаю, уже 2 файла загрузил..резульатат нет

    Reply
  6. Olga_siberia

    м-да видимо недоработка нового сайта везде ошибки

    Reply
  7. ASDF2

    Очень странно, но второй файл получилось загрузить:) Качать надо с названием «Шпиль!». Косяк с сообщением о победе изменю завтра.

    Reply
  8. ASDF2

    Сайт глючит страшно. Обновить файлы не удается. Поэтому выкладываю новый:) Исправил все заявленные ошибки.

    Reply
  9. cs25

    Можно загрузиь лишь последний в списке файл … 🙁

    Reply
  10. e.kogan

    Глючит игра. Сама. Есть две цифры, которые можно удалить, а не удаляет; есть строки, закрашенные целиком, которые не удаляются. Могу скинуть архив игры на мыло.

    Reply
  11. ASDF2

    (10) Кидай. Мыло в «об игре»

    Reply
  12. e.kogan

    Кстати, подсказка ту самую комбинацию выдаёт, т.е. должна нормально отрабатывать…

    Reply
  13. e.kogan

    Скинула. Кстати, и мыло можно было бы по клику сделать )))

    Reply
  14. Lorren

    Ошибки, которые описала e.kogan и у меня наблюдаются… и еще глюк: когда выбираешь пару из цифры в первой строке и в цифры в последней — пара исчезает, а подсказка выдает ошибку:

    {Форма.Форма(600)}: Преобразование значения к типу Число не может быть выполнено

    Если ЗначениеПервойСтроки=ЗначениеПоследнейСтроки ИЛИ ЗначениеПервойСтроки+ЗначениеПоследнейСтроки=10 Тогда

    Reply
  15. Lorren

    И еще было бы здовово, если бы строчки собирались.

    Т.е есть 2 строки:

    **3******

    ****6**5*

    вот тут можно было бы объединить первую и вторую строку:

    **3*6**5*

    т.к. цепочки не меняется, а игра скомпануется и по длине будет короче..

    Reply
  16. ASDF2

    (14,15) Постараюсь разобраться.

    Reply
  17. Cube_krsk

    Та же игра, но на 1Cv82: http://infostart.ru/public/71613

    Reply
  18. msmaiorka

    Игрулина просто супер. Огроменное спасибо и большущая плюсандра 😀

    Reply
  19. Lorren

    Игрушка обновилась?

    Reply
  20. nnv30

    Прикольная игрушка

    Reply
  21. mehalyna

    Интересное решение. Помогло продемонстрировать модель теории игр. Спасибо!

    Reply
  22. mehalyna

    Доказательство того, что 1С можна использовать не только для учета. Огромное спасибо заидеи!

    Reply
  23. simuljakr

    Предлагаю переименовать в «солсберецкий шпиль» )) в маркетинговых целях

    Reply
  24. user856012

    (23)

    Предлагаю переименовать в «солсберецкий шпиль» ))

    Это исказит смысл названия: «Шпиль!» — это глагол в повелительном наклонении, потому-то и нравится девушкам.

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *