Профиль пользователя заблокирован сроком с 10 апреля 2022 г. и навсегда по причине: систематические нарушения правил сервиса
  • Как реализовать автоподгрузку полей из mysql?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Проще всего сразу выбирать и ФИО и почту, без всяких подгрузок

    Добавлю, что если и делать подгрузку, то тогда живой поиск по фамилии, и не загружать заранее вообще ничего.
    Ответ написан
  • Скажите пожалуйста, где здесь ошибка?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Здесь неверно практически всё.
    В первую очередь начичие примерно миллиона совершенно одинаковых функций и вообще повторений.

    Я, кстати, не в первый раз встречаю такой винегрет. Его готовят в каком-то видео на ютубе?

    Вот как должно быть на самом деле:
    class Database {
        public $db;
    
        public function __construct ($dbname, $user = "root", $password = "", $host = "localhost", $type = "mysql", $charset = "utf8", $options = array())
        {
             $default_options = [
                PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
                PDO::ATTR_EMULATE_PREPARES => false,
                PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
            ];
            $options = array_replace($default_options, $options);
            try {
                 $this->db = new PDO("{$type}:host={$host};dbname={$dbname};charset={$charset};", $user, $password, $options);
            } catch (PDOException $e) {
                throw new \PDOException($e->getMessage(), (int)$e->getCode());
            }
        }
    
        public function disconnect () {
            $this->db = NULL;
        }
    
        public function query ($query, $params = array()) {
            $stmt = $this->db->prepare($query);
            $stmt->execute($params);
            return $stmt;
        }
    
        public function getRow ($query, $params = array(), $fetchMode = PDO::PDO_FETCH_ASSOC) {
            return $this->query->fetch($fetchMode);
        }
        public function getRows ($query, $params = array(), $fetchMode = PDO::PDO_FETCH_ASSOC) {
            return $this->query->fetchAll($fetchMode);
        }
    }

    Хотяя не вижу большого смысла в последних двух.
    Ответ написан
  • Выполнение нескольких Mysql запросов без разрыва соединения?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Поскольку вопрос не ясен, отвечу в целом по коду.

    Класс Модель - это НЕ обёртка для SQL запросов. И поэтому не должна наследовать mysqli.

    Логировать ошибки в бд - это ужас. Сделайте себе одолжение, логируйте в файл.

    Обработка ошибок на месте - это дважды ужас. Если подсчитать, сколько электроэнергии потратили пользователи похапе, старательно выписывая эти бессмысленные заклинания трай, кетч, лог еррор в каждой функции, то глобальное потепление уже давно бы сменилось похолоданием. Исключение - это не результат работы функции. Не надо писать трай на каждый чих, как будто это if ($result = mysql_query()). Исключение можно поймать в совсем другом месте. Наппимер, в глобальном трай кетче вокруг всего приложения. Или более интеллектуальный вариант - хендлер исключений

    exit($exception->getMessage()); - это вообще за гранью добра и зла. Какой сакральный смысл несёт кетч с таким содержимым?

    В целом, это классический вопрос про управление зависимостями. Ответ тоже классический - все зависимости передавать через параметры конструктора. Для облегчения этого процесса служит di контейнер.
    Ответ написан
    2 комментария
  • Как работает $_FILES?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Данные обычной формы передаются фактически в виде query string, только передается эта строка не в заголовке, а теле запроса.

    Данные формы с типом multipart/form-data - это, фактически, емейл с вложениями, по стандарту MIME

    Соответственно, все файлы просто добавляются в тело "письма" и распаковываются оттуда веб-сервером.
    Ответ написан
    Комментировать
  • Как решить проблему с уязвимостью PHP-FPM + Nginx?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Этот конфиг неуязвим
    О чем, собственно, и написано по ссылке.
    Ответ написан
    Комментировать
  • Возможно ли в php закомментить кавычку с помощью решётки(#)?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    И если так возможно сделать, тогда как убрать символ коммента из php?

    НИКАК
    Надо не символы убирать, а запросы нормально писать, чтобы ниакие символы не мешали.

    Я же тебе давал ссылку, где написано, что делать. А ты опять всякую дурь читаешь.
    Ответ написан
    2 комментария
  • Как защитить файлы, которые выводятся через mpdf?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Идем в мануал, читаем
    session_start ([ array $options = array() ] ) : bool
    Скроллим вниз до См. так же
    видим функцию, которая нам нужна
    Ответ написан
  • Как добавлять записи в MySQL в конец таблицы?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    У таблиц в базе данных нет ни "начала", ни "конца". Поэтому понятие "добавить в конец" не существует в принципе. БД - это не классный журнал.

    Любой порядок записи в БД приобретают только при выводе, и если только его явно задать. Во всех остальных случаях записи выводятся втом порядке, который удобен базе.
    выбирать все строки, сортировать и выбирать с самым маленьким ID - это как-то трудоёмко)

    Так и делать. Только средствами БД.
    Открываешь для себя операторы ORDER BY, LIMIT - и вперёд.
    Ответ написан
    1 комментарий
  • Hе работает fetch_assoc?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    перед соединением с БД надо написать волшебную строчку
    mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);

    и запустить свой код еще раз.
    прочесть сообщение об ошибке
    Ответ написан
  • Зачем нужен strip_tags и real_escape_string если есть htmlspecialchars?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Потому что это совершенно разные функции, которые не имеют никакого отношения друг к другу.
    Но еще со времен палеолита по похапешным скриптам кочуют плоды не приходящего в сознание индусского гения - функции "очистки" входящих параметров, куда набито всё, что по мнению автора имеет хоть какое-то отношение к безопасности.

    И при всем при этом, для входящих параметров ни одна из этих функций не нужна.

    - strip_tags это какой-то рудимент. Сейчас практически не используется.
    - real_escape_string это вообще совсем из другой оперы. к HTML никакого отношения не имеет. Причем в своей области тоже рудимент и применяться не должна.
    - htmlspecialchars единственная осмысленная функция из всех перечилсенных. но должна применяться не для "очистки" при вводе, а при выводе пользовательских данных в HTML
    Ответ написан
  • Скрипт проверка емаил адреса на существование, есть что-то подобное?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Скрипты такие конечно же есть, и во множестве.
    Работают из них примерно ни один.

    Потому что ни один нормальный почтовик не будет рассказывать спамерам всего мира, какие ящики у него заведены. Он скажет не важно, есть пользователь или нету - пишете, что у вас там, а мы дальше разберемся.
    А вот твой хост возьмет на заметку и после повторения такой вот активности забанит от греха.

    Проверять надо не существование ящика, а наличие пользователя, который его читает. Что достигается, как выше ответили, совершенно стандартным способом - отправкой емейла с кодом. Не "прямо при вводе", но зато надежно
    Ответ написан
    Комментировать
  • Как реализовать чтобы ответ curl'a формировался в базе данных mySQL?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Всё просто.
    Надо только понять, что программист работает не с волшебной палочкой, "хочу чтобы результат курла оказался в бд", а с конкретными инструментами.
    В твоем случае инструментов 5, два из которых вообще никак не связаны с другими двумя и упоминаться в одном контексте в принципе никогда не должны

    Получив в пхп данные через курл, ты дальше забываешь это слово. И учишь новое - json.
    Поскольку именно так называется формат, в котором ты данные получил.
    Гуглишь "как раскодировать json в php".
    Заметь до базы данных мы даже не добрались еще.

    Раскодировав джейсон, учишься работать с массивами в пхп и получить из них нужную тебе инфоромацию.
    Топиков на тостере вагон, можешь почитать.

    Дальше ты забываешь про джейсон и учишься работать с БД. Запрос на вставку.

    Дальше учишься работать с ПДО в пхп.

    И только после этого соединяешь все три последних элемента - через ПДО выполняешь запрос к базе данных, который записывает имеющиеся у тебя значения массива.
    Ответ написан
    Комментировать
  • Как получить несколько записей с БД?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Я в общем согласен с предыущим оратором, что PDO будет попроще в работе, тем более что твои познания в mysqli не сильно отличаются от полного незнания, и в этом смысле разница будет невелика.

    Но чтобы в прыжке не переобуваться, вот тебе код для mysqli
    в массиве $array лежат твои id товаров
    $array = [1,2,3];
    $in  = str_repeat('?,', count($array) - 1) . '?';
    $sql = "SELECT * FROM `tovar` WHERE `id` = IN ($in)";
    $stmt  = $mysqli->prepare($sql);
    $types = str_repeat('s', count($array));
    $stmt->bind_param($types, ...$array);
    $Stmt->execute();
    $result = $stmt->get_result(); // get the mysqli result
    $data = $result->fetch_all(MYSQLI_ASSOC);

    Теперь в массиве $data лежат твои товары.

    Для сравнения, код для пдо будет попроще
    Плюс, в качестве бонуса, пдо вернет массив, проиндексированный не числами по порядку, а ид товара. Тебе же надо будет как-то совмещать данные из бд с товарами, чтобы перемножить цену на количество.
    $array = [1,2,3];
    $in  = str_repeat('?,', count($array) - 1) . '?';
    $sql = "SELECT * FROM `tovar` WHERE `id` = IN ($in)";
    $stmt  = $pdo->prepare($sql);
    $stmt->execute($array);
    $data = $stmt->fetchAll(PDO::FETCH_UNIQUE);
    Ответ написан
    5 комментариев
  • Не получается сделать сравнение числа из базы данных и input. Ниже подробности. Как?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Прямо анекдот
    - Ты где деньги берешь?
    - В тумбочке.
    - А откуда они там?
    - Жена кладет.
    - А у нее откуда?
    - Я даю.
    - Ну а ты-то где их берешь?
    - Да в тумбочке!

    Вот у тебя массив $data это такая тумбочка, в которой, как ты воображаешь, лежат любые данные, как только они тебе понадобятся. Из базы, из реквеста - без разницы. Всё в тумбочке.
    Я даже не уверен, что ты к БД обращаешься. Зачем? Все в $data само появится.
    Ответ написан
    Комментировать
  • Как исправить эту ошибку?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    1. Выкинуть класс DataBase на помойку, он здесь явно лишний.
    2. создать файл engine/что-нибудь/mysqli.php и записать в него код отсюда
    3. Добавить а параметрам функции $mysqli
    function fakePayout ($mysqli, $user, $amount, $time) {

    4. Переписать код запросов на подготовленные выражения
    function fakePayout ($mysqli, $user, $amount, $time) {
       $referer = 'P'.rand(4, 6).rand(1, 0).rand(000000, 999999);
       $refererIncome = $amount/100*150;
       $stmt = $mysqli->prepare("INSERT INTO `deposits` (`user`, `amount`, `time`, `type`, `fake`) VALUES (?,?,?, '1', '1')");
        $stmt->bind_param("sss", $user, $amount, $time);
        $stmt->execute();
        $stmt = $mysqli->prepare("INSERT INTO `deposits` (`user`, `amount`, `time`, `type`, `fake`) VALUES (?,?,?, '2', '1')");
        $stmt->bind_param("sss", $referer, $refererIncome, $time);
        $stmt->execute();
    }

    5. Вызывать как обычно
    include_once(dirname(__FILE__).'/engine/что-нибудь/mysqli.php');
    fakePayout ($mysqli,$user, $amount, $time);
    Ответ написан
    Комментировать
  • Почему: Cannot modify header information?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Потому что сообщения об ошибках надо читать.
    Читать надо сообщения об ошибках.
    И только потом бежать что-то делать.

    output started at /home/s/sofuwa/beta.sofuwa.ru/public_html/wp-includes/functions.php:4231

    Никаким BOM в таком месте даже и не пахнет.
    Вместо "массовых преобразований" надо открыть конкретный файл, на конкретной строке, и смотреть что там вылезает

    phpfaq.ru/newbie/headers
    Ответ написан
    2 комментария
  • Можно ли в bash-скрипте прописать интерактивный ввод логина-пароля для GitHub и вызов MySQL-команды?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Все можно.
    Но если ты уж собрался кого-то поломать или хотя бы запентестить, то потрудись сам, а не будь прокладкой между своей задачей и тостером.
    Ответ написан
    Комментировать
  • Как поступить с корзиной пользователя?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Сохранить текущую корзину, потому что именно это пользователь точно сейчас хочет купить.
    Молча ничего не добавлять.
    Вежливо показать сообщение "У вас с прошлого раза остались такие-то товары, добавить? Добавить к текущему заказу?".
    Если пользователь согласился - добавить отсутствующие ,пропустить сущестующие.
    Ответ написан
    Комментировать