Задать вопрос
  • DI как правильно внедрять "постоянные зависимости"?

    puchkovk
    @puchkovk
    Усложнять — просто. Упрощать — сложно.
    Как быстро все это конструировать не используя DI - контейнеры?


    Ответ - если вы хотите писать приличный код, то никак. Извернуться можно по-разному, но в итоге у вас все равно получится подобие DI контейнера. Круглое - лучше катить. Поэтому проще сразу взять DI контейнер. Рядом в ответах уже подсказали неплохой вариант (League). С ним не так сложно разобраться, просто надо понять базовый принцип.
    Ответ написан
  • Как сделать надежную защиту для личной страницы?

    puchkovk
    @puchkovk
    Усложнять — просто. Упрощать — сложно.
    1. Хранить пароль в открытом виде - неправильно.
    2. На каждой странице вводить пароль - неудобно. Лучше в сессии запомнить, что вы уже его спрашивали

    $password = '...'; // результат работы crypt('пароль');
    if (empty($_SESSION['login'])) {
      if($_POST["login"] === $login && !empty($_POST["password"]) && crypt($_POST["password"]) === $password) {
        // здесь создаем сессию, и пишем в нее что-то типа
        $_SESSION['login'] = TRUE;
      }
    }


    Это черновик, а не готовый код, в нем не хватает некоторых проверок. Применяйте с головой =)

    Очень желательно ознакомиться с вот этим:
    https://www.php.net/manual/ru/faq.passwords.php#fa...

    Второй вариант - использовать авторизацию веб-сервера. Например, для nginx:
    https://nginx.org/ru/docs/http/ngx_http_auth_basic...
    Ответ написан
    Комментировать
  • PHP, class PDO not found, что делать?

    puchkovk
    @puchkovk
    Усложнять — просто. Упрощать — сложно.
    Как вариант, в верхней части страницы после namespace - c новой строки добавить

    use PDO;

    Если, конечно, у вас установлено расширение mysql (почти всегда - установлено)
    Ответ написан
  • Как решить проблему с кавычками?

    puchkovk
    @puchkovk
    Усложнять — просто. Упрощать — сложно.
    jQuery("#button").html('<input id="button" type="button" onclick="post(\'name\');">');


    "лишние" кавычки можно экранировать, поставив перед ними обратный слеш "\"

    Ну и тут лучше использовать .html() вместо .text()
    Ответ написан
    Комментировать
  • Как сделать кастомные checkbox с картинками?

    puchkovk
    @puchkovk
    Усложнять — просто. Упрощать — сложно.
    .input__kids:checked{
      background-image: none;
    }
    .input__kids:checked:before{
      content:' ';
      width:1em;
      height:1em;
      position:absolute;
      left: -2em;
      top: 0;
      background-image: url(/images/svg/cheked.svg);
    }


    Общий смысл - делаете чекбокс прозрачным (но не display:none), а в псевдоэлемент before пихаете ваш SVG.
    Ответ написан
    Комментировать
  • Как правильно подключать сторонние скрипты?

    puchkovk
    @puchkovk
    Усложнять — просто. Упрощать — сложно.
    Обычно создается спец. файл, который подключается первой строкой во всех страничках (или index.php, если все запросы приходят в него). Например, init.php, он кладется в корневую директорию сайта. Т.е. в ту, которая соответствует "http://название_ресурса/". А в нем определяется константа, которая потом используется для подключения библиотек и т.п.

    init.php
    define('DOCROOT', realpath(dirname(__FILE__)) . DIRECTORY_SEPARATOR);


    somepage.php
    require_once('./init.php');
    require_once(DOCROOT . 'lib/database.php');


    Также, в init.php можно вынести другие глобальные настройки, например подключение к БД.
    Ответ написан
    Комментировать
  • Как взять value в option?

    puchkovk
    @puchkovk
    Усложнять — просто. Упрощать — сложно.
    jQuery:
    var item = $('.unit').val();

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

    puchkovk
    @puchkovk
    Усложнять — просто. Упрощать — сложно.
    Это работает автоматически, при увеличении высоты содержимого страницы. Например, можно просто добавить длинный текст, чтобы он не поместился на страницу - тогда появятся полосы прокрутки, и можно будет прокрутить колесиком.
    Ответ написан
    Комментировать
  • На чем лучше реализовать многопоточный веб-скрейпер/парсер сайтов?

    puchkovk
    @puchkovk
    Усложнять — просто. Упрощать — сложно.
    Выбор языка для подобной задачи сводится к выбору имеющихся готовых библиотек, которые нужно просто скомпоновать. Задача решалась уже сотни раз, ваять свои велосипеды нет смысла. В почти любом языке, применяемом массово для веб-разработки есть готовые библиотеки для решения подобных задач.

    Ну и точно не на С++, будет долго, дорого и бессмысленно, это язык для других задач.

    Можно еще посоветовать делать том языке, который лучше всего знаком/нравится тому, кто будет непосредственно это программировать. Или, если исполнитель не знает ни одного подходящего под задачу языка - на PHP, просто потому, что будет проще вникнуть.
    Ответ написан
    Комментировать
  • Как передать выделенный текст из браузера в стороннее приложение?

    puchkovk
    @puchkovk
    Усложнять — просто. Упрощать — сложно.
    Передавать выделенный текст через запрос по сети - например, localhost:8888/text=текст. Это элементарно делается при помощи JS. Ну а приложение должно слушать определенный адрес/порт, и принимать такие запросы.

    UPD: Ну или как хорошо подсказали в комментариях к вопросу - через native messaging api.
    Ответ написан
    Комментировать
  • При работе какие семантические теги используете?

    puchkovk
    @puchkovk
    Усложнять — просто. Упрощать — сложно.
    На сайте W3C есть статья, посвященная отличиям html4 от html5.

    Если вкратце - основные теги, например <div> или <span> работают точно так же, как и в HTML 4. Из них можно при желании сделать все что угодно. Добавилось довольно много новых, в основном чтобы облегчить структурную разметку (<header>, <footer>, <nav>, <section>). И часть тегов, в основном те, что отвечали за оформление (раскраску) - была убрана из стандарта. Например, <big>, <center>, <font>.

    Также, неплохой справочник - сайт htmlbook.ru.
    Ответ написан
    Комментировать
  • Ничего не будет если я куплю домен на одном сайте, а хостинг будет на другом сайте?

    puchkovk
    @puchkovk
    Усложнять — просто. Упрощать — сложно.
    Это распространенная практика, и если регистратор и хостер нормальные - все будет отлично работать.
    Ответ написан
    Комментировать
  • Как можно изменить значения в БД при помощи PHP?

    puchkovk
    @puchkovk
    Усложнять — просто. Упрощать — сложно.
    Если предположить, что у вас таблица вида
    |   id   | reviews_name | reviews_body | reviews_logo |
    -------------------------------------------------------
    |    1   | Вася         | тут был вася | /pic.jpg     |
    -------------------------------------------------------
    |    2   | Петя         | Петя тут был | /pic2.jpg    |
    -------------------------------------------------------

    И вам надо иметь возможность сделать редактирование нескольких строк сразу, то можно вот так:

    $model = [ 'id' => 'Идентификатор', 'reviews_name' => 'Имя', 'reviews_body'=> 'Текст', 'reviews_logo'=>'Аватар' ];
    
    if (!empty($_POST)) {
       $update_review = $db->prepare(
        'UPDATE reviews SET 
          reviews_name = :name, 
          reviews_body = :body,
          reviews_logo = :userpic
        WHERE id = :id'
          );
    
        $id = $_POST['id'];
        $name = $_POST['reviewName'];
        $body = $_POST['reviewBody'];
        $userpic = $_POST['userPic'];
    
        foreach ($_POST['reviews']  as $pr) {
            $data = [];       
            foreach ($model as $field=>$field_name) {
                $data[$field] = !empty($pr[$field]) ? $pr[$field] : '';
            }
            $update_review->execute($data);
       }
        $update_review->execute([
          'name' => $name,
          'body' => $body,
          'userpic' => $userpic,
          'id' => $id
        ]);
    
    $reviews = $db->select ... // получаем отзывы, которые нам нужны
    
    foreach ($reviews as $r) {
       foreach ($model as $field=>$field_name) {
           ?>
           <?=$field_name?>: <input type="text" name="reviews[<?=$r['id']?>][<?=$r[$field]?>]" value="<?=$r[$field]?>" />
           <?php
       }
       ?>
       <br />
       <?php
    }
    ?>
    <input type="submit" />


    Чтобы добавить новое поле - понадобится по сути, только обновить таблицу в БД и массив $data.
    Ответ написан
    Комментировать
  • Какие коды ОКВЭД выбрать для веб программиста, ИП в 2016г?

    puchkovk
    @puchkovk Автор вопроса
    Усложнять — просто. Упрощать — сложно.
    Как мне подсказали в комментариях, "старый" классификатор применим до 1 января 2017 года. После надо будет, видимо, подать заявление об изменении, что несложно. Итого, остановился на всех подпунктах 72.хх, плюс 74.81 - деятельность в области фотографии, плюс 74.40 - рекламная деятельность.
    Ответ написан
    Комментировать
  • Стоит ли в PHP в функциях или методах класса закрывать объявленные переменные, для экономии памяти и ЦПУ?

    puchkovk
    @puchkovk
    Усложнять — просто. Упрощать — сложно.
    Здесь достаточно подробно описана работа с памятью в PHP
    Ответ написан
    Комментировать
  • Стоит ли создавать интернет-магазин для портфолио на чистом PHP?

    puchkovk
    @puchkovk
    Усложнять — просто. Упрощать — сложно.
    Не тратьте время на чистый PHP. Начните с любого распространенного фреймворка, сделайте на нем что-то простое, чем можно будет пользоваться. Главное - четко поставьте себе ТЗ. ПосмОтрите на архитектуру, на организацию кода, сделаете пару модулей. И получите удовольствие, а не будете биться об собственное незнание. Главное, берите что-то нормальное - Laravel, Kohana, Yii, даже opencart можно, чтобы начать с чего-то простого.

    Вы же не начинаете сажать лес, когда нужно сделать деревянный забор, правда? Это только кажется, что все просто. Не просто, серьезно.
    Ответ написан
    Комментировать
  • Какую CRM систему выбрать?

    puchkovk
    @puchkovk
    Усложнять — просто. Упрощать — сложно.
    Для веб-студий хорошо подходит Мегаплан. На старой работе пользовались, было удобно.
    Ответ написан
    Комментировать
  • Как проверить форму отправки без сервера?

    puchkovk
    @puchkovk
    Усложнять — просто. Упрощать — сложно.
    Установите локальный сервер, будет очень удобно в дальнейшем. Наиболее хардкорно, зато полезно для обучения - Linux в виртуалке, например, Virtualbox. Можно и попроще, open server, или хоть Денвер - он древний, но довольно прост в установке.

    Также, стоит сделать валидацию формы на стороне клиента, и ресурсы сервера сэкономите, и пользователям удобнее будет. Но стоит отметить, что валидация на стороне клиента не освобождает вас от проверки корректности данных формы на сервере.
    Ответ написан
    Комментировать
  • Какое посоветуете легкое IDE для PHP под Linux?

    puchkovk
    @puchkovk
    Усложнять — просто. Упрощать — сложно.
    Netbeans IDE для PHP.

    1. Нет, подсвечивает весь синтаксис.
    2. Да.
    3. Да.
    4. Да.
    5. Да.
    6. проверка синтаксиса PHP - есть, интеграция с интерпретатором PHP - вроде нет, но подсветка отличная, можно указать версию PHP.
    7. Да.
    8. Не настраивал у себя, но вроде бы да.

    Пользуюсь сам уже много лет, мощная IDE c множеством плюсов. Пробовал вместо нее phpStorm - и все равно остался на Netbeans. Да, иногда медленная, но оно того стоит.
    Ответ написан
    Комментировать
  • Как избежать многократного исполнения динамичеки подгружаемого JavaScript?

    puchkovk
    @puchkovk
    Усложнять — просто. Упрощать — сложно.
    Вероятно, у вас создается несколько одинаковых обработчиков на одно событие.
    Можно попробовать вешать обработчики через $(document).on('click', '#button', function(){ код });, причем убрать этот код из получаемого по ajax ответа, вынести его в общий .js.
    Ответ написан
    Комментировать