Задать вопрос
Профиль пользователя заблокирован сроком с 10 апреля 2022 г. и навсегда по причине: систематические нарушения правил сервиса
Ответы пользователя по тегу PHP
  • RedBean PHP на хостинге?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Опасно.
    Люди, которые пользуются RedBean, учили программирование по часовому видео.
    И больше о программировании и веб-разработке в частности не знают вообще ничего.
    Результат немного предсказуем.
    Ответ написан
    1 комментарий
  • Как понять нашёл ли SQL запрос данные в базе?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Если включить логику, то понять очень просто.

    После выполнения запроса мы получаем данные, которые он вернул.
    И вот эти самые данные и проверить

    $result = $link->query("SELECT * FROM `Exiting Users` where email='Aruba'");
    $user = $result->fetch_assoc();
    echo $user ? "Нашол" : "Нинашол";
    Ответ написан
    Комментировать
  • Зачем нужны '' при объявлении переменной, которой присваивается значение функции?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Когда ты пытаешься обратиться к переменной, которая не существует, это значит что в твоей программе что-то работает неправильно. И РНР тебя всегда об этом предупреждает.

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

    Оператор .= - это короткая запись для $html = $html . ""; |
    То есть здсь ты к существующему значению переменной приставляешь какое-то значение. Если до цикла переменная $html не определена, то при первом обороте будет предупреждение.

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

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Потому что мультизапрос тебе сто лет в обед не нужен.
    Как и большая часть этого бессмысленного кода.

    Вместо всех этих шаманских плясок с пятью бубнами тебе нужно просто соединиться и просто выполнить свои запросы
    <?php
    mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
    $link = mysqli_connect("localhost", "tsecret1_Sys", "FB,******0iu", "tsecret1_users");
    mysqli_set_charset($mysqli, $charset);
    
    $link->query("CREATE TABLE `tsecret1_users`.`uid ` ( `PassWord` TEXT NOT NULL ) ENGINE = MyISAM");
    $link->query("INSERT INTO `uid`(`PassWord`) VALUES (`pass2_hash`");


    ПЯТЬ строчек, из них две на выполнение запроса.
    Ответ написан
    Комментировать
  • Парсинг цифр - как замерить?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Судя по твоим словам ты выводишь данные из БД, а не из парсера
    Ответ написан
  • Как исправить ошибку Number of variables doesn't match number of parameters in prepared statement?

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

    Вот как правильно писать функуцию-хелпер для подготовленных запросов

    что у тебя неверно?
    1. цикл for - это же ужас. как у тебя пальцы не болят выписывать все эти точечки-запяточечки? неужели не проще написать foreach?
    2. bind_param может вызываться только 1 раз
    3. функция вообще-то должна что-то возвращать.

    Только ни в коем случае не присваивай $stmt переменной класса. Класс для работы с БД обязан быть stateless.
    Ответ написан
  • Как сделать поиск как у Хабр QnA?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Начни с простого поиска введённой подстроки

    1. Выделяешь таблицы, по которым будешь искать
    2. Делаешь к ним запросы.
    3. К таблицам тегов и пользователей запрос только к одному полю, запрос к таблице вопросов по нескольким полям.

    $search = '%'.$_GET['q'].'%';
    $sql = "SELECT * FROM questions WHERE body LIKE ? OR title LIKE ?, LIMIT ?,?";
    $stmt->prepare($sql);
    $stmt->bind_param("ss", $search, $search, $limit, $offset);
    $stmt->execute();
    $rows = $stmt->get_result()->fetch_all(MYSQLI_ASSOC);
    Ответ написан
    Комментировать
  • Не получается записать данные в бд через драйвер PDO?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Ну или так.
    Кучерявые аннотации расставишь сам
    class Database
    {
        public $pdo;
    
        public function __construct()
        {
            $options = [
                \PDO::ATTR_ERRMODE            => \PDO::ERRMODE_EXCEPTION,
                \PDO::ATTR_DEFAULT_FETCH_MODE => \PDO::FETCH_ASSOC,
                \PDO::ATTR_EMULATE_PREPARES   => false,
            ];
            $config = require_once 'config.php';
            $dsn = 'mysql:host='.$config['host'].';dbname='.$config['db'].';charset='.$config['charset'];
            $this->pdo = new \PDO($dsn, $config['username'], $config['password'], $options);
        }
    
        public function query($sql, $params)
        {
            $sth = $this->pdo->prepare($sql);
            $sth->execute($params);
            return $sth;
        }
    }

    Больше никаких методов в него не добавлять.
    Если вдруг зачешется добавить - спросить меня, я объясню почему это не нужно и как сделать правильно.

    После этого спокойно добавить запись в БД

    $db = new Database();
        $sql = "INSERT INTO `reviews`(`id`, `name`, `descriptions`, `url_image`, `rating`) VALUES(:name, :description, :url_image, :rating)";
        $db->query($sql, $reviewUser);
        echo "Запись успешно создана!";


    Но учитывя уровень понимания своего кода - лучше пока годик забыть просвои классы и использовать только готовые.
    Ответ написан
  • Как запретить доступ к сайту с других стран?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    > Этот вопрос уже задавался, но у меня маленько другая ситуация.

    Ситуация та же самая, можно использовать любой ответ на этот вопрос

    > Не повлияет ли это на работу Гугл Аналитики, Пикселя Фейсбук и Метрики?

    Поскольку Гугл Аналитика, Пиксель Фейсбук и Метрика не расположжены на вашем сервере, то на их работу это не повлияет.
    Ответ написан
  • Как сделать редирект с интеравлом?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Никогда не надо делать редирект с интервалом. Это глупо само по себе и неудобно для пользователя.
    Текст надо записать в сессию, сделать редирект, и показать во всплывающем сообщении. Гугли flash messages
    Ответ написан
    Комментировать
  • Почему не работает на сервере, а на логкалке работает?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Нажимаем в браузере кнопочку Фэ12, выбираем вкладку "Сеть", выбираем мышкой свой запрос и смотрим ЧТО вернул сервер вместо валидного джейсон.
    Если ошибку, то читаем что там написано
    Если ничего - то идем в логи сервера и читаем там.
    Ответ написан
  • Переписал код с книги, но выдает ошибку, в чем может быть проблема?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Тебе надо бросить всё, и учиться пользоваться поиском.
    Код к книжкам всегда есть в интернете. И к этой книжке тоже.
    И если уметь пользоваться поиском, то не придётся страдая и потея перепечатывать кривой код из книжки, теряя при этом скобки.

    Ошибка синтаксиса чаще всего означает что ты потерял скобку. Ищи, где открыл и не закрыл
    Ответ написан
    1 комментарий
  • Перенаправление при ошибке?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Никак.
    При ошибке надо выдавать НТТР код ошибки, а не перенаправления.
    Если хочется показать определенную страницу, то её и показать, сразу на месте, без перенаправления.
    Сделать это можно при помощи обработчика ошибок
    Ответ написан
    Комментировать
  • Насколько защищена представленная конструкция php?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Пароль никогда не следует хранить в открытом виде.
    Сгенерировать его через password_hash, вписать в скрипт и проверять через password_verify.
    Помимо прочего это еще и затруднит подбор перебором.

    Также код можно сильно сократить. Уже сто лет как в РНР есть сокращенный вариант проверки на isset, плюс можно сразу прервать выполнение, и не делать лишнюю вложенность
    <?php
    
    $login = $_POST['login'] ?? '';
    $password = $_POST['password'] ?? '';
    $hash = '$2y$10$e6RRGG8zFvsE6Bl7at/Vx./igFslOmnLo6poA6N1QoNWrgrkedHqO';
    
    if ($login !== 'login' || !password_verify($password, $hash)) {
        die('Неверный логин');
    }
    echo 'рендер кода страницы с формами для создания новых файлов на сервере';


    Закрывающий тег тоже не нужен
    Ответ написан
    Комментировать
  • Как найти продукт по цветам Mysql?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Не должно быть поля " котором пишу так black,yellow,green ".
    Должна быть отдельная таблица, в которой id записи и цвет
    тогда поиск делается простым джойном.
    Ответ написан
    4 комментария
  • На каком уровне нужно знать php, чтобы изучить wordpress?

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

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Пути всегда должны быть абсолютными.

    Как к файлам, так и к http ресурсам.
    У тебя в шапке во всех урлах те же самые точечки. А должен быть абсолютный путь от корня сайта. То есть не
    <img src="../images/lame.jpg">, а <img src="/images/lame.jpg">
    , только чтобы это был реально существующий путь.

    И прочесть целком phpfaq.ru/newbie/paths
    Ответ написан
    Комментировать
  • Правильно ли вставлять include() в цикл 50x и чем это чревато?

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

    Так что если тебе совсем не жалко себя, то оставляй как есть, иначе сделай нормальный шаблон страницы, в котором уже будут все циклы.
    Ответ написан
    Комментировать
  • Как сохранить данные из формы в БД?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Судя по коду, у тебя здесь три вопроса.
    1. Как вывести форму?
    2. У меня есть форма, как передать ее содержимое на сервер аяксом и получить значения в РНР ?
    3. У меня есть несколько переменных в РНР, как их записать в БД
    Никогда больше так не делай.
    Первые два вопроса не имеют никакого отношения к третьему и засорять свой вопрос ими не надо.

    Для того, чтобы сохранить данные в бд, снчала надо выкинуть весь этот чудовищный говнокод, который из ошибок состоит чуть более чем полностью.

    Код соединения никогда не пишем как есть, а инклюдим, чтобы не повторяться повторяться.
    Код соединения должен быть нормальный, со всеми необходимыми параметрами, и без дурацких echo. Берем здесь.
    Сами переменные в запрос не пихаем, а передаем отдельно

    <?php
    require 'mysqli.php';
    $query = "INSERT INTO message (name, email, phone, message) VALUES(?,?,?,?)";
    $stmt = $mysqli->prepare($query);
    $stmt->bind_param("ssss", $name, $email, $phone, $message);
    $stmt->execute();
    echo "Запись добавлена!";

    И все у тебя вставляется без проблем.
    Ответ написан