• Как убрать дублирование свойств в SQL?

    ThunderCat
    @ThunderCat
    {PHP, MySql, HTML, JS, CSS} developer
    Сто раз обсуждалось. Для атрибутов применяется EAV и связывающие таблицы, для больших массивов данных так же добавляют фасетный поиск.
    Ответ написан
    Комментировать
  • Почему col-xl-10 не работает при указании col-md-8?

    ThunderCat
    @ThunderCat Куратор тега HTML
    {PHP, MySql, HTML, JS, CSS} developer
    Принцип построения блоков в бутстрап описан в документации, а вы прочитали 3 рандомные странички и пытаетесь по ним что-то построить. Каждый адаптивный блок должен быть заключен в row, а внутри уже можно располагать какое-то количество col элементов.

    Так же вся адаптивная страничка должна содержать container, задающий ширину адаптива.
    Ответ написан
    Комментировать
  • Как запретить использовать один токен?

    ThunderCat
    @ThunderCat Куратор тега Веб-разработка
    {PHP, MySql, HTML, JS, CSS} developer
    в куках храню токен и вот задался я таким вопросом, а как запретить использовать этот токен на других устройствах? То есть, что я имею ввиду. Вот есть скажем 2 пк, на одном Вы авторизовались, открыли cookies, скопировали токен и на другом пк его вставили и таким образом вы зашли в аккаунт без авторизации.
    В чем проблема? Так работает вся система куки-зависимых данных (например сессии). Так как куки является приватной информацией в рамках сессии, данные в ней так же считаются приватными и по умолчанию недоступными третьим лицам. По этому все страдания на тему "ой, можно же что-то вытащить и вставить это не безопасно" и прочие страдания юных специалистов по безопасности можно смело взять и выкинуть в психологическую мусорку.

    Если у человека появилась возможность вытащить ваши куки из сессии, проще тут же на месте сменить пароль на свой или вообще сделать с аккаунтом что угодно, не заморачиваясь с поиском кук и прочей фигней. Это вопрос доступа к устройству, а не к данным.
    Ответ написан
  • Как сделать robots.txt и sitemap.xml на мультиязычном сайте?

    ThunderCat
    @ThunderCat
    {PHP, MySql, HTML, JS, CSS} developer
    Не особо важно для сайтмапа. Роботс вроде всегда лежит в корне, в нем можно указать все правила для разных языков.
    Сайтмап может "лежать" где угодно, главное правльно внести его/их в поисковые системы.
    Ответ написан
    Комментировать
  • Добавление комментариев при клике на изображение, кто-нибудь видел готовое решение?

    ThunderCat
    @ThunderCat Куратор тега Веб-разработка
    {PHP, MySql, HTML, JS, CSS} developer
    Подобное реализовано на flickr. Можете у них в коде поколупаться.
    Ответ написан
  • Как на php убрать тег html эллемента, и очистить форму?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    По уровню вопроса конечно понятно что гениальности от кода ждать не стоит, но все же...
    Для начала пару занудных замечаний:
    1)
    if($query = $db->query("SELECT `login`, `password` FROM `admin`")){
    Не стоит выбирать все записи из таблицы, если вам нужна одна, та где логины совпадают. Это в целом плохая практика, но еще хуже когда такой подход будет применен к большой таблице. SQL для этого и придуман чтобы так не делать. Так же, если у вас есть таблица пользователи, не нужно дублировать функционал, перенесите админов туда же, указав им уровень доступа или роль.
    2) пароли в бд должны быть соответствующе зашифрованы, используйте соответствующие функции password_hash() и password_verify() при создании и проверке пароля.
    3) Больше совет, чем инструкция: испльзуйте один стиль обрамления кодовых блоков везде, либо текстовые конструкции типа if - endif, либо везде фигурные скобки. Второе предпочтительнее.

    Что касается собственно вопроса, есть несколько вариантов, самый кривой из которых уже написал сеньор Sergei Parfenov. При неверном логине код просто продолжается формой и вы имеете все данные о проверке, включая правильность/неправильность пароля. Стоит отметить что в данном случае блок проверки логина нужно обрамить проверкой метода запроса и вызывать ее только в случае если метод запроса POST (как это сделать - задание на дом).

    Второй вариант более адекватный, так как первый имеет ряд недостатков.
    1) В начале формы создаем переменные в сессии: $_session['message'] и $_session['old'] с пустыми значениями
    2) В блоке проверки логина $_session['old'] присваиваем значения пришедшие из формы $_POST.
    3) Если в ходе проверки у нас возникли ошибки, пишем сообщение об ошибке в $_session['message'].
    4) Выполняем переадресацию. В форме сначала переносим в переменную $message = $_session['message']??'';; и $_session['message'] очищаем. Тоже самое делаем с $old, не забывая что там обычно массив;
    5) Переносим в поля формы старые значения там где это нужно из $old;
    6) Проверяем что лежит в $message, если там что-то есть - выводим сообщение об ошибке.
    Профит.
    Ответ написан
    Комментировать
  • Почему у меня при миграции возникла ошибка в laravel 10?

    ThunderCat
    @ThunderCat
    {PHP, MySql, HTML, JS, CSS} developer
    Ошибка однозначно в кривом апгрейде лары до 10 версии. Самое простое что можно сделать - поднять новый проект на десятке, руками перенести код из контроллеров, моделей, миграций, сервисов...
    Ответ написан
  • PHP: Почему 'mb_convert_encoding' не конвертирует простую строку?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    по тому что гладиолус документация?
    Ответ написан
    4 комментария
  • Почему не удаётся запустить imagick на php 8.2, 8.3?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    через power shell командой php -i проверял, всегда показывало, что imagick есть и версия та, которую ставил.
    Это говорит о том, что меняли вы не тот php.ini, так как для командной строки и для модуля апача/демона для нжинкса php.ini лежит в другом месте. Тут надо запускать через веб сервер пхп файлик с phpinfo();

    а также отсутствует инфа в php info.
    Значит просто не туда смотрели. Ищите на страничке ini, смотрите где физически лежит ини файл для веба и меняйте настройки в нем.
    Ответ написан
  • Почему форма обратной связи php отправляет часть кода?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    1) Тело хтмл письма, как и любой подвид иксмл, должно начинаться с оперделяющих тегов, у вас же тупо табличка отправляется.
    2) Заниматься мастурбациейфигней с отправкой через mail() в 21 веке как минимум стыдно, как максимум чревато проблемами при отладке и смене функциональности, не говоря уже о том что отправка хтмл контента и приложений становится задачей со звездочкой.
    3) Все легко решается переходом на нормальную библиотеку отправки почты, пхпмэйлер/свифтмэйлер и их многочисленные аналоги.
    Ответ написан
    3 комментария
  • Где взять бэкенд для фронтенд учебного проекта?

    ThunderCat
    @ThunderCat Куратор тега JavaScript
    {PHP, MySql, HTML, JS, CSS} developer
    Комментировать
  • Как посмотреть на строку в в которой запрос SQL выдает ошибку?

    ThunderCat
    @ThunderCat Куратор тега MySQL
    {PHP, MySql, HTML, JS, CSS} developer
    для начала стоит посмотреть какого типа колонка `source`.`new.remains.costsum`, ее формат должен совпадать с форматом `target`.`remains_costsum` - double(15,5). В противном случае, если колонки не совпадают по типу, колонки не совпадают и по размеру и очевидно в `source`.`new.remains.costsum` содержится превышающее заданный диапазон значение.
    Ответ написан
  • Как узнать что загружает php на сервере debian?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Профайлинг, не?
    Ответ написан
    Комментировать
  • Как исправить ошибку при парсинге данных PHP?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    парсинг это не самая простая задача. И не самая быстрая. По этому нормально что парсинг происходит не очень быстро, а настройки сервера не позволяют довести дело до конца.
    Варианты:
    1) разбивайте парсер на части, где каждый шаг сохраняет результат в промежуточной таблице с полем "обработано", и вызывайте его последовательно, как отдельные скрипты
    2) Отключите ограничение на время работы скрипта, это делается либо в конфиге пхп, либо командой set_time_limit(0); Но возможно что ограничения сервера не позволят вам этого сделать.
    3) Запускайте скрипт из консоли, правда придется переписать его так, чтобы лара смогла его запустить, не помню навскидку как там организуется работа с cli скриптами, в других фреймворках часто есть возможность запустить конторллер из командной строки. В зенде вроде есть возможность использовать CliController.
    4) Очереди, раббитмкю как вариант. Формируйте очередь из задач, и они будут выполняться одна за другой как отдельные задачи.
    Ответ написан
    Комментировать
  • Bitrix. Mysql жрет процессор как не в себя. Куда копать?

    ThunderCat
    @ThunderCat
    {PHP, MySql, HTML, JS, CSS} developer
    если оставить 90 тыс позиций - нагрузка на процессор падает больше чем втрое.
    Есть мысль что большое количество запросов происходит минуя индексы, которые возможно вообще отсутствуют. Первое что приходит на ум - залогировать все запросы, выбрать типовые и прогнать их ручками через explain. Заодно и посмотреть что там в плане памяти жрется.
    Так же стоит посмотреть движок таблиц, может там какой-нить майисам или вообще свой особый, бывало такое.
    Ну и возможно у вас где-то вызовы запросов вообще без лимитов, это вполне может сожрать и проц и память подчистую.

    нагрузка: 10-40 обращений в минуту.
    Это вообще ниачем. В купе с мизерной базой размером меньше миллиона записей на таблицу, такая нагрузка действительно вызывает удивление...
    Ответ написан
  • Как запретить скачивание файл по прямой ссылке?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Папка выше документ рута + readfile() + 2 заголовка. Ну и банальная проверка на роль.
    Ответ написан
    8 комментариев
  • Как проверять подлинность данных, отправляемых клиентом в базу данных?

    ThunderCat
    @ThunderCat Куратор тега Веб-разработка
    {PHP, MySql, HTML, JS, CSS} developer
    В этом куске кода критическая переменная это tokens. При нажатии на кнопку start со стороны клиента у пользователя отнимается один токен и кол-во общих токенов отправляется в бд
    Не надо тупить. Раз токен это критичные данные, то никаких "со стороны клиента" быть не должно. Нажат старт - на сервер отправилось "старт пошел", из данных в бд вычитается/прибавляется значение, обратно отсылается что в итоге получилось. С остальным так же - на сервер отправляется событие, а сервер считает чего куда прибавлять и возвращает результат на фронт.
    Ответ написан
    Комментировать
  • Как называется подпрограмма внутри массива?

    ThunderCat
    @ThunderCat Куратор тега JavaScript
    {PHP, MySql, HTML, JS, CSS} developer
    а если внутри элемента массива подпрограмма?
    для этого элемент массива должен быть объектом, и соответственно этот метод будет принадлежать этому объекту.
    Ответ написан
  • Нужна ли адаптивная вёрстка для компьютерного браузера, если кто-то будет уменьшать окно браузера до мобильной версии?

    ThunderCat
    @ThunderCat
    {PHP, MySql, HTML, JS, CSS} developer
    Насколько такой подход к разработке правильный?
    Нинасколько. Так как озон достаточно старая система, проектирование мобильной версии с отдельным мобильным видом наследие периода когда верстку сделать адаптивной было гораздо сложнее, а поисковые роботы еще ориентировались на субдомены по типу м.домен.тлд для отображения результатов поиска с мобильных устройств. Менять что-то с потерей поисковой индексации уже никто не будет.

    В сегодняшних реалиях такой подход для новых проектов неприемлем, так как это лишняя работа и лишний код отдельно для мобильной версии, что еще и обслуживание усложняет. Все делают мобайл фирст верстку (так как ~80% траффика это мобилы), и сразу адаптив, так как современный цсс делает это на раз-два. Короче, сейчас так не делают.

    Навряд ли многие люди так уменьшают окошко браузера вручную и для чего это нужно...
    Это нужно не для людей которые "уменьшают окошко", а для бесшовного перехода между устройствами, так как есть планшеты, нетбуки, мобилы с разным разрешением и просто масштабирование в браузере, и для всего этого зоопарка адаптив позволяет задать нормальный вид, практически для любого устройства в заданном диапазоне разрешений, причем без специальной подгонки под экран.
    Ответ написан
    7 комментариев