Задать вопрос
Ответы пользователя по тегу PHP
  • Почему запрос sql с Like выводит пустую строку?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    В MySQL нет функции FIRST(). Вместо этого можно использовать
    SELECT * FROM `streets` WHERE name like '%$b%' LIMIT 1

    И уходите от использования mysql_ в php. используйте mysqli или PDO.
    Ответ написан
  • Какой выбрать метод шифрования строки на следующем примере?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Base64, каждая строка имеет длину 27 символов, 27*6/8 = 20 байт = 160 бит бинарного значения, возможно SHA-1. Поскольку напрямую sha1('0') не совпадает с decode_base64('DFXbU4Z/oPur4IuKhk1fUl4910M='), то наверняка использовалась соль.
    Ответ написан
    Комментировать
  • MySQL возвращает один и тот же товар

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    У Вас один товар с `catalog`.`id`=97 имеет в описании дважды атрибут "Производитель" (`attributes`.`id`=4426 и `attributes`.`id`=394) и дважды атрибут "Графический процессор" (`attributes`.`id`=395 и `attributes`.`id`=4427). Таким образом, произведение множеств даёт четыре варианта:
    (97, 4426, 395)
    (97, 394, 395)
    (97, 4426, 4427)
    (97, 394, 4427)

    Лучше всего удалить лишние атрибуты, но можно сделать и GROUP BY `c`.`id`, только серверу добавится работы.
    Ответ написан
    2 комментария
  • Как реализовать очередь исходящих звонков через Asterisk

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Писать номера в базу данных и периодически дёргать астериск на вызов внутреннего номера через originate-файл или AMI. В диалплане на этот номер повесить получение номера из базы, проверку наличия свободного канала на выход, вызов номера и вычёркивание его из базы в случае успеха.
    Ответ написан
    Комментировать
  • Как реализовать подтверждение удаления категории меню?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Всё очень просто. Обработчик $('.sidebar').on у Вас завершается сразу после отправки запроса в $.get. Callback-функция внутри $.get вызывается асинхронно после получения ответа и её результат нигде не используется.
    Вам надо либо в основном обработчике всегда возвращать false и добавить необходимые действия непосредственно в callback, либо использовать вызов .ajax с async: false (что крайне не рекомендуется).
    Ответ написан
    7 комментариев
  • Какую логику взаимодействия клиент-сервер использовать?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Передаёте серверу идентификатор или таймстамп последней полученной новости, он возвращает все новости, появившиеся после неё.
    Ответ написан
    Комментировать
  • Как провести анализ бинарных данных?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Ответ написан
    Комментировать
  • 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.
    Ответ написан
    Комментировать