А забьем в Козла? — Настольная игра в Домино




Принцип обмена данными из 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='\

49 Comments

  1. Ёпрст

    за идею +

    Reply
  2. ROM_1C

    (1) Спасибо, что хоть комуть-то понравилось! 😉

    Reply
  3. Ёпрст

    (2) может, еще и «крест» реализуешь ?

    Reply
  4. Ёпрст

    +3 и онлайн с другими участниками?

    🙂

    Reply
  5. ROM_1C

    (3) Это прикол такой? Или что?

    А в принцыпе на досуге и такое можно!

    Reply
  6. ROM_1C

    От смотрю http://infostart.ru/public/16481/ , хоть и для 77, но домино не вижу 😉

    Reply
  7. Ёпрст

    (5) ? почему прикол ?

    Это разновидность игры в домино — крест

    Reply
  8. Tedman

    Спасибо! ))) Порадовало )

    ❗ Вот только есть глюк небольшой в игре. Когда у тебя нет фишек ходить, то вместо того, что бы обязательно идти на базар, можно ткнуть по одной из своих фишек и ход перейдёт к сопернику… который сам на базар ходит. 😀 Такой своего рода god-mod. 😀

    Ещё раз спасибо за игру. 😉

    Reply
  9. ROM_1C

    (8) И вам спасибо за поддержку. В следующих версиях учту ошибки и пожелания!

    Reply
  10. Abadonna

    Играть точно не буду (да еще в 1С!), но знаю, что игры — одни из самых трудно-программируемых. Поэтому плюс

    Reply
  11. ROM_1C

    (10) Спасибо за поддержку!

    Reply
  12. Арчибальд

    (10) А почему бы благородным донам не забить козла там, где им этого хочется?! © «Трудно быть богом»

    Reply
  13. Abadonna

    (12) А копирайты для кого пишешь? 😉 Если для меня — то я там каждую фразу помню.

    А с тобой мы будем играть в подкидного дурака: два раза подкинем, один раз поймаем

    © Из какого-то фильма… 😉

    Reply
  14. СергейКа

    (13)

    Цитата из Фильма: Вкус хлеба, 1979

    Интернет всё знает 😀

    Reply
  15. bmu220975

    А в ентой игре можно ходить на четыре стороны от первого дупля и обрубать хвосты дуплями (перевотором карты) ?

    Reply
  16. ROM_1C

    (15) неа! Это козел!

    Reply
  17. CheBurator

    Сделай ПЯТЕРЧКУ игра: играет неограниченное колво людей. Начинают поочередно по кругу. Ходит можно с любой костяшки. ОТ ПЕРВОГО закрытого с обоих сторон дубля — можно ветвить и в остальные стороны т.е. получается крест. Цель игры — заработать больше очков. Зарабатываются очки двумя способами: 1. если в результате хода сумма очков на концах (которых м.б. 2, 3 — если от закрытого дубля пошло в одну сторону, а во вторую еще нет, 4 — если дубль ответвлен во все стороны.) веток нацело делится на 5 — колов таких очков пишется на отгрывшего косяшку, ветвится первый только дубль!!! все остальные дубли можно ложить как дубли тогда например 5-5 считается как 10, и как обычную косятшу (5-5 считается как 5). 2 очки можно заработать закончив первым — т.е. выкинув все костяшки. тогда сумма оставшихся костяшек у игроков округляется до кратного 5 и пишется закончевшуму. Если нет фишик — берется из банка 1 шт, не удалось = проехал. На руки раздается тут точно не помню.. толи по 5 фишек, то ли все поровну, отстаок — в банке. записб ведется квадратиками, 1 квадратик =50 очков — ро 5 очков точки и по 5 очков ребра и диагонали. весьма занятная игра

    Reply
  18. ROM_1C

    (17) Спасибо. Учтем 😉

    Reply
  19. CheBurator

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

    Reply
  20. ROM_1C

    (19) ну если обработка дойдет рейтинга +25 вот тогда почнем доделовать:)

    Reply
  21. cleaner_it
    Распольжение домино

    надо поправить на «расположение». И в конце игры дважды выскочило окошко «Твоя берет!» — сначала со счетом 0:51, а потом 0:48. А так прикольно

    Reply
  22. ROM_1C

    (21) Спасибо. Исправим 😉

    Reply
  23. Abadonna
    ну если обработка дойдет рейтинга +25 вот тогда почнем доделовать

    Влип ты! 😉 Скоро дойдет

    Reply
  24. ROM_1C

    (23) Ну почему же влип? Это же приятно, что на первый взгляд несерезная работа привлечет такое количество людей.

    Reply
  25. Abadonna
    что на первый взгляд несерезная работа привлечет такое количество людей.

    Попрограммить — ПОНИМАЮ! Но, блин, играть в 1С — савсэм нэ понимаю.

    Сходу нагуглил:

    http://takegame.ru/others/htm/dominoru.htm

    Reply
  26. ROM_1C

    (26) Каждому свое!!!

    Вот, например, в буха «обърезаы » все права под виндой и запускаеться только 1с. А поиграть в домино хочеться. Вот и прийдет на помощь такая программа как у меня. 😉

    Некоторые люди (http://infostart.ru/public/16481/ ) целые сборники подобного имеют! ❗

    Reply
  27. jhfrek

    А я понимаю! В этом же и весь прикол, что он на 1С написан. То есть на языке который в общем то не для этого создавался. 😀

    Reply
  28. ROM_1C

    (25) Что касаеться программирования, вот у меня в разработке лежит тотал командер со всемома функциями и вебредактор (жалко только что подсветку синтаксиса не могу сделать 🙁 ). Но так как особой необходимости в них нет — так и лежат 😀

    Reply
  29. ROM_1C

    (27) Вот, есть же однодумцы 😎

    Reply
  30. jhfrek

    Прикольно. Особенно вебредактор заинтересовал.

    Reply
  31. ROM_1C

    (30) если интересно пиши в аську 191 3 000 — порассуждаем!

    Reply
  32. jhfrek

    Этот сборник игрушек я уже смотрел давно. Мне особенно xonix понравился. Вот гений написал. Эти нолики на форме бегают. Я код посмотрел, чуть с ума не сошёл. Это же надо голову такую иметь и терпение.

    Reply
  33. ROM_1C

    (32) У меня такая на телефоне есть. До 13 уровня дошол. На нем 5шт бегают + оч. быстро.

    Reply
  34. Abadonna

    (27)

    А я понимаю! В этом же и весь прикол, что он на 1С написан

    Так про это и я на писал:

    Попрограммить — ПОНИМАЮ!

    Не понимаю — играть в 1С.

    (26)

    все права под виндой и запускаеться только 1с. А поиграть в домино хочеться.

    А для обрезанных прав: http://infostart.ru/public/15861/

    Хоть в бильярд, хоть в домино, хоть dll зарегить 😉

    Reply
  35. jhfrek

    Надо что без ВК было. ВК только весь прикол испортит. Лучше уж сразу exe файл тогда запускать. Играть в 1С интереснее из-за того, что это не естественно и необычно. Вот в чём фишка.

    Reply
  36. ROM_1C

    НУ, и кто будет той щасливчик кто поставить «+», через которого я буду доделывать Домино???

    Reply
  37. ROM_1C

    MAntaNA — герой! Через тебя начинаю доработку.

    Reply
  38. Иваныч

    а для 7,7 есть?

    Reply
  39. ROM_1C

    (38) Неа, переходите на 8:)

    Reply
  40. astonvilla

    1 — Насколько я помню, по правилам можно ходить сразу 2-ми дуплями (если они есть на руке), здесь этого нет

    2 — при достижении 101 игра идет дальше, а не заканчивается…

    3 — автоматичсеки не объявляется «рыба»

    Reply
  41. astonvilla

    И еще…

    Если заканчиваешь пусто-пусто, то по идее ты выигрываешь (соперник объявляется козлом 🙂 )

    А если 6-6, то соперникам начисляются штрафные очки (у кого сколько, у нас например 100, но если 6-6 останется одно на руках, то это 50, правда мы играем до 125)

    А если и пусто-пусто и 6-6 одновременно, то это «генеральский козел» 🙂

    Кстати, если объявляется рыба, то в таком случае подсчитывается очки у всех игроков…

    Reply
  42. ROM_1C

    (40) (41) Эти недоработки мы знаем. В процессе иправления! Спасибо за плюс и тест!

    Reply
  43. astonvilla

    Еще нарыл — если нечем ходить, и на базаре есть кости, то «прокатывает» вариант с просто кликаньем на костях, что есть на руке…

    Типа не походил — и ладно 🙂

    Reply
  44. ROM_1C

    Вкурсе. Уже видили!

    Reply
  45. astonvilla

    Когда будет исправление? Я в своем часть подправил 🙂

    Reply
  46. ROM_1C

    (45) В процессе исправления. Программист занят 😎

    Reply
  47. ROM_1C

    Support, а чем не угодил? Почему -?

    Reply
  48. Master07

    Прикольная идея для отдыха…

    Reply
  49. m2d3

    это ужасно! во-первых, ГСЧ есть штатный, во-вторых, еретическое Перейти, в третьих, слоганы. по содержанию и форме некрасивы. это на первый взгляд, взгляда второго не будет

    Reply

Leave a Comment

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