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

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

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Это должна быть не переменная, а элемент массива.
    $data['good'] = 1;
    $test = 'good';
    echo $data[$test];
    Ответ написан
    Комментировать
  • Мультизагрузка картинок с добавлением на сервер и в БД. Как сделать?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Лет ми гоогле ит фор ю: пишешь в адресной строке своего бразера три слова: Мультизагрузка картинок php и нажимаешь Ентер. На открывшейся странице будут ссылки на страницы, объясняющие, как делать мультизагрузку.

    После того как освоишь загрузку, пишешь в адресной строке своего бразера три слова: запись в БД php и нажимаешь Ентер.
    Ответ написан
    Комментировать
  • Как найти пользователей с таким же login/email?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    А теперь правильный ответ

    $stmt = $conn->prepare('SELECT * FROM userst WHERE email=?');
    $stmt->bind_param("s", $_POST['email']);
    $stmt->execute();
    if ($stmt->fetch()) {
          $error = 'Пользователь с таким никнеймом уже существует';
    }
    Ответ написан
  • Как отправить данные формы при помощи smtp?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Попробуй разделить свою задачу на части.
    1. Вывод формы.
    2. прием данных из формы в скрипте на похапе
    3. Отправка данных из скрипта на похапе
    4. работа с SMTP

    потом попробуй проверить работу этих частей по отдельности и понять на каком этапе происходит ошибка
    а потом попробуй ответить себе на вопрос, при чем здесь вообще phpmailer и SMTP
    Ответ написан
    Комментировать
  • Как временно скрыть строку из таблицы?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Если отвечать на вопрос, который вынесен в заголовок, то это возможно только в mysql 8, при блокировке с использованием опции SKIP LOCKED.

    Если же версия другая (и если решать проблему, которая стоит перед автором), то возможны варианты.

    Например добавить третий статус, "обработка".
    То есть скрипт выбирает строку, ставит статус 3, завершает обработку, и потом стиавит 2.
    Только в этом случае будут иметь смысл блокировки, хотя я все равно не очень вижу, что тут блокировать, кроме всей таблицы целиком, а это как бы не замедлило весь процесс еще больше. В общем, все зависит от времени, которое требуется на обработку строки.
    Если обработка быстрая, то пусть выполняют работу повторно.
    Если долгая, то лочить строки со статусом 2 на чтение, выбирать строку, сразу ставить ей статус 3, анлочить все строки, обрабатывать полученную, ставить статус 2.
    Плюс добавить еще поле время смены статуса и периодически собирать зависшие в 3 статусе

    Более жизненный вариант (опять же, для решения проблемы, а не вопроса) - это каждый воркер работает со своим блоком данных . например, один выбирает только id, которые кончаются на 1, второй - на 2 - и так далее. можно придумать более-менее равномерный алгоритм, чтобы воркеры не мешали друг другу, на тех же принципах, на которых делается шардирование.

    Ну а самый простой и надёжный - это ставить строке уникальный идентификатор, UUID вполне подойдет.
    Тогда вместо селект+апдейт можно делать сразу апдейт (с условием, которое раньше шло в селект)

    update table set guid = {$UUID} where ... limit 1;
    ... много кода ...
    update table set .... guid = null where guid = {$UUID};
    Ответ написан
    2 комментария
  • Не выполняется запрос, как правильно его написать?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Либо
    SELECT * FROM pag WHERE id=? and name=?
    либо
    SELECT * FROM pag WHERE id=? or name=?
    в текущем виде запрос не имеет смысла.

    И для работы с БД надо не пихать переменные прямо в запрос, а использовать плейсхолдеры
    Ответ написан
  • Узнать есть ли запись в таблице mysql?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Но сами данные не нужны, нужно узнать только результат поиска нашли/не нашли.

    требование бессмысленное. Проверка наличия - это и есть проверка данных.
    То есть никакой "особенный" запрос в общем случае писать на надо, твой
    $sql  = "SELECT *  FROM `table` WHERE `url` = 'link2'";
    прекрасно подойдет.
    Сделать обычный фетч и посмотреть, вернул ли он что-нибудь.

    Если хочется заняться совсем уж микрооптимизацией, то вместо * можно написать константное значение, например 1.
    Если строк может быть много, то запросить count(*) и проверить, ноль - не ноль.
    Ответ написан
  • Как создать переменную в php с квадратными скобками(выборку для массива)?

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

    Этот кордебалет с фигурными скобками никогда не нужен. Для таких целей используются массивы.

    $data['ya'][1][2] - и не нужно никаких извращений.
    Ответ написан
    Комментировать
  • Никак не могу понять какую кодировку ставить в бд?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    в базе - utf8mb4
    в РНР при соединении с БД - utf8mb4
    на сайте - UTF-8

    Уже внесенные данные это не поправит, но новые будут заноситься корректно.
    Ответ написан
    Комментировать
  • Как получить обработанные данные json методом curl на php?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Осваиваем программирование.

    1. Получив на выходе слово false мы должны посмотреть своем коде место, из которого это слово получается.
    Смотрим: $result = curl_exec($curl);. Получается что false вернула функция curl_exec().
    2. чтобы узнать, в каких случаях функция curl_exec() возвращает false, надо открыть документацию
    3. Открываем документацию и читаем, Возвращает FALSE в случае возникновения ошибки.
    4. Ну тут дальше уже сложнее. Тут нужен или опыт или немного погуглить, чтобы открыть для себя функцию curl_error()
    5. Добавить вывод результата этой функции в свой скрипт, и дальше смотреть что она выведет и действовать по обстоятельствам.
    Ответ написан
    2 комментария
  • Как называется специально усложненный проект на GitHub?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Simple PHP Easy Plus
    Тут, правда, не 5 строк, а один оператор, но, надеюсь, подойдёт.
    Ответ написан
    1 комментарий
  • Вставить в таблицу столбец без дублей?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    1. Добавить уникальный индекс на имя
    2. Вставлять запросом INSERT IGNORE
    Ответ написан
    Комментировать
  • Как правильно сохранять keywords в базу данных mysql?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Единственное осмысленное решиение

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

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

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Не должен. В кавычках в SQL пишутся строки.
    Плейсхолдер - это не строка. Следовательно, кавычек быть не должно.

    Кроме этого, немедленно выкинуть весь этот ужас с if и echo "Не удалось трали-вали то-то". Никому неинтересно читать, что там тебе не удалось и что не получилось. Писать код надо нормально, без этого частокола if-ов.

    Нумеровать стейтменты тоже не нужно, если только они не вложены в цикл. И тип надо ставить s а не b
    $stmt = $connection->prepare("SELECT * FROM users WHERE email = ?");
    $stmt->bind_param("s", $email);
    $stmt->execute();
    if ($stmt->fetch()) {  
      echo "Вы уже зарегестрированы, создавать несколько аккаунтов с одинаковым имейлом нельзя"; //не дать челику снова зарегаться
    }


    Нормальные примеры работы с mysqli смотри здесь
    Ответ написан
    3 комментария
  • Symfony или Slim framework?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Нету в симфони никакого миллиона классов из коробки. Это какое-то дикое суеверие.
    Ответ написан
    6 комментариев
  • Как можна написать краткий if else (short if else)?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Не надо ничего писать сокрашённо.
    Писать надо ПОНЯТНО. Чтобы потом можно было ПРОЧИТАТЬ.

    В данном случае ничегео сокращать не нужно. можно только убрать лишние else.

    if (is_null($a) || $b) {
        if(isset($c)){
            return $c;
        } elseif( isset($d)) {
            return $d;
        }
    }
    return $e;


    Хотя конечно обсуждать высосанный из пальца бессмысленный пример нет смысла.
    Ответ написан
    Комментировать
  • Почему не работают стили css?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Ответ написан
    Комментировать
  • Как правильно сделать sql запрос?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Из комментов надо выбирать не по id, а по post_id.
    В таблице комментариев должно быть поле с ид поста. И дальше просто выбирать все нужные комментарии по этому полю

    Джойн здесь будет лишним. проще сделать два запроса - к таблице постов и к таблице комментариев.
    Ответ написан
    4 комментария