Все сервисы Хабра

Сообщество IT-специалистов

Ответы на любые вопросы об IT

Профессиональное развитие в IT

Удаленная работа для IT-специалистов

Как айтишники попадают в шахты и учатся дышать под землей
Войти на сайт
  • Все вопросы
  • Все теги
  • Пользователи

Хабр Q&A — вопросы и ответы для IT-специалистов

Получайте ответы на вопросы по любой теме из области IT от специалистов в этой теме.

Узнать больше
другие проекты хабра
  • Хабр
  • Карьера
  • Фриланс
Задать вопрос
rozhnev

Slava Rozhnev

Fullstack programmer, DBA, медленно, дорого
  • 53
    вклад
  • 0
    вопросов
  • 61
    ответ
  • 62%
    решений
Лайки
  • Информация
  • Ответы
  • Вопросы
  • Комментарии
  • Подписки
  • Нравится
  • Достижения
  • Почему при решении математического выражения получается ответ -0?

    Андрей Ежгуров @eandr_67
    web-программист (*AMP, Go, JavaScript, вёрстка).
    А зачем избегать? Это же не ошибка, а совершенно стандартная особенность чисел с плавающей запятой в любом современном языке программирования и в любом компьютере: https://ru.wikipedia.org/wiki/%E2%88%920_(%D0%BF%D...
    А вот вычисление x ошибочно:
    $x = (-$b - sqrt($d)) / (2 * $a);
    Ответ написан 34 минуты назад
    Комментировать
    Нравится 1 Комментировать
  • Почему добавляются фигурные скобки ко времени в PHP?

    DevMan
    DevMan @DevMan Куратор тега PHP
    скобки к этому коду отношения не имеют. проверяйте код дальше.
    Ответ написан 2 часа назад
    Комментировать
    Нравится 2 Комментировать
  • Почему вместо кириллицы знаки вопросов?

    FanatPHP
    FanatPHP @FanatPHP
    Чебуратор тега PHP
    Надо блин давно уже на тостере запилить аналог вот этого ответа.
    А то же ведь раз в три дня один и тот же вопрос, один и тот же вопрос - кракозябры, вопросики ромбики
    и везде одна и та же ересь про "meta charset" в ответах.

    Именно в варианте чеклист, чтобы каждый горемыка себя проверял по конкретным пунктам, в которых четко написано, что делать, вместо невнятного мычания "ну у меня там утээф и еще здесь и вот тута"

    В Mysql
    • Кодировка, которую надо выставлять, называется utf8mb4
    • Что там стоит на "всей БД" абсолютно без разницы. Кодировка должна быть указана для таблиц (в отдельных случаях - для поля) при создании. Проверить можно командой SHOW CREATE TABLE table_name

    В PHP
    • Должна быть быть выставлена кодировка соединения с БД
      • в PDO через DSN $dbh = new PDO('mysql:host=...;charset=utf8mb4');
      • в mysqli $mysqli->set_charset('utf8mb4');


    В браузере
    Для того, чтобы браузер корректно отображал кодировку, её надо указать HTTP заголовках.
    • Либо default_charset = "utf-8" в php.ini.
    • Либо руками в коде header('Content-Type: text/html; charset=utf-8');

    Проверять в консоли разработчика: вкладка Сеть, кликаем на запрос, смотрим заголовки
    Ответ написан 29 дек. 2020
    Комментировать
    Нравится 6 Комментировать
  • Как сделать SUM и COUNT при LEFT JOIN запросе?

    Mikhail_E
    Михаил Е @Mikhail_E
    1С, SQL
    SELECT 
        t1.id, COUNT(t2.field2) AS cnt, SUM(t2.field2) AS sum_field2
    FROM tbl1 as t1
    left join tbl2 as t2 
    ON t1.id = t2.id
    group by  t1.id
    Ответ написан 14 часов назад
    Комментировать
    Нравится 1 Комментировать
  • Как написать редирект с кнопки?

    Nozdri
    Иван Родичев @Nozdri
    Уровень постановки вопроса такой, что вам поможет только это
    Ответ написан вчера
    1 комментарий
    Нравится 1 1 комментарий
  • Можно ли использовать html-код в файле php?

    DevMan
    DevMan @DevMan Куратор тега PHP
    можно. но не рекомендуется.
    познакомьтесь с шаблонизаторами.
    например, twig.
    Ответ написан вчера
    Комментировать
    Нравится 3 Комментировать
  • Как на php сделать редирект на URL при заходе на сайт с определенного домена?

    Cheizer
    Cheizer @Cheizer Автор вопроса
    В общем ошибка не в PHP была напрямую, решение, док должен быть не просто в кодировке UTF8, а в кодировке UTF8 без BOM. UTF8 dидно добавляет скрытые cимволы перед php и поэтому ошибка.
    Ответ написан вчера
    Комментировать
    Нравится 1 Комментировать
  • Почему виснет домен в chrome и как от этого избавиться при выполнении php скрипта?

    nokimaro
    nokimaro @nokimaro
    Меня невозможно остановить, если я смогу начать.
    Для общего понимания проблемы рекомендую почитать Блокирование сессий в PHP

    Возможные решения:
    1. session_write_close();
    2. не использовать сессии где они не нужны
    3. использовать драйвер сессий без блокировки
    Ответ написан 13 янв.
    Комментировать
    Нравится 2 Комментировать
  • Как произвести проверку строки с помощью preg_match?

    Mors Clamor @66demon666
    По навыкам джун - по факту безработный
    На всякий случай, мож пригодится Полезный ресурс
    Ответ написан 13 янв.
    1 комментарий
    Нравится 2 1 комментарий
  • Класс для работы с определенной таблицой?

    Denis @sidni
    Php Developer
    То что вы пытаетесь реализовать, является паттерном ActiveRecord гуглите реализации.
    А нюансы
    • почему класс называется Account и при этом вы используете магические гет и сет тут в принципе все ясно и вы знаете какие поля вам нужно сететить поэтому можно их просто объявить паблик полями
    • метод сохранения довольно странный как вы будете различать апдейт от инсерта (можно сделать флаг isInsert) и если модель получили через ваши методы поиска то выставить его false что означает апдейт
    • Для поиска сделайте свои методы статическими, и всегда возвращайте новый экзепляр (коллецию, массив) своего класса, тогда вы решите проблему с циклом
    • По современным правилам проектирования данный паттерн является антипаттерном тк берет на себя слишком много функциональности и привязан к конкретной бд

    Хорошие реализации этого паттерна смотрите фреймверки Yii2 и Laravel
    Ответ написан 12 янв.
    Комментировать
    Нравится 1 Комментировать
  • Возможно ли размещение на Google Cloud Functions скрипта написанного PHP?

    alexey-m-ukolov
    Алексей Уколов @alexey-m-ukolov Куратор тега PHP
    Возможно.
    Ответ написан 12 янв.
    Комментировать
    Нравится 2 Комментировать
  • Запрос mysql (PDO) php, как исправить?

    flapflapjack
    Талян @flapflapjack
    Нажимательщик кнопков
    $sql = "SELECT * FROM applications_brokers WHERE id_account = ? LIMIT 6 OFFSET ?";


    А зачем в запрос вставлять $_COOKIE['user_login_id'], $quality - не понятно.

    Кроме того строки в PHP соединяются точкой, а не запятой.

    Предполагаю, что вы хотели сделать что-то типа:
    $sql = "SELECT * FROM applications_brokers WHERE id_account = ? LIMIT 6 OFFSET ?";
    $stmt=$dbn->prepare($sql);
    $result=$stmt->execute(array($_COOKIE['user_login_id'], $quality));
    Ответ написан 11 янв.
    8 комментариев
    Нравится 1 8 комментариев
  • Почему не получается записать в базу данных?

    FanatPHP
    FanatPHP @FanatPHP
    Чебуратор тега PHP
    Сразу учимся правильно работать с БД.
    Сначала учимся правильно соединяться.
    Весь этот детский лепет "не могу соединиться с БД" выкидываем и пишем нормальный код, который без всяких проверок сам сообщит об ошибках

    mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
    $link = mysqli_connect($host, $user, $pass, $db_name);
    $link->set_charset("utf8mb4");

    после этого переписываем свою функцию на добавление, предавая в неё линк в качестве параметра
    function ins ($link, $image_name) {
        $stmt = $link->prepare("INSERT INTO cat (image) VALUES (?)");
        $stmt->bind_param("s", $image_name);
        $stmt->execute();
    }

    причем используем нормальный запрос, а не такой через который на сайт будут шелл заливать
    Ответ написан 11 янв.
    2 комментария
    Нравится 3 2 комментария
  • Задачи на ООП, SOLID, и просто толковые задачники онлайн PHP?

    saboteur_kiev
    Saboteur @saboteur_kiev Куратор тега IT-образование
    software engineer
    Вся суть ООП - чтобы данные лежали вместе с функциями в одном объекте.
    Что позволяет инкапулировать и разделять разработку объектов разным программистам.
    Довольно сложно придумать ООП задачу для маленького проекта, с которым справится один человек.
    Придумывая задачу, предположите что вас несколько и вы независимо друг от друга пишете разные объекты, заранее договорившись только об интерфейсах (публичных методах)
    Ответ написан 10 янв.
    Комментировать
    Нравится 2 Комментировать
  • Как правильно сформировать запрос на вывод из нескольких таблиц в один формат?

    Rsa97
    Rsa97 @Rsa97
    Для правильного вопроса надо знать половину ответа
    (SELECT ...
      FROM `products`
      WHERE `category_id` = :categoryId
    )
      UNION
    (SELECT ...
      FROM `newproducts`
      WHERE `new_category_id` IN (
        SELECT `id`
          FROM `newcategories`
          WHERE `join_category` = :categoryId
      )
    )
    Ответ написан 10 янв.
    3 комментария
    Нравится 1 3 комментария
  • Как сделать одно действие с несколькими значениями?

    alexalexes @alexalexes
    Если нужно присвоить одно и то же значение атрибутам у нескольких определенных строк, то это делается элементарно.
    update `table` set атрибут_не_первичный_ключ = 1
    where id in (1, 2, 4, 10);

    Другое дело, если это касается атрибутов с уникальным свойством.
    Если нужно сделать рокировку значений, то поскольку первичный ключ имеет свойство уникального значения, то нужно действовать в два этапа.
    1. Переписать id-шники интересуемых строк так, чтобы новый id был за диапазоном присваиваемых id.
    Можно переписать в большую сторону, если у вас максимальное число записей пару тысяч, то воспользоваться новыми значениями, например, от миллиона.
    Но проблема в том, что если система не остановлена во время этой рокировки, то вероятно, вставка новых строк будет происходить с присвоением макс. последнего значения +1, тогда новые строки окажутся с миллионными id-шками.
    Нужно взять диапазон отрицательных чисел в качестве промежуточного состояния рокировки id.
    update table
    set id = case
       when id = 1 then -1
       when id = 2 then -2
       when id = 4 then -4
       when id = 10 then -10
       else id -- страховка от дурака, если неправильно описан in 
    end
    where id in (1, 2, 4, 10)

    2. Второй шаг заключается в том, чтобы переписать нашим отрицательным id новые положительные значения, чтобы каждая строка получила новые значения 1,2,4,10. Например, можно поменять местами id соседей.
    update table
    set id = case
       when id = -1 then 2
       when id = -2 then 4
       when id = -4 then 10
       when id = -10 then 1
       else id -- страховка от дурака, если неправильно описан in 
    end
    where id in (-1, -2, -4, -10)

    В итоге, такую операцию можно делать на работающей системе, не мешая созданию новых записей.
    Чтобы вообще исключить коллизии, то лучше оба запроса делать в одной транзакции, при этом можно использовать положительные значения не используемого диапазона значений id.
    Ответ написан 10 янв.
    3 комментария
    Нравится 2 3 комментария
  • Error CS0201. Как решить проблему?

    borisdenis
    Довольный Жизнью @borisdenis
    Запустить в режиме отладки и увидеть в каком месте возникает ошибка, полный текст ошибки и место где она возникла выложить сюда.
    Ответ написан 10 янв.
    1 комментарий
    Нравится 1 1 комментарий
  • Быть ли демонам на PHP для обмена пакетами со сторонним ресурсом или смотреть в сторону Python?

    Андрей Ежгуров @eandr_67
    web-программист (*AMP, Go, JavaScript, вёрстка).
    Первый простейший вариант: запихнуть запуск PHP-скрипта в cron. Но там максимальная частота запуска - раз в минуту.

    Второй простейший вариант: сделать скрипт, работающий 24*7. Просто отключить лимит времени в скрипте через set_time_limit(0); и сделать в коде бесконечный цикл. А для паузы использовать sleep внутри цикла. И запускать, например, из командной строки. Но на виртуальном хостинге работать не будет.
    Ответ написан 09 янв.
    Комментировать
    Нравится 2 Комментировать
  • Как это можно порефакторить?

    Андрей Ежгуров @eandr_67
    web-программист (*AMP, Go, JavaScript, вёрстка).
    Например, так:
    <?php for ($i = 0; $i < 5; ++$i) { ?>
      <li<?php if ($i < $countStart) { ?> class="start-fill"<?php } ?>></li>
    <?php } ?>

    Или так:
    <?php
    for ($i = 0; $i < 5; ++$i) {
      echo $i < $countStart ? '<li class="star-fill"></li>' : '<li></li>';
    }
    ?>
    Ответ написан 09 янв.
    Комментировать
    Нравится 2 Комментировать
  • Как на PHP создать свой сервер, чтобы получать данные с Andriod приложения?

    rPman @rPman
    index.php
    <?php
    file_put_contents('mydatabase.serialized',serialized($_POST).nl,FILE_APPEND);
    ?>

    вот тебе готовый сервер из одного файла, ничего не проверяет, просто сохраняет все что к нему приходит

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

    Использование фреймворков оправдано только если задача, которую они решают совпадает с вашей.
    Ответ написан 09 янв.
    Комментировать
    Нравится 6 Комментировать
Оценили как «Нравится»
  • 1
  • 2
  • 3
  • 4
  • 5
  • Следующие →
Самые активные сегодня
  • Dr. Bacon
    • 11 ответов
    • 0 вопросов
  • Vene4ka
    Захар Винокуров
    • 2 ответа
    • 5 вопросов
  • adugin
    Andrey Dugin
    • 7 ответов
    • 0 вопросов
  • SoreMix
    SoreMix
    • 6 ответов
    • 0 вопросов
  • Андрей Ежгуров
    • 6 ответов
    • 0 вопросов
  • Kozack
    Alex
    • 6 ответов
    • 0 вопросов
  • © Habr
  • О сервисе
  • Обратная связь
  • Блог

Войдите на сайт

Чтобы задать вопрос и получить на него квалифицированный ответ.
Войти через центр авторизации