Задать вопрос
Ответы пользователя по тегу PHP
  • Для переменной надо bindParam или bindValue?

    nokimaro
    @nokimaro
    Меня невозможно остановить, если я смогу начать.
    Ключевая разница в том что переменная привязывается по ссылке, и второй абзац намекающий на то что результаты запроса могут изменить значение и даже тип переменной.
    В общем если вы не понимаете зачем оно нужно и какие риски, то надёжнее использовать bindValue().

    PDOStatement::bindParam
    Связывает переменную PHP с именованным или неименованным параметром подготавливаемого SQL-запроса. В отличие от PDOStatement::bindValue(), переменная привязывается по ссылке и ее значение будет вычисляться во время вызова PDOStatement::execute().

    В большинстве случаев в подготавливаемых запросах используются только входные параметры, то есть при построении запроса доступ к ним осуществляется только в режиме чтения. Тем не менее, некоторые драйверы позволяют запускать хранимые процедуры, которые, в свою очередь, могут возвращать данные посредством выходных параметров. Зачастую, такие параметры используются одновременно как входные и как выходные.
    Ответ написан
  • Как получить message_id vk api?

    nokimaro
    @nokimaro
    Меня невозможно остановить, если я смогу начать.
    Если это сообщение от бота, то никак.
    Обсуждалось тут Как переслать сообщение в беседу? (см. комменты к первому ответу)
    и тут https://github.com/negezor/vk-io/issues/127

    если у вас message.id = 0 то никак это сообщение вы дальше использовать не сможете (переслать и тд по id)
    Ответ написан
    Комментировать
  • Почему не работет запись в файл?

    nokimaro
    @nokimaro
    Меня невозможно остановить, если я смогу начать.
    вместо $this->$file надо $this->file
    $this->file
    $this->file_DZ
    Ответ написан
    Комментировать
  • Как спарсить данные со страницы?

    nokimaro
    @nokimaro
    Меня невозможно остановить, если я смогу начать.
    Используйте Developer Tools браузера (Ctrl+Shift+i)
    Там при загрузке странице на вкладке network найдёте все нужные запросы для получения данных
    Повторяете их на curl и получите данные в json которые дальше можно распарсить и использовать.

    dka733lgquxwb9alralnd9xyhqk.png
    Ответ написан
    Комментировать
  • Можно ли через форму сайта отправить файл в телеграм?

    nokimaro
    @nokimaro
    Меня невозможно остановить, если я смогу начать.
    Да, можно. Используйте метод sendDocument из bot api. Всё аналогично тому как вы используете сейчас sendMessage.

    https://core.telegram.org/bots/api#senddocument
    https://core.telegram.org/bots/api#inputfile
    https://core.telegram.org/bots/api#sending-files

    Лимит на загрузку файлов через bot-api - 50Мб

    Если нужно отправлять файлы больше 50Мб, то используйте MTProto (оффиц. протокол) и тогда лимит на аплоад будет 1.5Гб
    биндинг MTProto на PHP https://github.com/danog/MadelineProto
    https://docs.madelineproto.xyz/docs/FILES.html#upl...

    Если в принципе нет понимания как изначально принять отправленный через форму файл, чтобы потом заслать его в телеграм то почитайте про $_FILES
    https://www.w3schools.com/php/php_file_upload.asp
    Ответ написан
    3 комментария
  • PHP: после json_encode, в js летят "?

    nokimaro
    @nokimaro
    Меня невозможно остановить, если я смогу начать.
    2 комментария
  • Что не так с регуляркой?

    nokimaro
    @nokimaro
    Меня невозможно остановить, если я смогу начать.
    С регуляркой всё в порядке
    Получаю ожидаемый результат

    https://3v4l.org/govdO
    Ответ написан
    3 комментария
  • Каким образом я могу сделать систему предустановки конфигурации сайта?

    nokimaro
    @nokimaro
    Меня невозможно остановить, если я смогу начать.
    Ну так как исходный код многих CMS открыт, можете его и изучать в качестве наглядного пособия.
    Например инсталятор wordpress https://github.com/WordPress/WordPress/blob/master...
    Ответ написан
    2 комментария
  • Отправление при помощи curl post запроса с данными в xml?

    nokimaro
    @nokimaro
    Меня невозможно остановить, если я смогу начать.
    Проблема в том что из формы вы посылаете данные как Request=XXXXXXXXX потому что textarea name="Request", а в curl отправляете данные в виде raw post data.

    Правильный вариант отправки, схожий с тем как данные отправляли из формы ниже
    Content-Type: text/xml за который прицепился FanatPHP роли не играет, и его можно не отправлять.

    function sendXmlOverPost($url, $xml) {
      $ch = curl_init();
      curl_setopt($ch, CURLOPT_URL, $url);
      curl_setopt($ch, CURLOPT_POST, true);
      curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
      curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query(['Request' => $xml]));
    
      $result = curl_exec($ch);
      curl_close($ch);
      return $result;
    }
    print_r(sendXmlOverPost($url, $xml));
    Ответ написан
    1 комментарий
  • Как декодировать base64 (SHA1+RSA)?

    nokimaro
    @nokimaro
    Меня невозможно остановить, если я смогу начать.
    Для того чтобы раскодировать RSA вам нужно знать ключ которым данные шифровались
    Если ключей нет, то ничего не раскодировать не удастся.
    Для работы с RSA можно использовать
    libsodium - https://www.php.net/manual/ru/book.sodium.php
    EasyRSA - https://github.com/paragonie/EasyRSA

    Так же следует понимать, что SHA-1 это алгоритм криптографического хеширования, и результат работы хеш-функции необратим. То есть если там действительно используется SHA-1, то максимум что вы получите это 160 битный хеш, но никак не оригинальные данные.
    Ответ написан
    7 комментариев
  • Как настроить временную зону в Crontab + Php?

    nokimaro
    @nokimaro
    Меня невозможно остановить, если я смогу начать.
    При запуске кроном скрипт запускается через CLI и значит изменения в Apache2/php.ini не будут использоваться.
    Обычно есть отдельно файл cli/php.ini, в нём и выставляйте зону.

    Так же зону можно глобально выставить в самом скрипте
    date_default_timezone_set('Europe/Moscow');

    И конечно же соглашусь с ответом выше - лучше использовать timestamp - time() или DateTime::getTimestamp() чтобы не зависеть от локальных настроек.
    Ответ написан
    Комментировать
  • Как поймать SSL ошибку при не удачной попытке соединения/хнедшейка stream_socket_client?

    nokimaro
    @nokimaro
    Меня невозможно остановить, если я смогу начать.
    Можно использовать свой error_handler чтобы перехватывать warning'и в том месте где может возникнуть ошибка
    https://www.php.net/manual/ru/function.set-error-h...
    А потом восстанавливать стандартный error_handler если нужно
    https://www.php.net/manual/ru/function.restore-err...

    set_error_handler(function($errno, $errstr, $errfile, $errline){
        //своя логика обработки $errno, $errstr 
    });
    
    //$stream = stream_socket_client( ...
    
    restore_error_handler();
    Ответ написан
    2 комментария
  • Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at W:\domains:1) in W:\domains ???

    nokimaro
    @nokimaro
    Меня невозможно остановить, если я смогу начать.
    Думаю проблема в том что в одном файле смешаны html и php код.
    Конкретно речь про pick.php где идёт что-то типа

    <!doctype html>
    <html>
    ...
    и дальше в этом же файле PHP код с session_start()
    <?
    require_once('config.php'); // <- session_start();
    // echo и тд
    ?>
    </html>


    Если это так, то ошибка вполне логична и понятна, так как в случае такой мешанины сразу отправляется html-документ и соответствующий header(), а потом только вы пытаетесь стартовать сессию и получаете закономерную ошибку.
    Ответ написан
  • Как отсортировать многомерный массив в php?

    nokimaro
    @nokimaro
    Меня невозможно остановить, если я смогу начать.
    $array = AscOrderArray($array, 'title');
    
    function DescOrderArray($array, $field)
    {
        usort($array, function ($b, $a) use ($field) {
            return strnatcmp($a[$field], $b[$field]);
        });
    
        return $array;
    }
    
    function AscOrderArray($array, $field)
    {
        usort($array, function ($a, $b) use ($field) {
            return strnatcmp($a[$field], $b[$field]);
        });
    
        return $array;
    }


    https://3v4l.org/VOpiA
    Ответ написан
  • Почему введёные данные о заказе не отправляются в таблицу Mysql?

    nokimaro
    @nokimaro
    Меня невозможно остановить, если я смогу начать.
    Проблема в том что нужно данные взять из $_POST
    Например так
    $name = isset($_POST['name']) ? $_POST['name'] : '';


    Удачи вам в изучении программирования
    Для работы с БД настоятельно рекомендую ознакомиться и сразу использовать хотя бы это mysqli + prepared statements
    https://www.php.net/manual/ru/mysqli.quickstart.pr...
    https://www.php.net/manual/ru/pdo.prepared-stateme...
    https://www.w3schools.com/php/php_mysql_prepared_s...

    <h2 align="center">Оформление заказа</h2>
    
    <?
    if($_SESSION['cart'] && !isset($_POST['order']))
    {
    
        ?>
        <form action="index.php?view=order" method="post" id="cart-form">
    
            <table id="mycart" align="center" cellspacing="0" cellpadding="0" border="0">
                <tr>
                    <th>Товар</th>
                    <th>Цена</th>
                    <th>Кол-во</th>
                    <th>Всего</th>
                </tr>
    
                <? foreach($_SESSION['cart'] as $id => $quantity):
                    $product = get_product($id);
    
                    ?>
    
                    <tr>
                        <td align="center"><?= $product['title']; ?></td>
                        <td align="center">$<?= number_format($product['price'], 2); ?></td>
                        <td align="center"><?= $quantity; ?></td>
                        <td align="center">$<?= number_format($product['price'] * $quantity, 2); ?></td>
                    </tr>
                <?endforeach; ?>
    
            </table>
            <p class="total" align="center">Общая сумма заказа:
                <span class="product-price"><?= number_format($_SESSION['total_price'], 2); ?> $</span></p>
    
            <p align="center" style="color: #fff;">
                Ваше имя: <br/>
                <input type="text" name="name"/><br/>
                Ваша фамилия: <br/>
                <input type="text" name="s_name"/><br/>
                Ваш адрес: <br/>
                <input type="text" name="address"/><br/>
                Почтовый индекс: <br/>
                <input type="text" name="post_index"/><br/>
                Ваше e-mail: <br/>
                <input type="text" name="email"/><br/>
            </p>
    
    
            <p align="center"><input type="submit" name="order" value="Заказать"/></p>
    
        </form>
    
        <?
    }
    if($_SESSION['cart'] && isset($_POST['order']))
    {
        foreach($_POST as $ArrKey => $ArrStr)
        {
            $ArrKey = $_POST[$ArrKey];
        }
        $date = date('Y-m-d');
        $time = date('H:i:s');
        
        $name = isset($_POST['name']) ? $_POST['name'] : '';
        $s_name = isset($_POST['s_name']) ? $_POST['s_name'] : '';
        $address = isset($_POST['address']) ? $_POST['address'] : '';    
        $post_index = isset($_POST['post_index']) ? $_POST['post_index'] : '';    
        $email = isset($_POST['email']) ? $_POST['email'] : '';
    
        foreach($_SESSION['cart'] as $id => $quantity)
        {
            $product = get_product($id);
            $query = mysql_query("
                INSERT INTO orders(name,s_name,address,post_index,email,date,time,product,prod_id,price,qty) 
                VALUES 
                ('$name','$s_name','$address','$post_index','$email','$date','$time','{$product['title']}','{$product['id']}','{$product['price']}','$quantity')
            ");
        }
    
        echo "<p align='center' style='color: #fff;'>Ваш заказ успешно принят! Спасибо за покупку!</p>";
    }
    ?>
    Ответ написан
    8 комментариев
  • Почему сообщение из формы приходит без вложения?

    nokimaro
    @nokimaro
    Меня невозможно остановить, если я смогу начать.
    enctype="multipart/form-data" не забыли для form ?
    input с выбором файла имеет name="fileFF" ?
    <form enctype="multipart/form-data" action="..." method="post">
        <input type="file" name="fileFF"/>
    Ответ написан
  • Как создать временный файл для скачивания php?

    nokimaro
    @nokimaro
    Меня невозможно остановить, если я смогу начать.
    Возможно проще будет генерировать файл с логом "на лету" прямо из скрипта и сразу отдавать на скачивание
    Так вы получите больше контроля в плане безопасности, так как можно проверить предварительно авторизацию и тд и не надо париться с хранением, удалением кучи файлов

    <?php
    header("Content-type: text/plain");
    header("Content-Disposition: attachment; filename=history.txt");
    
    //делаем запрос к БД на получение данных
    //выводим нужные данные через echo


    Если всё же хотите создавать файлы и писать в них данные то используйте file_put_contents() куда передаёте данные и имя файла для сохранения
    https://www.php.net/manual/ru/function.file-put-co...
    Ответ написан
    1 комментарий
  • Как сделать что бы самоудаляющая ссылка жила по времени?

    nokimaro
    @nokimaro
    Меня невозможно остановить, если я смогу начать.
    Так как стоит тег MySQL предполагаю что ссылки хранятся в базе?
    Значит для каждой ссылки нужно сделать колонку со временем создания ссылки и временем первого клика (захода) по ней.
    Время создания ссылки можно использовать если надо в принципе ограничить ссылку по времени, независимо от того посещали её или нет.
    Время захода по умолчанию null. При открытии ссылки смотрим это значение, при первом заходе заполняем текущую дату, при повторных кликах сравниваем дату и текущее время.
    Если прошло больше определённого времени считаем что ссылка удалена.
    Так же можно фактически удалять из базы ссылки с истёкшей датой, при этом ссылки где дата посещения null считаем не посещёнными и не удаляем. Это уже зависит от ваших требований.
    Ответ написан
    Комментировать
  • Какой вариант из двух выбрать: передаче по ссылке, или без?

    nokimaro
    @nokimaro
    Меня невозможно остановить, если я смогу начать.
    Если вопрос по ссылке или без - то однозначно ответ лучше передавать не по ссылке, так как меньше шансов выстрелить себе в ногу.
    Но как написали выше, тут напрашивается рефакторинг, так как почему функция с названием checkPermissions() производит модификацию данных?
    То есть это скорее getAvailablePermissions() или filterResponsePermissions() или типа того.

    upd. Единственное что даст передача по ссылке, это экономия памяти, так как при передаче по ссылке не будут создаваться копии $permissions и $responses, но если у вас эти массивы не на сотни тысяч элементов, то экономить нечего.
    Ответ написан
    Комментировать
  • Как спарсить заголовки excel через php?

    nokimaro
    @nokimaro
    Меня невозможно остановить, если я смогу начать.
    Универсального решения в данном случае нету. Так как всё чем вы оперируете это ячейки, строки, столбцы.
    Тут только применять логику из разряда, а как человек определяет где начинаются заголовки и данные?
    Например что это N-подряд ячеек в строке жирным шрифтом без объединения за которым следует поток данных в таком же формате и тд.
    И на основании этого уже пишем алгоритм на РНР.
    Ответ написан
    Комментировать