Задать вопрос
Ответы пользователя по тегу PHP
  • SQL запрос не работает?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    SELECT  * FROM `catalog` as `c` 
        INNER JOIN `atributes` AS `a1` ON `c`.`art` = `a1`.`art` 
        INNER JOIN `atributes` AS `a2` ON `c`.`art` = `a2`.`art` 
        WHERE `c`.`catalog_3` = "Видеокарты" 
            AND `c`.`price` != "0" 
            AND `c`.`avail` != "0" 
            AND `a1`.`names` = "Производитель" 
            AND `a1`.`value `IN ('ZOTAC','PALIT','ASUS') 
            AND `a2`.`names` = "Графический процессор"  
            AND `a2`.`value` IN ('nVidia GeForce GTX 660') 
            ORDER BY price ASC 
            LIMIT 0, 15

    Но правильно выражать свои мысли на русском языке всё-таки научитесь, пригодится.
    Ответ написан
  • Как составить логику для фильтра?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Вариант 1 - в php собираете запрос из кусков
    $where = array();
    if (isset($_GET['manufacturer']))
        $where[] = "`manufacturer` = '".$mysqli->escape_string($_GET['manufacturer'])."'";
    if (isset($_GET['madeIn']))
        $where[] = "`madeIn` = '".$mysqli->escape_string($_GET['madeIn'])."'";
    $query = "SELECT * FROM `table` WHERE ".implode(" AND ", $where);
    $result = $mysqli->query($query);

    Вариант 2 - запрос с двойным условием
    $manufacturer = '';
    $byManufacturer = 0;
    $madeIn = '';
    $byMadeIn = 0;
    if (isset($_GET['manufacturer'])) {
        $manufacturer = $_GET['manufacturer'];
        $byManufacturer = 1;
    }
    if (isset($_GET['madeIn'])) {
        $madeIn = $_GET['madeIn']";
        $byMadeIn = 1;
    }
    $query = $mysqli->prepare(
        "SELECT * FROM `table` ".
            "WHERE (? = 0 OR `manufacturer` = ?) ".
                "AND (? = 0 OR `madeIn` = ?)");
    $query->bind_param('isis', $byManufacturer, $manufacturer, $byMadeIn, $madeIn);
    $query->execute();
    Ответ написан
    2 комментария
  • E-mail рассытлка без бана

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Вполне логично, что письмо отправляют в спам не переходя по непонятным ссылкам. Мало того, что можно какую-нибудь гадость подцепить, так ещё и подтверждаешь спаммеру, что адресом действительно кто-то пользуется.
    А вообще учитывайте:
    18-ФЗ О рекламе
    Статья 18. Реклама, распространяемая по сетям электросвязи
    1. Распространение рекламы по сетям электросвязи, в том числе посредством использования телефонной, факсимильной, подвижной радиотелефонной связи, допускается только при условии предварительного согласия абонента или адресата на получение рекламы. При этом реклама признается распространенной без предварительного согласия абонента или адресата, если рекламораспространитель не докажет, что такое согласие было получено. Рекламораспространитель обязан немедленно прекратить распространение рекламы в адрес лица, обратившегося к нему с таким требованием.
    Ответ написан
  • Как реализовать изменения значения функции при клике на ссылку php?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    На странице
    <a href="mysite.ru/?version=mobile">На мобильную версию</a>

    В php
    <?php
    session_start();
    if (isset($_REQUEST['version'])) {
            $_SESSION['version'] = $_REQUEST['version'];
    // Общий код сайта
    if ($_SESSION['version'] == 'mobile') {
        //Код мобильной версии
        echo '<a href="mysite.ru/?version=desktop">На десктопную версию</a>';
    } else {
       //Код десктопной версии
        echo '<a href="mysite.ru/?version=mobile">На мобильную версию</a>';
    }
    ?>
    Ответ написан
    Комментировать
  • Как на php выполнить сразу несколько SQL запросов?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Если есть уникальный ключ, то можно сделать примерно так:
    INSERT INTO `table` (`key_field`, `upd_field1`, `upd_field1`) 
        VALUES ('key1', 'f1_val1', 'f2_val1'), ('key2', 'f1_val2', 'f2_val2')
        ON DUPLICATE KEY UPDATE 
            `upd_field1` = VALUES(`upd_field1`), 
            `upd_field2` = VALUES(`upd_field2`);
    Ответ написан
    Комментировать
  • Из-за чего непонятное поведение тернарного оператора в PHP?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Тернарный оператор исполняется слева направо, то есть порядок расчёта будет следующий:
    echo (print_r ($a) ? (($a == 5) ? 'a == 5' : 'a == true, a != 5') : ($b == 10)) ? 'a == false, b == 10' : 'a == false, b != 10';

    Для изменения порядка используйте скобки:
    echo print_r ($a) ? (($a == 5) ? 'a == 5' : 'a == true, a != 5') : (($b == 10) ? 'a == false, b == 10' : 'a == false, b != 10');
    Ответ написан
    3 комментария
  • Как отсортировать массив по цене и убрать одинаковые элементы?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    $temp = array();
    foreach ($rr_wordz as $row) {
        if (!isset($temp[$row['word']]) || $temp[$row['word']] < $row['max_bid'])
            $temp[$row['word']] = $row['max_bid'];
    }
    $result = array();
    foreach ($temp as $key => $val)
        $result[] = array('word' => $key, 'max_bid' => $val);
    Ответ написан
    Комментировать
  • Как реализовать фасетную фильтрацию?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Просто составляете запрос из всех указанных пользователем параметров, не забывая их тщательно контролировать.
    SELECT * FROM `stock` 
        WHERE `manufacturer` = {$manufacturer }
          AND `size` BETWEEN {$minSize} AND {$maxSize}
          AND `color` = {$color}
    Ответ написан
  • Возможно ли оптимизировать регулярное выражение?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    '/(?:\+?\d)?(?:\s?\(?\d{3,5}\)?\s?)?\d{1,3}-?\d{2}-?\d{2}/'
    Ответ написан
    Комментировать
  • Как написать регулярное выражение для проверки следующих примеров?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Ваша регулярка сейчас - строго одна цифра с начала строки, затем обязательная запятая и обязательно одна или две цифры. Если смотреть по условию, то будет
    /^\d+(?:[.,]\d{2})?$/
    Ответ написан
    Комментировать
  • Как максимально просто распарсить время в unix_timestamp выходящее за рамки 24 часов на PHP?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    $time = '123h 5 m 07s';
    if (preg_match('~(\d+)\s*h~', $time, $match)
        $hours = $match[1];
    if (preg_match('~(\d+)\s*m~', $time, $match)
        $minutes = $match[1];
    if (preg_match('~(\d+)\s*s~', $time, $match)
        $seconds = $match[1];

    Только для unix_timestamp ещё дата нужна и часовой пояс, это количество секунд с 1970-01-01 00:00:00 UTC.
    Ответ написан
    1 комментарий
  • Генерация всех возможных вариантов написания

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Стандартная комбинаторная задача на перестановки, решается как рекурсивными, так и нерекурсивными алгоритмами, посмотреть можно, например, здесь
    Вот реализация одного из алгоритмов на php:
    $arr = array('word1', 'word2', 'word3');
    
    $n = count($arr);
    for ($i = 1; $i <= $n; $i++) {
        $pos[$i] = $i-1;
        $c[$i] = 1;
        $pr[$i] = 1;
    }
    $c[$n] = 0;
    
    foreach($pos as $p)
        echo $arr[$p],' ';
    echo "<br>";
    
    $i = 1;
    while ($i < $n) {
        $i = 1;
        $x = 0;
        while ($c[$i] == $n-$i+1) {
            $pr[$i] = 1-$pr[$i];
            $c[$i] = 1;
            $x += $pr[$i];
            $i++;
        }
        if ($i < $n) {
            $k = $pr[$i] ? $c[$i]+$x : $n-$i+1-$c[$i]+$x;
            $t = $pos[$k];
            $pos[$k] = $pos[$k+1];
            $pos[$k+1] = $t;
            foreach($pos as $p)
                echo $arr[$p],' ';
            echo "<br>";
            $c[$i]++;
        }
    }

    Результат:
    word1 word2 word3
    word2 word1 word3
    word2 word3 word1
    word3 word2 word1
    word3 word1 word2
    word1 word3 word2
    Ответ написан
    Комментировать
  • Какой принцип работы mysql_fetch_array() в PHP?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Потому что эта функция и предназначена для перебора записей, возвращённых сервером по запросу. В небуферизированном режиме (mysql_unbuffered_query) она просто получает от сервера следующую строку ответа.
    Переходите на mysqli, mysql уже в статусе depricated. Плюс в mysqli есть то, о чём Вы спрашиваете - функция mysqli_result::fetch_all.
    Ответ написан
    Комментировать
  • Что за ошибка при запуске Apache на Windows 8.1?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    И всё таки у Вас где-то выше непарные кавычки. Ошибка говорит о том, что "off" рассматривается не как <открывающие кавычки> off <закрывающие кавычки>, а как <закрывающие кавычки> bool(false) <открывающие кавычки>.
    Ответ написан
  • Как определить количество страниц в документе с помощью PHP?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Ни DOC, ни DOCX, ни ODT не гарантируют, что на разных компьютерах или в разных программах или даже в разных версиях одной программы документ будет отображаться одинаково. Соответственно количество страниц в них точно определить нельзя. PDF же изначально был сделан для одинакового отображения документа везде, в нём количество страниц фиксировано. Варианты подсчёта есть здесь.
    Ответ написан
    Комментировать
  • Вопрос касаемо базы стран, регионов и городов

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    База кривовата.
    SELECT * FROM geodata._cities WHERE `country_id` = 1 AND `region_id` IS NULL;
    Получаем 230 строк с кучей ненужных вариантов.
    SELECT * FROM geodata._cities WHERE `country_id` = 1 AND `region_ru` IS NULL;
    Получаем 39 строк с кучей ненужных вариантов.
    SELECT * FROM geodata._cities WHERE `country_id` = 1 AND `region_ru` IS NULL AND  `region_id` IS NULL;
    Получаем
    +-------------------------------+---------+------------------------------+
    | title_ru                      | area_ru | title_ru                     |
    +-------------------------------+---------+------------------------------+
    | Москва                        | NULL    | Москва                       |
    | Девяткино, Ленинградская обл. | NULL    | Девяткино,Ленинградская обл. |
    | Санкт-Петербург               | NULL    | Санкт-Петербург              |
    +-------------------------------+---------+------------------------------+
    Ответ написан
  • Сравнение контрольных сумм файлов

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    А просто команда diff Вас чем не устраивает?
    Ответ написан
    Комментировать
  • Есть ли способ быстрого создания php кода, который выводит всю MYSQL таблицу?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Если хочется написать самому, то "SHOW CREATE TABLE `table_name`" и разбирайте поля.
    Ответ написан
    Комментировать
  • Почему mysqli select возвращает пустые поля в массив?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Всё верно, для типа int var_dump в скобках указывает значение
    $i = 1;
    var_dump($i);
    $j = 45;
    var_dump($j);
    Получаем
    int(1) int(45)
    Ответ написан
    Комментировать
  • Как лучше генерировать и выводить контент страницы?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Варианты 1 и 2 на мой взгляд равнозначны, хотя в редакторах с подсветкой синтаксиса вариант 1 будет выглядеть лучше. На мой взгляд код на php - программа, а не html с активными вставками, да и выглядит куча вставок <?= ?> не очень красиво. Поэтому я предпочитаю вариант 2, только записывая немного по другому.
    <?php
    echo '<table><tr><td>ид</td><td>имя</td></tr>';
    foreach($data as $user)
       echo "<tr><td>{$user['id']}</td><td>{$user['name'] }</td></tr>";
    echo '</table>';
    ?>

    Вариант 3 стоит использовать если заранее сложно определить, надо ли выводить блок, например
    <?php
    $content = '';
    foreach($data as $user)
        if ($user[name] == 'Вася')
            $content .= "<tr><td>{$user['id']}</td><td>{$user['name']}</td></tr>";
    if ($content !== '')
        echo "<table><tr><td>ид</td><td>имя</td></tr>{$content}</table>";
    ?>
    Ответ написан
    Комментировать