• Как называется такой взлом сайта?

    @alexalexes
    Сайт пережил внедрение вредоносного кода.
    Устранение последствий:
    1) Приостановление работы сайта;
    2) Изучение логов посещений и ошибок сервера, установление точки и время заражения (если возможно);
    3) Сохранение состояния каталогов сайта и дампа БД для изучения;
    4) Восстановление скриптов сайта из изолированного репозитория разработчика;
    5) Восстановление БД сайта из бекапа до времени заражения;
    Устранение причин:
    6) Анализ и исправление прав доступа к FTP-каталогам, пользователей CMS;
    7) Анализ и исправление кода на уязвимость к инъекциям в запросах и шаблонах.
    8) Анализ данных в БД на предмет содержания инъекций в записях таблиц.
    9) Возобновление работы сайта с тщательным мониторингом логов.
    Ответ написан
    1 комментарий
  • Js и Pdf как что и почему?

    @alexalexes
    Если вам нужно сделать таблицу с автозаполнением полей для печати, то в случае веб-реализации вам нужно не начальные, а уверенные знания JavaScript.
    Вот примерно так можно это сделать.
    <html>
      <head>
        <meta http-equiv="Content-Type" content='text/html; charset=utf-8'>
      </head>
      <body>
        <style>
          html, body
          {
            margin: 0;
            padding: 0;
          }
          table
          {
            border-collapse: collapse;
            background-color: #fff;
          }
          table,
          table td,
          table th
          {
            border: 1px solid #333;
          }
        </style>
        <table id="job_briefing">
          <tr><th>Работник</th><th>Должность</th><th>Дата инструктажа</th><th>Инструкция</th><th>Подпись</th></tr>
        </table>
        <script>
          (function()
          {
            var row_count = 30; // количество строк таблицы
            var inctruct_info = '№18 от 01.07.2015'; // номер инструкции, которая будет заполнятся автоматически
            // справочник работников
            var workers =
            [
              {                   
                name: 'Иванов И.А.',
                post: 'Водитель'
              },
              {
                name: 'Петров И.А.',
                post: 'Техник'
              },
              {
                name: 'Сидоров И.А.',
                post: 'Инженер'
              },
            ];
            var job_briefing_table = document.getElementById('job_briefing'); // получаем DOM-элемент со страницы
            for(var i = 0; i < row_count; i++)
              job_briefing_table.appendChild(create_table_row()); // наполняем строками
            
            // функция создания строки
            function create_table_row()
            {
              var tr_elem = document.createElement('tr'); // создаем элемент tr
              var td_elem = document.createElement('td'); // создаем элемент td
              td_elem.appendChild(create_select(workers)); // создаем элемент select и вставялем его в td
              tr_elem.appendChild(td_elem); // вставляем td в tr
              for(var i = 0; i < 4; i++) // создаем и вставляем остальные td
              {
                td_elem = document.createElement('td');
                tr_elem.appendChild(td_elem);
              }
              return tr_elem;
            }
            // функция создания выпадающего списка с работниками
            function create_select(workers /* - список работников*/)
            {
              var select_elem = document.createElement('select'); // содаем элемент select
              var worker_count = workers.length; // определяем кол-во работников в списке
              var option_elem = document.createElement('option'); // создаем элемент option
              option_elem.setAttribute('value', -1); // добавляем в option атрибут value для пустого элемента
              select_elem.appendChild(option_elem); // вставляем option в select
              for(var i = 0; i < worker_count; i++) // перебираем список работников
              {
                var worker = workers[i]; // текущий элемент списка работников
                option_elem = document.createElement('option');
                option_elem.setAttribute('value', i); // добавляем в option атрибут value = порядковый номер работника в списке 
                option_elem.innerHTML = worker.name; // имя работника в option
                select_elem.appendChild(option_elem); // вставляем option в select
              }
              select_elem.onchange = worker_select_onchange; // добавляем обработчик события выбора элемента в выпадающем списке работников
              return select_elem; // возвращаем готовый элемент выпадающего списка
            }
            // обработчик события выбора элемента в выпадающем списке работников
            function worker_select_onchange(e)
            {
              var target = e.target; // получаем то элемент select, на котором произошло событие выбора работника
              var select_value = target.value; // получаем выбранное value - порядковый номер работника
              var tr_elem = target.parentNode.parentNode; // получаем строку, на котором располагается select (второй родительский элемент)
              var td_elems = tr_elem.getElementsByTagName('td'); // получаем все ячейки этой строки
              td_elems[1].innerHTML = select_value == -1 ? '' : workers[select_value].post; // задаем должность для 2-ой ячейки
              td_elems[2].innerHTML = select_value == -1 ? '' : get_current_date(); // задаем текущую дату для 3-ей ячейки
              td_elems[3].innerHTML = select_value == -1 ? '' : inctruct_info; // задаем сведения об инструкции для 4-ой строки
            }
            // функция получения текущей даты по формату DD.MM.YYYY
            function get_current_date()
            {
              var date = new Date();
              var day = date.getDate();
              var month = date.getMonth() + 1;   
              return  (day < 10 ? '0' : '') + day + '.'  + (month < 10 ? '0' : '') + month + '.' + date.getFullYear();
            }
          })();
        </script>
      </body>
    </html>
    Ответ написан
    1 комментарий
  • Как изменить стиль командой строки?

    @alexalexes
    Изменить стиль можно, но очень ограниченно:
    Прав. кнопка мыши по заголовку окна -> свойства.
    Ответ написан
    3 комментария
  • Как удалить нужную запись из БД?

    @alexalexes
    Если заняться изучением основ SQL, то можно понять, что в данной ситуации самым оптимальным решением будет - выполнить запрос с параметром:
    DELETE FROM videos WHERE id = ?
    Естественно, на странице браузера надо обеспечить, чтобы при нажатии кнопки "Удалить" серверу передавался id удаляемой записи, помимо того, какое действие мы хотим совершить.
    Серверный скрипт, также должен принимать не только параметр вида действия (delete), но параметр id, на какую запись необходимо направить действие. Далее, структура SQL-запроса должна иметь в себе возможность подставить параметр.
    PS:
    $ids = R::getAssoc('SELECT id FROM videos');
        $videos = R::find( 'videos', 'id = ?', $ids );

    Самое не оптимальное решение - выгребать все записи из таблицы, а потом на стороне серверного приложения искать ту единственную, которая удовлетворяет условию. Эта медвежья услуга нагружает тракт обмена данных между веб-сервером и СУБД-сервером.
    Ответ написан
    Комментировать
  • Как вывести текстовое содержимое элемента в консоль браузера?

    @alexalexes
    Чтобы получить решение, изучите материал:
    1. Вывод в консоль;
    2. Поиск элементов в документе;
    3. Получение содержимого элемента.
    Ответ написан
    Комментировать
  • Какой оптимальный объем ОЗУ будет оптимален в ноутбуке ASUS X555LB?

    @alexalexes
    Вариант А:
    заменить планку на 8 ГБ той же частоты

    с поправкой: "с пониженным напряжением питания". У вас DDR3L распаяна на матери.
    Почему не Б?
    заменить планку на 16 ГБ той же частоты

    Спецификация на ваш ноут говорит, что 12 Гб - это максимум (4 + 8 опциональных).
    Почему не В?
    заменить планку на 8 ГБ частотой выше

    Тандем из двух планок будет работать на самой минимальной частоте среди максимумов каждой планки, поддерживаемой материнкой.
    PS: Покупая ноуты с распаяной оперативкой, вы теряете возможность заменить планку на первом слоте на планку с макс. параметрами. Так, что от теоретического макс. в 16 Гб на практике останется 12 Гб.
    Ответ написан
  • Стоимость ремонта материнской платы ноутбука?

    @alexalexes
    Сгорела группа входных транзисторов.
    Если только этот компонент вышел из строя, то вам повезло.
    Сдавайте в мастерскую, желательно, конечно, в сервис центр самого производителя.
    Диагностика покажет, каковы масштабы бедствия.
    Ответ написан
  • Как сделать вывод значений из одинаковых полей формы?

    @alexalexes
    Обработчик селекта js который и меняет блоки с помощью display:none, display:block.

    Вариант А. Переписать этот обработчик так, чтобы наверняка удалял неиспользуемый вариант и создавал блок с нужным вариантом полей, тогда у вас в форме не будут лишних полей.
    Вариант A2. Переписать этот обработчик так, чтобы в скрытых блоках имена полей были с префиксами, а не в скрытых префиксы убирались, тогда сервер будет обрабатывать только те поля, у которых нормальные имена (без префиксов).
    Вариант A3. К дополнению к display: none, нужно вырубать поля атрибутом disable.
    Вариант Б. Поля с именами, которые будут обрабатываться на сервере вынести в отдельные поля hidden (на форме будут поля с теме же именами, но с префиксами, чтобы они не пересекались и не брались в учет сервером), и по submit сделать обработчик, чтобы он переносил в них значения по текущему состоянию формы.
    PS: Самый нетрудозатратный для разработчика - вариант А3.
    /* 
      Функция вкл и выкл полей формы в различных контейнерах
      @param str enable_id - id-контейнера, в котором нужно вкл. поля ввода
      @param arr disable_ids - массив id контейнеров, в которых нужно выкл. поля ввода
    */
    function fields_enable_and_disable(enable_id, disable_ids)
    {
      var enable_container = document.getElementById(enable_id); // получаем контейнер, в котором нужно "включить" поля ввода
      var field_types = ['input', 'select', 'textarea']; // все виды полей ввода с которыми нужно проделать манипуляцию вкл/выкл.
      var count_i = field_types.length; // кол-во типов полей
      for(var i = 0; i < count_i; i++) // перебираем типы полей
      {
        var field_type = field_types[i]; // текущий тип поля
        var enable_fields = enable_container.getElementsByTagName(field_type); // получаем коллекцию полей ввода, которые нужно вкл.
        var count_j = enable_fields.length; // кол-во полей текущего типа
        for(var j = 0; j < count_j; j++) // перебираем поля этого типа
          enable_fields[j].disabled = false; // включаем
        var count_k = disable_ids.length; // кол-во контейнеров, в которых нужно выкл. поля
        for(k = 0; k < count_k; k++) // перебираем неактивные контейнеры
        {
          var disable_id = disable_ids[k]; // id - текущего неактивного контейнера
          var disable_container = document.getElementById(disable_id); // получаем неактивный контейнер
          var disable_fields = disable_container.getElementsByTagName(field_type); // получаем поля текущего типа неактивного контейнера
          var count_n = disable_fields.length; // кол-во этих полей по текущ. типу
          for(var n = 0; l < count_n; n++)
            disable_fields[n].disabled = true; // выкл. эти поля
        }
      }
    }
    Ответ написан
  • Нужен ли Фотошоп?

    @alexalexes
    Нужен, хотите ли вы этого или нет, потому что это основной инструмент основной массы специалистов в этой сфере.
    Говорим "работа с дизайном" подразумеваем использование Фотошопа.
    Говорим Фотошоп подразумеваем работу с дизайном.
    Ответ написан
    2 комментария
  • Как передать массив данных из бд в метод?

    @alexalexes
    А почему бы в callback-функции не сделать этого?
    let queryString = 'SELECT * FROM products';
    connection.query(queryString, function (err, results) {
            for (let i in items) {
               let products = [{
                    "id":items[i].id,
                    "name": items[i].name,
                    "price": items[I].price
            }];
        }
       link.addProducts(products);
    });
    Ответ написан
    Комментировать
  • Как это работает и какую нагрузку несёт?

    @alexalexes
    1. Зависит от конкретной реализации структуры сайта. От куки города может меняться, например, только выборка новостей, а может переключаться полностью шаблон сайта на совершенно другой.
    2. Почему бы и нет.
    Ответ написан
    Комментировать
  • Как называется данная адаптация?

    @alexalexes
    font-size тоже проценты принимает, но вы ужаснетесь, как он будет тупо все масштабировать.
    Вам все-равно придется корректировать частные случаи медиазапросами.
    Ответ написан
    Комментировать
  • Как правильно написать код мета описания?

    @alexalexes
    Вы бы хоть сказали, в какой CMS правите модуль и что за модуль/обертка.
    Если пользоваться чистыми знаниями PHP, то по принципу "есть что-то в свойстве - добавляем в строку":
    $description = $item['description']
           .(isset($item['category_title']) ? ', '.$item['category_title'] : '')
           .(isset($item['city_name']) ? ', '.$item['city_name'] : '');
    $this->setPageDescription($description);

    PS: Вообще, добавлять какие-то сущности через запятую в метатегах характерно для keywords, а не для description. Но вы лучше видите предметную область, вам видней.
    Ответ написан
    1 комментарий
  • Можно ли дать права на редактирование информации, без полного доступа к сайту?

    @alexalexes
    Не знаком с Битрикс.
    Но для любой CMS должно быть доступно такое решение:
    1) Создание роли контент-менеджера под определенный тип контента CMS (роль несет в себе необходимые ограничение к объектам CMS и FTP каталогу);
    2) Создание аккаунта пользователя контент-менеджера, и закрепление его за ролью;
    Ответ написан
    Комментировать
  • Почему у ajax при foreach функция в success срабатывает только после проработки всего массива?

    @alexalexes
    alert стопорит выполнение последующих инструкций, пока пользователь не ответит на всплывающиее окно, поэтому вот это будет выполнено после ответа пользователя.
    document.getElementById('product_image_files').style.display = 'none';

    PS:
    for (l = 0; l < obj.length; l++)
    Вы в курсе, что l в таком описании всегда будет создаваться в глобальном объекте window, а не локально, если цикл описан в какой-нибудь функции?
    Если цикл работает по принципу "отработал и забыл, что было в счетчике", то никогда не забывайте писать var.
    for (var l = 0; l < obj.length; l++)
    Ответ написан
    6 комментариев
  • Как осуществить выборку MySQL?

    @alexalexes
    А зачем вам куча запросов? Нужен всего один, но с параметрами и мат. функциями.
    Чистая математика, ничего лишнего.
    SELECT *
    FROM points p
    WHERE sqrt(pow(p.x - :x, 2) + pow(p.y - :y, 2)) <= :r -- используем формулу определения расстояния между двумя точками, параметры запроса, которые нужно задать :x, :y, :r.
    Ответ написан
  • Как из класса обратиться к элементу формы?

    @alexalexes
    Вы пытаетесь смешать логику хранения списка тем с логикой их отображения.

    // тут добавление пункта в меню

    и

    public void click(object sender, EventArgs e)
    {
    // здесь процедура по изменению textbox1.text
    }

    Этого не должно быть в этом классе.
    Наполнение формы должно происходить в классе формы с использованием готовых объектов класса Lesson.
    Ответ написан
  • Какой эквивалент функции data_seek в PDO?

    @alexalexes
    php.net/manual/ru/pdostatement.fetch.php
    Читайте, как использовать необязательные параметры cursor_orientation и cursor_offset.
    Вероятно, подготовка запроса будет выглядеть так:
    $db->prepare($query, array(PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL));

    А чтение строки с шагом вот так:
    $row = $result->fetch(PDO::FETCH_ASSOC, PDO::FETCH_ORI_REL, 2); // шаг = 2
    Ответ написан
    Комментировать
  • Как прервать foreach и вывести один div?

    @alexalexes
    Все, что требует вставки после постобработки списка должно копиться в отдельной переменной $output2. Таких переменных для постобработки может быть несколько, если глубина вложенности большая, или нужно сгенерировать html в разных областях до/после списка.
    $output .= '<div class="floor">';
      $output .= '<div class="category">';
      $output2 = ''; // тут будем копить html, необходимый для вставки после обработки списка
      foreach($myPosts as $newPosts)
      {
          $newText = $newPosts->post_title;
          $post_id = $newPosts->ID;
          $permalink = get_permalink($post_id);
          $thumb = get_the_post_thumbnail_url( $post_id, 'medium' );
          $meta_values = get_post_meta( $post_id, 'floor', true );
          $string = '';
          $test = get_the_category( $post_id );
          if($prev != $meta_values && $output2 == '') // какое-то условие сработало на определенном проходе списка, и его еще не обрабатывали
          {
            $prev = $meta_values;
            $output2 .= '<span class="name">'.$string.'</span>'; // записываем вывод обработки отдельно
          }	
          $output .= '<span class="shop" data-section="'.$meta_values.'" data-shop="'.$post_id.'" data-name="'.$newText.'" data-link="'.$permalink.'" data-newlink="'.$new_links.'" data-cat="<span>'.$name.'</span>"><span>'.$newText.'</span>';
      }
      $output .= '</div>';
      $output = $output2.$output; // доставляем перед списком некие элементы, которые можно получить только после обработки списка.	
      $output .= '</div>';
    Ответ написан
    Комментировать