• В какой таблице хранятся ответы студента на тест(Moodle)?

    @exxxt4zy
    Таблица answers
    Ответ написан
    Комментировать
  • Как сделать поиск по таблице?

    @maksam07
    Что мне для этого нужно сделать ?

    Вам нужно написать немного кода.

    Нужно ли что-то делать на бэке и/или в базе данных ?

    Если таблица без пагинации и вся информация выгружается сразу на одну страницу, то можно и на фронте реализовать
    Если есть пагинация, то эффективнее на беке
    Ответ написан
    2 комментария
  • Как связать пользователей своего сайта с их аккаунтами телеграмм?

    Adamos
    @Adamos
    Сам как раз изучаю этот вопрос и буду рад, если более опытные товарищи расскажут более правильный вариант.

    Пока так: даете пользователю перейти по ссылке вида https://t.me/ИМЯ_БОТА?start=ТОКЕН.
    В токене шифруете ID пользователя и подпись (чтобы посторонний не подделал обращение).
    Он переходит по ссылке, подтверждает подписку на вашего бота, боту приходит сообщение, в котором есть и ID чата, и вот это сообщение с токеном, из которого вы вынете ID пользователя, которому надо прописать этот чат.
    Ответ написан
    9 комментариев
  • Как создать базу данных и связать с PHP и MySQL?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    База данных нинужна
    Достаточно будет
    <?php
    file_put_contents('databaza.txt', json_encode($_POST, JSON_UNESCAPED_UNICODE)."\n", FILE_APPEND);

    ну и чтобы вывести
    foreach(file('databaza.txt') as $loh) {
         echo json_decode($loh, true)['email'], "<br>\n";
    }


    Ну а форму на HTML я думаю Frontend developer (senior+) уж как-нибудь осилит.
    Ответ написан
    2 комментария
  • Влияет ли различные кодировки таблиц на производительность MySQL?

    @Akina
    Сетевой и системный админ, SQL-программист.
    если в базе mysql (версия 5.7) часть таблиц в utf8mb4_general_ci, а другая в utf8_general_ci

    :facepalm: Это не кодировки! Это COLLATION - набор правил для сравнения строковых значений.

    Хотя справедливости ради следует сказать, что возможные COLLATION определяются использованным CHARACTER SET. А для показанных значений они различны - utf8mb4_general_ci указывает на UTF8MB4, а utf8_general_ci на UTF8, который для этой версии СУБД является алиасом UTF8MB3.

    Влияет ли это как-то на производительность mysql?

    Если выполняется сравнение строковых значений (либо иная обработка таких значений в пределах одного выражения) с указанными CHARSET/COLLATION - несомненно, поскольку перед сравнением как минимум одно из значений должно подвергнуться конвертированию CHARSET, а это ресурсы.

    Если нет - то на производительность именно СУБД это влияет слабо. Заметное влияние будет при прогреве кэшей, а также в случае ну очень объёмных таблиц.

    Плюс гарантированное преобразование финального набора записей при несовпадении CHARSET поля и клиентского соединения.
    Ответ написан
    2 комментария
  • Минимальные настройки безопасности Linux на VPS?

    Tyranron
    @Tyranron
    Ряд моментов Вы уже сделали, но я все равно их опишу для полноты списка.

    1. Создать отдельного пользователя и хороший пароль на sudo. Не использовать больше root напрямую. Совсем.

    2. SSH. Отключаем метод аутентификации по паролю. Если Вам не нужны другие методы, то их тоже можно отключить, оставив только publickey. Отключаем возможность аутентификации root'ом. Включаем использование только 2й версии SSH протокола.

    3. Устанавливаем Fail2Ban и настраиваем чтобы после нескольких неуспешных попыток подключения по SSH банило по IP на длительное время. Кол-во попыток и время бана можно тюнить в меру своей паранойи. У меня, например, банит на час после 2х неуспешных попыток.

    4. Iptables. Действуем по принципу "запрещено все, что не разрешено". Запрещаем по умолчанию весь INPUT и FORWARD трафик снаружи. Открываем на INPUT'е 22 порт. В дальнейшем открываем порты/forwarding по мере необходимости. Если у нас предполагаются сервисы на соседних серверах нужные только для внутренней коммуникации (Memcached, Redis, и т.д.), то открываем для них порты только для определенных IP. Просто так торчать наружу для всех они не должны.

    5. Настраиваем автоматические обновления apt-пакетов. Уровень security. То есть так, чтобы обновления безопасности накатывались автоматически, но при этом не выполнялись обновления со сменой мажорной версии (дабы обезопасить себя от "само сломалось").

    6. Устанавливаем ntpd. Серверное время должно быть точным. Также временную зону сервера лучше всего установить в UTC.

    7. TLS (не SSL) используем везде где можем. Через Let's Encrypt получаем бесплатные валидные сертификаты. В конфигах веб-серверов, mail-серверов, и других приложений торчащих наружу (в том числе и OpenVPN), запрещаем/убираем использование слабых шифров. Все ключи/параметры генерируем не менее 2048 бит. Самоподписные сертификаты подписываем с помощью SHA-256 (не SHA-1). Diffie-Hellman параметры (dh.pem) под каждый сервис лучше сгенерить отдельно. Проверяем TLS сервисов через Nmap. Минимальный grade должен быть A, не должно быть warning'ов.

    8. Правильный менеджмент пользователей/групп. Приложения/сервисы не должны запускаться под root'ом (разве что они действительно этого требуют и иначе никак). Для каждого сервиса создается свой пользователь.

    9. Если предполагается upload файлов через PHP (либо другие скриптовые языки), в директории, куда эти файлы загружаются (и которая доступна снаружи), должно быть жестко отключено любое выполнение скриптов/бинарников, что на уровне ОС (x права), что на уровне веб-сервера.

    Это была база.
    Дальше, в меру своей паранойи можно за'harden'ить сервер ещё следующими моментами:
    - SELinux, chroot
    - доступ к SSH только с определенных IP (нужно иметь 3-4 VPN-сервера под рукой)

    UPD И да, все это помнить/настраивать руками каждый раз может быть запарно. Используйте Ansible и автоматизируйте процесс (там родные и YAML, Jinja2 и Python).
    Ответ написан
    10 комментариев
  • Почему в phpstorm перестал работать поиск по файлам?

    BOOMER_74
    @BOOMER_74
    Full-Stack разработчик
    Проверьте, что файлы/папки не исключены из проекта (Settings -> Directories). Если с настройками все нормально, попробуйте сбросить кэш.
    Ответ написан
    Комментировать
  • Правильно ли я понять суть реляционных бд?

    @IgorNoskov
    Связи между таблицами нужны в первую очередь для целостности данных. Например, можно сделать такую связь между таблицей пользователей и их постами, чтобы при удалении пользователя, база данных автоматически удаляла все его посты. Либо наоборот, сделать такую связь, что нельзя удалить пользователя, если есть посты от него. То есть связями можно создать защиту, которая гарантирует, что случайно не удалится какая-то запись.

    То что у вас нет связей, это не значит, что у вас не реляционная база данных. Это определяется самой базой данных, а не вашими связями.

    С помощью связей, автоматом у вас не получится при вставке или удалении записи обновить количество записей в другой таблице. Это нужно делать в запросе.

    Update
    Ещё связи помогают избежать ошибок, например, по ошибке никак не получится добавить пост в несуществующую категорию или удалить категории, в которой есть посты. Надеюсь поняли суть.
    Ответ написан
    1 комментарий
  • Редирект в папку для субдомена через RewriteRule

    smargelov
    @smargelov
    Верстальщик
    Я вот так всегда делаю.

    RewriteEngine On
    
    
    RewriteRule ^market/ - [L]
    RewriteCond %{HTTP_HOST} ^market\.site\.ru$
    RewriteCond %{DOCUMENT_ROOT}/market%{REQUEST_URI} -d
    RewriteRule [^/]$ %{REQUEST_URI}/ [R,L]
    RewriteCond %{HTTP_HOST} ^market\.site\.ru$
    RewriteRule (.*) market/$1 [L,QSA]
    
    
    RewriteRule ^market/ - [L]
    RewriteCond %{HTTP_HOST} ^www\.market\.site\.ru$
    RewriteCond %{DOCUMENT_ROOT}/market%{REQUEST_URI} -d
    RewriteRule [^/]$ %{REQUEST_URI}/ [R,L]
    RewriteCond %{HTTP_HOST} ^www\.market\.site\.ru$
    RewriteRule (.*) market/$1 [L,QSA]
    
    Ответ написан
    Комментировать
  • Как настроить сервер nginx на перенаправление на одну точку входа на сайт?

    @karminski
    Senior React.JS Developer
    Примерно так
    location / {
        # Redirect everything that isn't a real file to index.php
        try_files $uri $uri/ /index.php$is_args$args;
    }

    Взято отсюда.
    Ответ написан
    2 комментария
  • Как настроить сервер nginx на перенаправление на одну точку входа на сайт?

    Urvin
    @Urvin
    Перенаправления в NGINX задаются в конфигурационном файле. Часто под один домен выделяют один конфигурационный файл и валяется это дело в /etc/nginx/sites-available/*.
    В вашем случае фрагмент для перенаправления в таком конфигурационном файле может быть таким:
    server
    {
      ...
      location / {
        try_files $uri $uri/ /index.php?_url=$uri&$args;
      }
      ...
    }
    Ответ написан
    3 комментария
  • Как исправить работу datepicker?

    @iShatokhin
    JS developer
    После потери фокуса инпутом вот этот код по таймауту скрывает ваш datepicker:

    $('#dateDepartureInput, #dateArrivalInput').on('focus', function () {
    	$(this).siblings('.js-datepicker-wrap').removeClass('hidden');
    }).on('focusout', function () {
    	var $this = $(this);
    	setTimeout(function () {
    		$this.siblings('.js-datepicker-wrap').addClass('hidden');
    	}, 500);
    });


    P.S. класс hidden очень плохая практика, у ui.datepicker есть свой метод ".datepicker('hide')".

    Все это надо заменить на:
    $('#dateDepartureInput, #dateArrivalInput').datepicker({
      showOn: "focus"
    });
    Ответ написан
    6 комментариев
  • Не работает PHP7 на Debian 8?

    nazarpc
    @nazarpc
    Open Source enthusiast
    Я бы вам для начала посоветовал ставить Nginx так:
    apt-get install nginx
    Правда проще чем компилировать? А его ещё и обновлять придется!
    Теперь по поводу PHP 7: https://got-tty.org/debian-jessie-php-7-repository
    То есть добавить один репозиторий (dotdeb достаточно известный и надежный), а потом:
    apt-get install php7.0-fpm
    Всё! И обновляться будет вместе с остальным софтом. Компилировать с исходников нужно только когда иначе никак или если вам нужны какие-то специфические настройки/патчи во время компиляции.
    К тому же с пакетами у вас и сервисы пропишутся, и всё прочее.
    Запускать потом так:
    service nginx start
    service php7.0-fpm start
    Ответ написан
    22 комментария
  • Как вы перезапускаете локальный сервер node.js при разработке?

    @latish
    Пользуюсь таким методом,

    npm install -g forever
    forever -w start YourApp.js

    -w watches dir files and subdirs'
    Ответ написан
    Комментировать
  • Оператор clone в php: как работает?

    AMar4enko
    @AMar4enko
    Если я правильно понял причину вашего замешательства - $this внутри clone это уже экземпляр-копия.
    Т.е. при вызове $objDup = clone $obj;
    объект $obj копируется в новый объект $objDup, после чего вызывается ___clone, $this в котором ссылается уже на $objDup.
    Т.е. __clone это не обработчик копирования, а хук, который вызывается после копирования в для объекта-копии.
    Ну и напоследок: php.net/manual/ru/language.oop5.cloning.php
    Ответ написан
    1 комментарий
  • Как сделать чтобы js работал в элементе, полученным ajax'ом?

    markitantovm
    @markitantovm
    Художник, музыкант, литературовед
    $(document).on('click', '.button', function() {
        console.log('click');
      });
    Ответ написан
    1 комментарий
  • Как сделать чтобы js работал в элементе, полученным ajax'ом?

    Stalker_RED
    @Stalker_RED
    Получается, что элементы, загруженные аджаксом, не воспринимают так просто обработчики, но почему?
    Потому что в тот момент, когда вы пытаетесь навешиваете обработчик на кнопку (сразу после загрузки страницы) этой кнопки еще нет.

    Как сделать чтобы они понимали их?

    Делегирование событий, как и подсказал Максим Маркитантов
    $(document).on( // обработчик вешается на сам документ (лучше на родительский элемент)
    'click', // слушает все клики
    '.button',  // ищет среди них те, что были по элементам с классом .button
    function() {
        console.log('click');
      });


    Другой вариант: навесить обработчик уже после того как ajax'ом добавили новые кнопки.
    Ответ написан
    Комментировать
  • Почему не работает javascript после ajax получения ответа?

    Добрый день.
    Может это конечно и некропост, но все же я хотел написать по поводу 2го пункта, про событие jQuery.on().
    Везде написано
    $("div").on("click", function(){
    /** что то делается **/
    })

    Но более точное и правильное я нашел в сети, чтобы скрипт отрабатывал именно на подгруженных ajax элементах:
    $('ближайший_родительский_и_статический_элемент').on('событие', 'динамически_подгруженный_елемент', function(){
        // действия, которые надо выполнить
    });
    Ответ написан
    4 комментария
  • Как обновить скриншоты приложения в App Store?

    EgorkZe
    @EgorkZe
    iOS (Swift), GoLang
    Нужно собирать новый билд, потом к нему цеплять новые скриншоты и опять ждать неделю пока не одобрят приложение
    Ответ написан
    Комментировать
  • DIV на всю высоту родителя?

    @vitya_yanyk
    Адаптивная высота
    html:
    <div class = "fullpage">
         <div id = "screen_1">
         </div>
    
         <div id = "screen_2">
        </div>
    </div>


    css:
    .fullpage {
    	position: relative;
    	margin: 0px;
    	padding: 0px;
    	max-width: 100%;
    	min-height: 200%;
    	max-height: 200%;
    	overflow: hidden;
    }
    #screen_1, #screen_2 {
    	position: absolute;
    	left: 0px;
    
    	width: 100%;
    	height: 50%;
    
    	margin: 0px;
    	padding: 0px;
    }
    	#screen_1 {
    		top: 0px;
    	}
    	#screen_2 {
    		top: 50%;
    	}


    fullpage - родительский блок с высотой в 2 экрана (200%), который содержит в себе 2 дочерних блока с высотой по 1 экрану каждый (50% от fullpage). У первого top: 0px и высота 50%, у второго top: 50% (т.к. он идёт встык после первого блока). Таким образом, мы можем задать n-е кол-во блоков-экранов с высотой (100% / n) и точкой top для каждого
    for (i = 0; i < n; i++) {
    top[i] = (100% / n) * i;
    }
    :)))

    Да, а ещё в современных браузерах поддерживается такая клёвая адаптивная штука, как vh и vw, что есть размеры видимой области окна браузера по высоте и ширине соответственно:
    .fullpage {
         height: 100vh;      /*--- 100% от высоты видимой области страницы в браузере ---*/
         width: 100vw;     /*--- 100% от ширины ---*/
    }

    НО! Эта штука не поддерживается на разных мобильных браузерах и на старых версиях обычных браузеров, так что пока эта штука не такая уж и крутая :(
    Ответ написан
    Комментировать