• Как правильно настроить конфиг Nginx?

    @dodo512
    server {
        server_name          www.example.com;
        listen               *:80;
        listen               [::]:80 ipv6only=on;
    
        if ($uri !~* ^/downloads/(.+)$) {
            return 301 https://example.com/downloads/$1;
        }
    
    }

    Тут вместо if лучше использовать location.
    server {
        server_name  example.com  www.example.com;
        listen               *:80;
        listen               [::]:80 ipv6only=on;
    
        location / {
             return 301 https://example.com$request_uri;
        }
        
        location /downloads/ {
            root /var/www/html;
        }
    }
    Ответ написан
    3 комментария
  • Nginx https, как перенаправлять на файл только по http?

    @ynblpb_spb
    дятел php
    в секции, относящейся к 80 порту пропишите location /download/archive.zip и будет счастье
    Ответ написан
    Комментировать
  • Как сделать проверку даты?

    Попробуйте использовать if или case, например:
    SELECT CASE <variable> WHEN <value>      THEN <returnvalue>
                           WHEN <othervalue> THEN <returnthis>
                                             ELSE <returndefaultcase>
           END AS <newcolumnname>
    FROM <table>
    Ответ написан
    Комментировать
  • Как сделать проверку даты?

    usdglander
    @usdglander
    Yipee-ki-yay
    SELECT 'Active Action' as `type`, * FROM `table` WHERE `start_date` IS NULL OR (NOW() BETWEEN `start_date` AND `end_date`)
    UNION
    SELECT 'Upcoming Action' as `type`, * FROM `table` WHERE `start_date` > NOW();

    Как то так...

    upd: Сам не проверял, возможно где то есть ошибка, но суть передал.
    Ответ написан
    Комментировать
  • Как правильно сделать выборку из MySQL БД?

    denman1985
    @denman1985
    SQL, Oracle Forms/Reports dbd
    Вместо JOIN пропиши LEFT JOIN и будут все записи.
    Не все поля заполнены/имеют соответствие в других таблицах. Поэтому показываются только записи с полным соответствиям, коих 349.
    Ответ написан
    9 комментариев
  • Как мне правильно сделать выборку из MySQL?

    qonand
    @qonand
    Software Engineer
    используйте JOIN, например
    SELECT 
      news.id,
      news.title,
      news.text,
      type.type
    FROM news
    LEFT JOIN newsandtype ON news.id = newsandtype.news_id
    LEFT JOIN type ON type.id = newsandtype.type_id
    Ответ написан
    3 комментария
  • Как правильно сделать выборку из БД?

    Ninazu
    @Ninazu
    <?php
    
    #region DB Connection
    
    $dbName = "test";
    $dbHost = "127.0.0.1";
    $dbUser = "root";
    $dbPassword = "";
    $dbCharset = 'UTF8';
    $connection = new PDO("mysql:host={$dbHost};dbname={$dbName};charset={$dbCharset}", $dbUser, $dbPassword);
    
    #endregion
    
    #region Pagination
    
    $limit = empty($_GET['limit']) ? 10 : ((int)$_GET['limit']);
    $offset = empty($_GET['page']) ? 0 : (($_GET['page'] - 1) * $limit);
    
    #endregion
    
    #region GetTypes
    
    $query = "	SELECT
    				`id`,
    				`type`
    			FROM `type`";
    $result = $connection
    	->query($query)
    	->fetchAll(PDO::FETCH_ASSOC);
    $types = array_combine(array_column($result, 'id'), array_column($result, 'type'));
    
    #endregion
    
    #region GetVIIII
    
    $query = "	SELECT
    				`id`,
    				`added_date`,
    				`title`,
    				`type`
    			FROM `viiii` 
    			ORDER BY `id`
    			LIMIT {$offset},{$limit}";
    
    $result = $connection
    	->query($query)
    	->fetchAll(PDO::FETCH_ASSOC);
    
    #region Render
    
    $output = "<table>";
    
    foreach ($result as $row){
    	$typeList = explode(',',$row['type']);
    	$typeList = array_intersect_key($types, array_flip($typeList));
    	$threatType = implode(", ", $typeList);
    	$output.="	<tr>
    					<td>{$row['added_date']}</td>
    					<td>{$row['title']}</td>
    					<td>{$threatType}</td>
    				</tr>";
    }
    
    $output.= "</table>";
    
    echo $output;
    
    #endregion


    Но я бы рекоммендовал вам хранить тип в смежной таблице. В будущем будет меньше проблемм.
    Ответ написан
    Комментировать
  • Как правильно сделать выборку из БД?

    @LeSDav
    Веб-разработчик
    1. Во втором цикле надо предварительно обнулять переменную $type_edit.
    2. В этом же втором цикле непонятно зачем в конце стоит break. В результате в переменную $type_edit попадает только значение "Toolbar", поскольку оно первым выгружается из базы, а потом цикл сбрасывается.
    Ответ написан
    1 комментарий
  • Как в DataTables jQuery сделать экспорт в csv файл?

    vawsan
    @vawsan
    Frontend Developer
    Плагины DataTables поддерживают только экспорт текущей страницы. То есть они на лету формируют нужный вам документ из данных, что сейчас присутствуют в DOM-дереве.
    Для того, чтобы экспортнуть всю таблицу, вам нужно сделать кастомную кнопку(это поддерживается в DataTables) и по клику сделать запрос серверного метода, который сгенерит csv через стороннюю библиотеку на основе всех данных из БД.
    То есть алгоритм такой:
    1. Создаем кнопку
    2. По клику запрашиваем ajax'om api метод
    3. Метод собирает все данные из БД
    4. Оборачивает их сторонней либой в формат csv и кладет во временную папку
    5. А потом возвращает ссылку на файл в виде диалогового окна для сохранения файла
    6. После загрузки файл удаляется


    По другому в этом плагине никак.
    Ответ написан
    Комментировать
  • Как прочитать ответ от сервиса?

    Immortal_pony
    @Immortal_pony Куратор тега PHP
    Я правильно понял, что сервис присылает данные в формате var_dump'а?
    В комментариях Melkij указал на то, что это скорее вывод print_r.
    Неожиданно, но прецеденты уже бывали.

    Обратный парсер для var_dump от коллег со StackOverflow.
    Обратный парсер для print_r от комментаторов php.net и еще один от StackOverflow'цев.

    Также, возможно имеет место быть неверное чтение документации.
    Например, описание указанного сервиса вообще не подозревает подобного формата ответа:

    POST - An HTTP POST to a URL of your choosing with transaction details (in either an XML or CSV format)
    GET - An HTTP GET to a URL of your choosing with transaction detail you define in the query string.


    Уважаемые разработчики, столкнувшиеся с аналогичными проблемами в будущем! Убедитесь, что вы правильно поняли документацию и необходимость в подобных инструментах парсинга действительно имеется (;
    Ответ написан
    5 комментариев
  • Как прочитать ответ от сервиса?

    Melkij
    @Melkij
    PostgreSQL DBA
    то в файл приходит:

    Значит именно этот мусор вам и отправляют. Вместо нормально кодированного application/x-www-form-urlencoded. Пинайте разработчиков этого сервиса, чтобы исправили этот идиотизм.

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

    lazalu68
    @lazalu68
    Salmon
    Не знаю правильно ли я понял задачу, но все же:

    Вы для rel_top рассчитываете разницу между ui.position.top и начальным y вашего мувера, это значение будет отрицательно если вы уменьшаете ui.position.top. Поэтому чтобы в верхней части блока были положительные значения относительного расстояния по y, его расчет достаточно инвертировать.

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

    var rel_left = (ui.position.left - startLeft) / (width_joystick * 2); 
    var rel_top = -(ui.position.top  - startTop) / (height_joystick * 2);


    Имея все это, я думаю вы справитесь с расчетом scale)
    Ответ написан
    Комментировать
  • Как в .htaccess сделать 301 редирект на www???

    zooks
    @zooks
    Frontend
    RewriteEngine On
    RewriteBase /
    
    RewriteCond %{HTTP_HOST} .
    RewriteCond %{HTTP_HOST} !^www\.example\.com [NC]
    RewriteRule (.*) http://www.example.com/$1 [R=301,L]
    Ответ написан
    Комментировать
  • Как определить microsoft edge?

    27cm
    @27cm
    TODO: Написать статус
    Порядок поменяйте, проверку на Edge делайте вначале.

    Microsoft Edge UA: Mozilla/5.0 (Windows NT 10.0; <64-bit tags>) AppleWebKit/<WebKit Rev> (KHTML, like Gecko) Chrome/<Chrome Rev> Safari/<WebKit Rev> Edge/<EdgeHTML Rev>.<Windows Build>
    Ответ написан
    Комментировать
  • Двойной клик, как такое сделать?

    littleguga
    @littleguga
    Не стыдно не знать, а стыдно не интересоваться.
    Выводите блок(ну или что это у Вас там) с классом .wellprod вот так:
    <div class="wellprod" data-id="42(уникальный идентификатор из БД)"></div>

    Соответственно js будет таким:
    $(document).on('dblclick', '.wellprod', function() {
      $('.wellprod').removeClass('active_c');
    
      $(this).addClass('active_c');
      location.href = 'http://site.com/view.php?id=' + $(this).attr("data-id");
    });
    Ответ написан
    5 комментариев
  • Как генерировать ключ?

    27cm
    @27cm
    TODO: Написать статус
    Например, можно сделать так: https://3v4l.org/LHe5q
    <?php
    
    define('SECRET', 'tostersecretcode2015');
    
    /**
     * Создаёт серийный номер с заданной проверочной частью.
     * 
     * @param string $check Часть серийного номера, используемая для проверки.
     * 
     * @return bool
     */
    function sernum ($check = null)
    {
        $template   = 'XXX99-XXX99-99XXX-99XXX';
        
        $parts = explode('-', $template, 2);
        if (!isset($check)) {
            $check = '';
            for ($i = 0; $i < strlen($parts[0]); $i++) {
                switch ($parts[0][$i]) {
                    case 'X': $check .= chr(rand(65, 90)); break;
                    case '9': $check .= strval(rand(0,9)); break;
                }
            }
        }
        
        $sernum = $check . '-';
        $hash = hash('sha256', $check . SECRET);
        
        for ($i = 0; $i < strlen($parts[1]); $i++) {
            switch ($parts[1][$i]) {
                case 'X': $sernum .= chr(65 + ord($hash[$i]) % 26); break;
                case '9': $sernum .= strval(ord($hash[$i]) % 10); break;
                case '-': $sernum .= '-';  break; 
            }
        }
        
        return $sernum;
    }
    
    /**
     * Проверяет серийный номер.
     * 
     * @return bool
     */
    function check_sernum ($sernum)
    {
        $parts = explode('-', $sernum, 2);
        return (sernum($parts[0]) === $sernum);
    }
    
    
    echo '<pre>Десять случайных номеров:<br>';
    for ($i = 0; $i < 10; $i++) 
        echo sernum(), '<br/>';
    
    if (check_sernum('XCC58-AYA68-75ZUU-19TDZ')) {
        echo 'Номер XCC58-AYA68-75ZUU-19TDZ прошёл проверку<br>';
    }
    
    if (!check_sernum('ESJ18-TBZ25-42XDX-38XWY')) {
        echo 'Номер ESJ18-TBZ25-42XDX-38XWY не прошёл проверку<br>';
    }


    Алгоритм создания серийного номера:
    1. Разбиваем шаблон XXX99-XXX99-99XXX-99XXX на две части: XXX99 и XXX99-99XXX-99XXX
    2. Для первой части XXX99 используем случайные буквы и цифры. Получаем, например: XCC58
    3. Вычисляем SHA256 хеш для строки ('XCC58' . SECRET)
    4. Используем коды символов полученного хеша, чтобы получить оставшуюся часть ключа, и подстроить её под шаблон XXX99-99XXX-99XXX. Получаем AYA68-75ZUU-19TDZ.
    5. Объединяем две полученные строки - серийный номер готов.
    Ответ написан
    Комментировать
  • Запись в БД MySQL?

    shaks
    @shaks
    DevMan правильно написал. сначала надо собрать строку, а потом сделать за одни запрос в базу уже апдейт, т.е. так какбы логично и правильно.

    Если я правильно понял то вам нужна конкатенация строки (дозаписать):
    `column` = CONCAT(`column`,' addon string')

    Тут кусок кода, как собрать валидные мыла, и как их вставить через запятую в sql запрос твой.
    pastebin.com/rGdPqU51
    только вставку в mysql выведи за пределы твоего цикла foreach
    Ответ написан
    Комментировать
  • Как добавить класс active в html меню на php?

    He11ion
    @He11ion
    PHP-monkey
    <li <?= false !== strpos($_SERVER['REQUEST_URI'], 'car.php') ? 'class="active"' : '' ?> >

    Например
    Ответ написан
    7 комментариев