Задать вопрос
  • Не получается сделать чтобы форма регистрации передавала данные в БД, как правильно это сделать и что заменить?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    1) Код с какого-то древнего ресурса, который надо закрыть за порнографию...
    2) Совать в базу непроверенные строки (логин, например) крайне не желательно, так же, неплохо бы проверить что поле емэйла содержит что-то напоминающее емэйл.
    3) Неплохой практикой считается проверить пришло ли что-нибудь вообще в запросе, например через var_dump($_POST);
    4) Про подготовленные выражения уже пальцы устали писать каждый раз, используйте их!
    5) $password = md5('kakdj834'); хэшировать черте-что после добавления в бд пароля в открытом виде - особый вид искусства...
    6) нужно видеть ошибки, соответственно при подключении вызвать
    mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
    , исполнение оборачивать в трай-кетч, если уж ловите руками...

    Короче, все плохо, сжечь...
    Ответ написан
    Комментировать
  • Не работает feedback форма РНР?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    0) Смотрите логи. Или включите вывод ошибок и варнингов директивой
    ini_set('error_reporting',E_ALL);
    ini_set('display_errors', 1);

    1) За использование mail в 21 веке в нормальном обществе с человеком перестают общаться, возможно бьют. Используйте современные мэйл библиотеки, PHPMailer, SwiftMailer, у них внятная документация, удобный и простой функционал, а главное - хороший дебаг и простая отладка.
    2) $send = mail (...) вам НИЧЕГО не скажет об отправке письма, и вернет тру в случае удачной передачи его в пул отправки (что вообще не гарантирует его дальнейшую отправку)
    3) if ($send == 'true') естественно будет всегда возвращать бред, так как вы сравниваете булево значение со строкой. Правда, конкретно в этом коде, у вас, по стечению обстоятельств, будет даже работать правильно...
    Ответ написан
    Комментировать
  • Почему html2pdf выдает пустой лист?

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

    Я бы в вашем случае шел постепенно
    Попробовать библиотеку на отдельном хтмл файле, без вью, с небольшим элементом.
    Убедиться что все работает - искать решение в: а) Настройках б) Вью в) особенностях хтмл блока г) Версии и совместимости
    не работает - смотреть настройки и параметры, консоль, версии пакетов, в конце концов почитать мануал...
    Ответ написан
    Комментировать
  • Как обновить страницу напрямую через сервер?

    ThunderCat
    @ThunderCat Куратор тега Веб-разработка
    {PHP, MySql, HTML, JS, CSS} developer
    2 комментария
  • Как добавить добавить токен для авторизованного пользователя?

    ThunderCat
    @ThunderCat
    {PHP, MySql, HTML, JS, CSS} developer
    В вашем случае есть несколько способов, различных по реализации.
    1) Самый простой - не использовать токен в заголовке, а переслать его как пост параметр, соответственно линк будет по сути формой (точнее ее кнопкой субмит). На сервере соответственно проверяете токен вручную из пост запроса, обратно отдаете собсно поток файла, предварив его соответствующими заголовками, что-то типа
    header("Cache-Control: public");
        header("Content-Description: File Transfer");
        header("Content-Disposition: attachment; filename=somefile.ext");
        header("Content-Transfer-Encoding: binary");
        header("Content-Type: binary/octet-stream");
        readfile($filePath);

    2) Если принципиально хочется через мидлвэйр ловить токен и больше не заморачиваться, то фетч - задаем заголовки с токеном. На сервере отдаем файл, на клиенте ловим как блоб, делаем из блоба урл, и на скрытый линк с этим урл делаем клик. Типа как тут.

    3) Так же через фетч отдаем заголовки, на сервере формируем временный разовый линк с каким-нибудь хитрым хэшем, обратно возвращаем этот линк, далее в колбэке делаем window.location = хитрый_линк, и с сервера с заголовками из первого варианта отдаем файл, - вуаля, получаем диалог сохранения. Беда как и в первом случае с отсутствием заголовков во втором запросе с хитрым линком, то есть те же яйца, вид сбоку... Единственно что тут можно прописать урл скачивания как публичный, и быть уверенным что линк точно получен авторизованным пользователем.
    Ответ написан
  • Что выбрать для мультиязычного сайта?

    ThunderCat
    @ThunderCat Куратор тега Веб-разработка
    {PHP, MySql, HTML, JS, CSS} developer
    https://www.google.com/search?q=%D1%80%D0%B5%D0%BA...

    3 линк - рекомендации гугла для разрабов. Остальное читать в качестве материала для ознакомления.
    Ответ написан
    Комментировать
  • Как убрать класс у других айтемов при клике на соседний?

    ThunderCat
    @ThunderCat Куратор тега JavaScript
    {PHP, MySql, HTML, JS, CSS} developer
    Сначала убираете у всех, затем включаете на текущем.
    Ответ написан
  • Как правильно составить GET запрос для сокращения ссылки?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Так как сервер не открывает для вас страницу по указанному урл, а делает редирект на нужную ссылку, соответственно и в курл надо добавить директиву фоллоу редирект, емнип "-L"
    Ответ написан
  • Где допущены ошибки и как можно улучшить код?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Штош...

    1) Элементарные ошибки на уровне запросов с инжекциями.
    2) Класс документ зачем-то получает объект юзера, нигде его не использует, тем не менее даже при использовании нарушает принцип инкапсуляции, объекты не должны по логике знать о других объектах.
    3) Класс юзер так же нарушает принципы инкапсуляции и единой ответственности, в частности зачем-то работает с документом, а не занимается обслуживанием сущности юзера, опять же, класс не должен знать о других сущностях, он должен реализовывать только логику собственной сущности.
    4) методы getTitle() и getContent(), кроме того что не указывают явно на необходимые поля, надеясь на неизменность сущности в бд, еще и накладывают множественную нагрузку, по сути на каждый чих выполняя один и тот же запрос, вместо 1 запроса инициализации данных и далее обращения к уже существующим атрибутам.
    5) Отсутствие неймспейсов и изоляция кода по классам так же отсутствует, соответственно про нормальный автолоад можно забыть.

    Вывод: говнокод в чистом виде.
    Ответ написан
    3 комментария
  • Какой инструмент может превратить схему БД в панель управления или админку?

    ThunderCat
    @ThunderCat
    {PHP, MySql, HTML, JS, CSS} developer
    Не совсем понятна цель, сделать админку из данных бд? Или просто инструмент редактирования бд?
    В первом случае искать по %фреймворк_нейм% admin panel (например под ларавель есть вояджер, нова, муншайн...), во втором случае это видимо что-то типа phpmyadmin и его аналоги под соответствующий стек...
    Ответ написан
    4 комментария
  • Какой библиотекой редактировать, заполнять шаблон pdf на php?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Для начала, pdf не самый удобный для редактирования формат.

    Если у вас задача получать разные пдф, заполнять их и отдавать заполненные, то скорее всего подойдет mPDF, Zend_Pdf или связка fpdf + fpdi. В любом варианте код простым не будет, а чтение доков займет прилично времени.

    Если же задача заполнить определенный шаблон и отдать его в виде пдф, то проще создать нормальный хтмл шаблон, сверстанный под печать, а затем выводить его в пдф через хеадлесс хром, дающий максимальную повторяемость с хтмл шаблоном. Ну или другой пдф построитель, если нужно.
    Ответ написан
    3 комментария
  • Как лучше сделать историю покупок на MySQL?

    ThunderCat
    @ThunderCat Куратор тега MySQL
    {PHP, MySql, HTML, JS, CSS} developer
    operation_type это тип операции. Списание или же начисление. От этого на фронте будет вырисовываться определённый текст. PLUS - начисление, SUB, списание, но как я уже и сказал это у меня вызывает вопросы. Ведь даже при списании будет начисление.
    Смысл? Правильнее добавлять минус при списании к стоимости покупки, тогда это поле вообще не понадобится, а сумма по транзакциям будет правильной. Ну и на фронте исходя из знака отображать что там нужно...

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

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

    И как бы Вы реализовали систему списания и начисления баллов? Наверное это самый главный вопрос
    Так а какая логика начислений? Надо добавить - делаем апдейт на нужную сумму, нужно списание - делаем апдейт на нужную разницу, в чем вопрос?

    Стоит ли делать зависимости? Чтобы сумма бонусов клиента зависела от таблицы покупок
    Может где то, в определённом источнике имеется свод информации, касаемо таких решений? Может где то, в определённом источнике имеется свод информации, касаемо таких решений?
    Это называется "нормальные формы". На практике вам будут нужны первая, вторая и третья нормальная форма (например хранение total_purchase нарушает 3 НФ, так как может быть вычислена из объединения с таблицей покупок).

    По наименованию полей: Вроде все более-менее норм, единственно что list_purchase и sum_purchase логичнее переставить - purchase_list и purchase_sum, хорошо же начинали с purchase_date, что пошло не так? )
    Ответ написан
    Комментировать
  • Почему не работает innerHTML?

    ThunderCat
    @ThunderCat Куратор тега JavaScript
    {PHP, MySql, HTML, JS, CSS} developer
    я правильно понимаю что вы меняете innerHTML у строки, полученной из innerHTML?
    Ответ написан
    Комментировать
  • Как получить удаленный доступ к локальным доменам?

    ThunderCat
    @ThunderCat Куратор тега Веб-разработка
    {PHP, MySql, HTML, JS, CSS} developer
    Самым очевидным выходом выглядит впн + ремоут десктоп. Да, работать вы в таком случае будете именно на удаленной машине, но в принципе это самое удачное решение из имеющихся...
    Ответ написан
    Комментировать
  • Почему в response ответ выводит 500 (Internal Server Error)?

    ThunderCat
    @ThunderCat
    {PHP, MySql, HTML, JS, CSS} developer
    storage/logs/laravel.log
    Ответ написан
    Комментировать
  • Как правильно оповестить пользователю о занятых его данных?

    ThunderCat
    @ThunderCat Куратор тега Веб-разработка
    {PHP, MySql, HTML, JS, CSS} developer
    Мол, даем злоумышленнику понять, что почта верная и достаточно ему просто подобрать пароль.
    Это неправильные разработчики, и они делают неправильный мед код...

    Во первых не понятно чего вы боитесь - взлома почты или взлома аккаунта вашего сайта?
    Если первое - это как минимум глупо, все сервисы почты достаточно хорошо защищены от атак перебором, 99,9% взломов - фишинг и социнженерия. А емэйл достаточно публичная информация, чтобы не парится конкретно с вашим сайтом.

    Если второе - у вас так же должна быть защита от перебора, а подтверждение наличия зарегистрированности емэйла - нормальная практика, НИЧЕГО не дающая злоумышленнику. Ну, в случае ХОТЬ КАКОЙ-ТО РЕАЛЬНОЙ, а не мнимой защиты (как в случае "ой, нельзя говорить что такой имэйл уже есть, а то у нас от перебора защиты нету...").

    Спокойно отдавайте сообщение об ошибке, при введении 3 и более раз неверного пароля в авторизации - капча. При введении более 3 раз неверного пароля с капчей - письмо на мыло с кодом разблокировки, взломщику бан по айпи и сообщение о возможности разблокировки через емэйл.
    Ответ написан
  • Почему переменная пустая?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Так а в чем вопрос? У вас же переменная переписывается внутри цикла, во втором ифе? Учитесь дебажить:
    $selected_cat = 1111; // если тут прописать переменную, то выводит её значение которое тут
    $deb = [];
    $i = 0;
        foreach ($aTabs as $aTab) { 
            foreach ($aTab['OPTIONS'] as $key => $arOption) {
            $deb[$i]['key'] = $key;
                if ($request['apply']) {
                    $deb[$i]['apply'] = 1;
                    $optionValue = $request->getPost($arOption[0]);
                    $deb[$i]['optionValue']  = $optionValue;
                    if ($arOption[0] == 'select_cat') {
                            $deb[$i]['arOption'] = $arOption[0];
                            $deb[$i]['selected_cat_1'] = $selected_cat;
                            $selected_cat = $optionValue; //тут у вас на какой-то итерации пусто, и переменная дохнет
                            $deb[$i]['selected_cat_2'] = $selected_cat;
                            Option::set($module_id, 'qqqqq', $key );/// выводит 1
                    }
                    Option::set($module_id, 'sssss', $selected_cat );// выводит переменную
                    if ($arOption[0] == 'start_load_product') {
                        echo  $key; // выводит 2
                        Option::set($module_id, 'qqqqq', $key );// выводит 2
                        Option::set($module_id, 'sssss', $selected_cat );// переменная пустая
                    }
    
                }
            }
            $i++;
        }
    echo '<pre>' . print_r($deb,1).'</pre>'; exit;
    Ответ написан
    4 комментария
  • Как правильно сформировать логическое условие в php?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Во первых - вы сравниваете строки, что уже хреново.
    Во вторых - в правилах выставления времени уже должны быть ограничения, например что время закрытия больше времени открытия, так же с обедом, и еще надо проверить что обед попадает между закрытием и открытием.
    Ну и когда вы приведете все условия в нормальный вид можно думать о логике, которая по факту проще пареной репы... ну и $work_time по уму должно быть $work_start_time, то же самое с $dinner_time.
    Если все еще не ясна логика:
    $work_time = [
      'work_start_time'=>'09:30',
      'work_end_time'=>'18:20',
      'dinner_start_time'=>'13:30',
      'dinner_end_time'=>'14:00',
    ];
    $answer = 'Closed';
    $date = str_replace(':','',$work_time);
    $now = date('Hi');
    if( $date['work_start_time'] <= $now && $now <= $date['work_end_time'] ) $answer = 'Now we open';
    if( $date['dinner_start_time'] <= $now && $now <= $date['dinner_end_time'] ) $answer = 'Now we on break';
    echo $answer;
    Ответ написан
    3 комментария
  • Как избавиться от ломающих тегов HTML которые создаются пользователем на странице?

    ThunderCat
    @ThunderCat Куратор тега JavaScript
    {PHP, MySql, HTML, JS, CSS} developer
    Так в чем проблема? В тегах как таковых или в их стилизации?
    В первом случае - php strip_tags или аналогичный функционал другого ЯП на стороне сервера, во втором случае - редактор с поддержкой bbcode + strip_tags на стороне сервера.
    Ответ написан
    Комментировать
  • Как запускать код для всех страниц статического сайта?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Есть код который надо запустить, перед тем как отдать страницу. Сервер Апач...
    Возможно можно в htaccess правило прописать или например через index.php отдавать страницы, но они уже созданы...
    В хтаксесе прописываете переадресацию всех запросов на индекс.пхп (т.н. единая точка входа, нужен модуль апача mod_rewrite), далее в индексе обрабатываете $_SERVER["REQUEST_URI"], достаете путь до хтмл файла и делаете readfile или include... Profit.
    Ответ написан
    1 комментарий