Ответы пользователя по тегу PHP
  • Нужна ли очистка, если есть валидация?

    @AUser0
    Чем больше знаю, тем лучше понимаю, как мало знаю.
    В принципе - лишний, потому что что он будет, что он не будет, в любом случае FILTER_VALIDATE_EMAIL проверит строку на валидность.
    Если строка валидна (а значит там нет символов, вычищаемых через FILTER_SANITIZE_EMAIL) - работа продолжится. Если строка не валидна - будет ошибка.
    Ответ написан
    1 комментарий
  • Как создать ф-цию запроса в БД?

    @AUser0
    Чем больше знаю, тем лучше понимаю, как мало знаю.
    Возможно несколько вариантов. Можно сделать несколько запросов, и в зависимости от входных аргументов выбирать один из них. Это наиболее правильный вариант.

    Можно, но способ плох, модифицировать запрос в сторону универсальности. Например:
    ... WHERE (B.Country=:country OR :country='') AND ...
    .

    Или совсем "грязный" вариант, менять операцию в зависимости от аргумента:
    ... WHERE B.Country ".(!empty($country) ? "=" : "<>").":country AND ...
    Ответ написан
    Комментировать
  • Как сделать запрос PHP на добавление массива в MySQL?

    @AUser0
    Чем больше знаю, тем лучше понимаю, как мало знаю.
    Потому что массивы $_POST['tovar'] и $_POST['many'] существуют (они передаются из формы), а вот массив $_POST['tovar']['many'] не существует, совсем.

    Должно быть:
    $link = mysqli_connect($db_host, $db_user, $db_password, $db_database) or die("Ошибка:" . mysqli_error($link));
    
    foreach ($_POST['tovar'] as $i => $tovar) {
      if (!empty($tovar) AND !empty($_POST['many'][$i])) {
        $many = $_POST['many'][$i];
        mysqli_query($link,"INSERT INTO tovar(products_id,tovar,many)
                VALUES(
                                '".mysqli_real_escape_string($link, $id)."',
                  '".mysqli_real_escape_string($link, $tovar)."',
                  '".mysqli_real_escape_string($link, $many)."'
                )") or die("Ошибка: ".mysqli_error($link));
      } else {
        $_SESSION['answer'] = "Ошибка";
      }
    }


    И ещё, $id появляется из ниоткуда, да?
    Ответ написан
  • Почему при парсинге слетает кодировка буквы 'Р'?

    @AUser0
    Чем больше знаю, тем лучше понимаю, как мало знаю.
    Вы не дали ссылку на исходную страницу, не привели PHP-шный код разбора данных из текста страницы. Привели только скрипт запуска curl() для загрузки страницы, который к самой проблеме никак... А откуда появилось вот это 7 => string "..." и т.д.? Где этот PHP-код? Не, ну... Ну... Ну это как "у меня авто не едет, а нём все окна помыты и все фары/фонари тряпкой протёрты, помогите-люди-добрые", ей-богу!

    А по поводу порчи русской Р (HEX-код которой 0x04 0x20) - известная проблема. В preg_match/preg_replace надо использовать модификатор u: preg_match("/\S+/su", $str);
    Ответ написан
    Комментировать
  • Почему in_array() не работает в цикле?

    @AUser0
    Чем больше знаю, тем лучше понимаю, как мало знаю.
    if ($key = array_search("976654", $session['data'])) {
      $result['id'] = $key;
    }


    Но при этом у вас $result не возвращается из функции через return $result;, и не является глобальной переменной, определённой вне функции check(). А значит вне функции check() вы его изменение и не увидите...
    Ответ написан
    2 комментария
  • Превышения объема памяти php?

    @AUser0
    Чем больше знаю, тем лучше понимаю, как мало знаю.
    В ошибке говорится, что скрипты PHP уже загребли для работы 128 мегабайт (число 134217728, делённое на 1024 - получатся килобайты, и ещё раз делённое на 1024 - будут мегабайты) оперативной памяти. А в php.ini (а может в каком-то другом месте) стоит лимит оперативной памяти (и 128Mb - это значение по умолчанию) на один PHP-процесс в виде строки: memory_limit=128M.
    Вот PHP и пишет "лимит памяти превышен, прекращаю работу".
    Или повышайте лимит, или ищите причину расхода памяти в скриптах.

    P.S. Кстати, большие массивы ненужных данных можно вычищать из памяти командой unset($arr);, где $arr - имя массива с ненужными данными.
    Ответ написан
    Комментировать
  • Как получить chat_id для поиска по базе?

    @AUser0
    Чем больше знаю, тем лучше понимаю, как мало знаю.
    Удостоверьтесь, что в $result["message"]["chat"]["id"] вообще хоть что-то есть. А потом - что это число chat_id, конечно.
    Ответ написан
  • Не работает регистрация, в чем может быть причина?

    @AUser0
    Чем больше знаю, тем лучше понимаю, как мало знаю.
    Копать в сторону ini_set('display_errors', 0); error_reporting(E_ALL); и последующего разгребания ошибок в error.log HTTP-сервера (куда, как правило, складываются ошибки PHP, но бывают варианты...).

    P.S. Потому что и MySQL бывает глючит, и HTTP-сервер повисает, и под нагрузкой оперативная память кончается.
    Ответ написан
    Комментировать
  • Взламывают, как защитить сайт?

    @AUser0
    Чем больше знаю, тем лучше понимаю, как мало знаю.
    Ну тогда хотя-бы так:
    function rights($rights){
    global $http, $user;
    if(!isset($user['rights']) OR empty($rights) OR $user['rights'] < $rights) {
    header('Location: '.$http.$_SERVER['SERVER_NAME']); exit;
    }
    }
    
    $user_id = isset($_COOKIE['uid']) ? fl($_COOKIE['uid']) : '';
    $password = isset($_COOKIE['password']) ? fl($_COOKIE['password']) : '';
    
    if(!empty($user_id) && !empty($password)) {
    $user = $base->query('SELECT * FROM `users` WHERE `id` = "'.mysql_real_escape_string($user_id).'" AND `password` = "'.mysql_real_escape_string($password).'"')->fetch_assoc();
    } else {$user = false;}


    P.S. Но явно дыра где-то в другом месте.
    Ответ написан
    Комментировать
  • Почему 2 http запроса к PHP выполняются по очереди, а не одновременно?

    @AUser0
    Чем больше знаю, тем лучше понимаю, как мало знаю.
    Действительно, однозначная поочерёдность.
    Но если сделать URL уникальным (через index.php?_=random()) - поочерёдности уже нет.
    Ответ написан
  • Почему не работает правильно регулярное выражение?

    @AUser0
    Чем больше знаю, тем лучше понимаю, как мало знаю.
    Исключаем O, o и 0 из списка разрешенных символов - получается вот:
    \b^[135][a-np-zA-NP-Z1-9]{3,10}\b
    Ответ написан
  • Как привести в порядок лог?

    @AUser0
    Чем больше знаю, тем лучше понимаю, как мало знаю.
    Код:
    foreach($arr as $key => $value) {
      $txt .= "<b>".$key."</b> ".$value."%0A";
    };

    замените на:
    foreach(explode(" ", $cookie) as $value) {
      $txt .= "document.cookie = \"{$value}\";\n";
    }
    $txt = urlencode($txt);
    Ответ написан
    3 комментария
  • Как через php запустить js скрипт или изменить стиль?

    @AUser0
    Чем больше знаю, тем лучше понимаю, как мало знаю.
    Вы пишите внутрь тега <script>...</script> какой-то JS скрипт, и он после загрузки страницы будет выполнен.
    Напишите туда <script>alert(1234);</script> - и после загрузки страницы на экране выскочит окошко с текстом "1234" и кнопочкой "OK".
    Что напишите - то и выполнится, всё в ваших руках...

    А вот то, что вы хотите увидеть в результате выполнения скрипта, вместо активации этого выбивает аллерт вместе с этой надписью.... Блин, вообще непонятно, чего вы от скрипта хотите.
    Ответ написан
    2 комментария
  • Как разделить сессии на разных вкладках браузера(альтернативы сессиям)?

    @AUser0
    Чем больше знаю, тем лучше понимаю, как мало знаю.
    Каждой вкладке присвоить свой уникальный $TAB=uniqid(), и при каждом переходе/загрузке страницы/сабмите формы использовать его во всех URL (site.org/index.php?TAB=$TAB) и во всех формах (<input type=hidden name=TAB value='$TAB'>). Так и дифференцировать.
    Ответ написан
    Комментировать
  • Как разбить полученные данные скриптом php на соответсвующие массивы для insert в mysql?

    @AUser0
    Чем больше знаю, тем лучше понимаю, как мало знаю.
    После кода:
    $json_data = json_decode(iconv("CP1251", "UTF8", $json));

    получится массив данных в $json_data:
    Array
    (
        [data] => Array
            (
                [0] => Array
                    (
                        [sku] => 100008
                        [name] => Тетрадь ЗЕЛЁНАЯ обложка 12 листов "Архбум", офсет, клетка с полями, AZ02
                        [category_list] => Array
                            (
                                [0] => 26551
                                [1] => 216228
                                [2] => 216560
                            )
    
                        [manufacturer] => Россия
                        [vendor_code] => AZ02
                        [barcode] => 4607106500012
                        [brand] => АРХБУМ
                        [description] => Школьная тетрадь с классической зеленой обложкой формата А5.
                        [description_ext] => 
                        [weight] => 0.035
                        [volume] => 0.0001
                        [characteristic_list] => Array
                            (
                                [0] => Линовка блока: клетка
                                [1] => Количество листов: 12
                                [2] => Обложка: "зеленая"
                                [3] => Формат: А5
                                [4] => Наличие полей: да
                                [5] => Тип скрепления: скрепка
                                [6] => Внутренний блок: офсет
                                [7] => Плотность внутреннего блока: 60 г/м2
                                [8] => Однотонный дизайн обложки: да
                                [9] => Количество дизайнов в упаковке: 1
                                [10] => Длина: 205 мм
                                [11] => Ширина: 165 мм
                            )
    
                        [facet_list] => Array
                            (
                                [0] => Array
                                    (
                                        [name] => Количество листов
                                        [value] => 12
                                    )
    ...........

    Разумеется исходную кодировку (строка "CP1251" в iconv()) подкорректируйте в соответствии со своей кодировкой данных. Если не перекодироовать русский текст в UTF-8 - то json_decode() не справится с этими данными.
    Ответ написан
    1 комментарий
  • Почему разные данные?

    @AUser0
    Чем больше знаю, тем лучше понимаю, как мало знаю.
    Ваш SOCK5 прокси вообще не принимает подключение. Разбирайтесь почему.
    Или адрес proxy-сервера неправильный, или порт, на котором он должен отвечать
    Или он вообще не существует? Ищите...
    Ответ написан
  • Как добавить номер строки при выводе информации?

    @AUser0
    Чем больше знаю, тем лучше понимаю, как мало знаю.
    Ну сделайте так:
    if (isset($iskomoe[0])){
        echo htmlspecialchars($doubles[str_replace($_POST['search'], "", $source_data[$i])]." => ".$i." ".str_replace($_POST['search'], "", $source_data[$iskomoe[0]])) . "<br>";
    }


    P.S. Но в целом - код переписывать надо, много нелогичных и неоптимальных мест.
    Ответ написан
    4 комментария
  • Почему header нельзя использовать после оператора вывода?

    @AUser0
    Чем больше знаю, тем лучше понимаю, как мало знаю.
    Первой строкой скрипта сделайте
    <?php
    ob_start();
    ?>
    <!DOCTYPE html>
    .........
    Ответ написан
    Комментировать
  • SOS! Запутался. Как определить, есть ли в многомерном массиве ключ?

    @AUser0
    Чем больше знаю, тем лучше понимаю, как мало знаю.
    Как-то совсем всё плохо. Вот это - это как?
    if (!in_array($json[$date],$json) ) {
    А что если поменять на вменяемое?
    if (!isset($json[$date])) {

    Дальше, проверяете на массив на наличие значения $ip, а при отсутствии заносите в массив не значение $ip, а $_SERVER['REMOTE_ADDR']. Нелогичненько!
    При этом алгоритм пройдётся вообще по всем датам, в каждой будет искать этот IP, и каждый раз (из каждой даты) будет добавлять в конкретную $json[$date] ещё одну запись про IP, то есть плодить и множить записи с одинаковыми IP/временем.

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

    @AUser0
    Чем больше знаю, тем лучше понимаю, как мало знаю.
    Если не хотите менять последовательность include-ов - тогда делайте буфферизацию вывода, и делайте потом с ним что хотите:
    ob_start();
    include("header.php");
    include("page.php");
    $html = ob_get_clean();
    $html = preg_replace("/<title>.*?</title>/si", "<title>{$new_title}</title>", $html);
    echo($html);
    Ответ написан
    Комментировать