• Создание массива, запись его в файл, как получить массив из файла?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    создаю выборку из бд
    Это не выборка из бд, это маразм, основанный на обрывочных знаниях о том что есть такая штука как бд, и лени в поиске решения задач, которые хоть как-то отличаются от того, что пишут в задачнике для полных новичков.

    создаю выборку из бд в массив и записываю его в текстовый файл
    Не массив, а массивы. И вопрос о том зачем вам эта выборка в файле остается открытым.

    пытаюсь получить массив из файла
    Не пытаетесь, а получаете, правда только 1 массив, остальные записи игнорируются, так как сериализация (и соответственно десериализация), подразумевает 1 переменную (а вы туда пихаете несколько).

    а хотелось бы что бы вот так
    То что ключи массива при этом у вас одинаковые вас не смущает? Например, что конкретно по вашему мнению вы получите из такого массива, при обращении вот так:$array['oc_loadprice_schema']??
    Ответ написан
    8 комментариев
  • Как сделать единую точку входа в nginx через auth_basic?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Никак, http auth помнит авторизацию только для конкретного сайта/домена. Придётся перейти на общий домен, смириться с двумя авторизациями или отказаться от http auth вообще. К слову, её в интернетах вообще используют исчезающе редко, так как она сильно неудобна для пользователя не только по причине отсутствия кроссдоменности.
    Ответ написан
    7 комментариев
  • CMS или Framework?

    vfreelancer
    @vfreelancer
    php
    в сms много всего готово - но вам оно не надо в этом проекте, а конкретно под вашу задачу придется писать плагин с нуля. поэтому фреймворк - не будет ничего лишнего
    Ответ написан
    Комментировать
  • Неправильный IP?

    127.0.0.1 это ваш локальный ip и если OpenServer находится на той же машине, с которой вы открываете сайт, то вполне логично, что вы получили этот ip. Откройте сайт с телефона, который по wifi находится в той же сети - получите нормальный ip.
    Ответ написан
    Комментировать
  • Как написать чат на php?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега SQL
    Седой и строгий
    Так же, как на любом другом языке. В минимальном виде надо два обработчика: Один будет выбирать из базы сообщения и отдавать их клиенту вместе с формой, а второй будет принимать из этой формы сообщение и записывать его в базу.
    Ответ написан
    Комментировать
  • Как вывести что-либо если сейчас от 10 до 20 часов?

    rozhnev
    @rozhnev Куратор тега PHP
    Fullstack programmer, DBA, медленно, дорого
    <?php
    if (10 <= date("G") && date("G") <= 20) {
        echo "сейчас на сервере от 10 до 20 часов.";
    }


    php code online
    Ответ написан
    6 комментариев
  • Как вызвать одну функцию из ассоциативного массива?

    rozhnev
    @rozhnev Куратор тега PHP
    Fullstack programmer, DBA, медленно, дорого
    Можно:
    <?php
    $commands = [
    	'hi' => fn($name) => 'hi, ' . $name, 
    	'hello' => fn($name) => 'hello , ' . $name,
    	'etc' =>fn($name) => 'etc...',
    ];
    
    echo $commands['hi']('John');


    php code online
    Ответ написан
    Комментировать
  • Как лучше всего идентифицировать id отзыва для отправки на сервер?

    Dr_Elvis
    @Dr_Elvis
    В гугле забанен
    на бекэнде дополнительно проверяйте, что этот отзыв принадлежит этому логину.
    Ответ написан
    1 комментарий
  • Как выводить предупреждения в php?

    Adamos
    @Adamos
    PHP не интерактивен, его нельзя прервать, выдав пользователю запрос и продолжить после ответа.
    В РНР вы можете только проанализировать данные и выдать ответ - все прошло или остались вопросы.
    Остальное делается в браузере, в JS: на форму, куда прикрепляется файл, вешается обработчик, который отправляет его по AJAX в PHP и разбирает ответ. Если в ответе есть вопросы, они выдаются пользователю и данные отправляются снова по тому же AJAX, но уже с ответами пользователя, определяющими поведение РНР при обработке файла.
    Ответ написан
    1 комментарий
  • Нужно ли в таких случаях делать защиту от инъекций?

    rozhnev
    @rozhnev Куратор тега PHP
    Fullstack programmer, DBA, медленно, дорого
    Нужно!!!
    Ответ написан
    Комментировать
  • Для чего в проектах принудительно используют use?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Минусы как бы очевидны:
    нет, не очевидны, по крайней мере миллионам разрабов

    1 Код становится трудно читаем. По месту использования не всегда понятно что имеется ввиду под Order::load() - \Framework\Sale\Order::load или \Vendor\Project\Sale\Order::load - приходится проматывать к верху файла.
    Вам как разрабу должно быть в принципе фиолетово, какой из пакетов используется, если они соблюдают один интерфейс. Если не соблюдают, при том что называются одинаково, значит все пошло не так задолго до проблем с определением пакета...

    2 Код становиться длиннее - там где было бы просто:
    \Framework\Main\UI\Extension::load([ 'vendor.module.components.cabinet.personal' ]);
    приходится писать:
    use \Framework\Main\UI\Extension;
    Extension::load([ 'vendor.module.components.cabinet.personal' ]);
    Код становится длиннее в проектах где 2 контроллера и в них по 1 экшену. Там где Extension::load будет вызываться больше одного раза, очевидно экономия на эксплуатации клавиатуры заметно увеличивается. А в больших проектах создание объекта может (и будет) повторяться многократно.

    4 Код становиться замусоренным, так как верхушки файлов запросто превращаются во что-то вроде:
    Если не обращать внимание на отсутствие пункта 3, то... нет, не могу не обращать внимание, вот же торопыга....
    Во первых - данная портянка очень аккуратно прячется любой адекватной ИДЕ,
    Во вторых - это правильно и логично, хранить все импорты в одном месте
    В третьих - если ты пишешь неимпортированный класс в коде - ИДЕ обычно предлагает варианты внесения его в блок импорта, и все выглядит аккуратно.

    И хрен его знает используются импортированные классы ниже ещё или уже нет, ведь никто не убирает этот мусор.
    Хрен не знает, а ИДЕ замечательно знает и даже подсвечивает серым цветом неиспользуемые.
    Ответ написан
    4 комментария
  • PHP Что делать ошибка function foreach() on null?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Очевидно что в переменной $diary ничего нет(NULL), и вы пытаетесь вызвать метод от пустой переменной. Предполагается что для начала нужно создать в ней объект класса Diary.
    Ответ написан
    8 комментариев
  • Как изменить определённый элемент списка в цикле for?

    Vindicar
    @Vindicar
    RTFM!
    Потому что ты не понимаешь итерацию по списку.
    for vote in votes: означает, что переменной по имени vote поочерёдно будут присваиваться ссылки на значения элементов списка votes. ТОЧКА. Это не означает, что присвоив другое значение этой переменной, ты изменишь список. Присвоив что-то vote, ты заменишь ссылку внутри vote на другую, но и только.
    Тем не менее, если само значение является изменяемым (например, это вложенный список или словарь), то его можно по этой ссылке изменить.

    Во втором случае ты с какого-то перепугу решил, что индексы списка - это его значения. Индексы - это индексы. Числа от нуля до N-1, где N - длина списка. Так что для модификации списка нужно знать индекс элемента.
    for index in range(len(votes)):
        vote = votes[index]
        x = vote.split(',')
        votes[index] = x[0]+x[1]

    Или вот так:
    for index, vote in enumerate(votes):
        x = vote.split(',')
        votes[index] = x[0]+x[1]
    Ответ написан
    1 комментарий
  • Как составить план обучения после основ С#?

    vabka
    @vabka Куратор тега ASP.NET
    Токсичный шарпист
    Раз у тебя уже есть готовый список, то вот что можно ответить:

    Самое важное, без чего ты вообще никак не сможешь работать:
    ASP NET Core, Postgresql
    Им нужно уделить больше внимания.
    Курсы есть и по тому и по другому, есть и вполне хорошие бесплатные.
    Например у Postgrespro есть бесплатный курс (тебя должен интересовать PostgreSQL для разработчика) и книги.

    Затем то, что точно пригодится в работе, но что сравнительно быстро можно изучить:

    git - ты его не упомянул, но он очень важен. Есть бесплатная книга Pro Git где подробно описаны все его команды + есть немало видео на youtube где в действии показано, как им пользоваться.

    SOLID - можно почитать статьи и книгу "Чистая Архитектура". В любом случае от тебя не ждут знаний на уровне архитектора тут.

    Unit tests - просто попробуй сам писать тесты на каком-нибудь фреймворке. Например на xUnit.
    Ещё можешь почитать книжку Кента Бэка про разработку через тестирование.

    Code review - просто почитай пару статей о том, зачем это нужно, и как не быть мудаком-ревьюером, и как принимать обратную связь на ревью.

    Методологии разработки - просто ознакомься с теми, какие вообще есть.
    Большинство сейчас работают по Scrum или Kanban (либо на чём-то производном от них).
    Можешь ещё agile manifesto почитать
    Опять же - от тебя тут не ждут знаний уровня менеджера проектов, и тебе не придётся с нуля процесс разработки в команде выстраивать.
    Ответ написан
    1 комментарий
  • Объясните на простом примере разницу между ООП и ФП?

    Griboks
    @Griboks
    В чистом ФП будет примерно так:
    releaseSocket(releaseConnection(releaseRouter(json(get('/users',prepareRequest(createRouter(routerParams,connect(createSocket('TCP'),ip, port)))),users))))

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

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Учимся думать:
    $search   = _string($_POST['search_string']);
    $sql = '
    SELECT * 
    FROM `chat` 
    WHERE `user_id` IN (
       SELECT `id` 
       FROM `users` 
       WHERE `login` LIKE "'.$search.'%"
    ) 
    ORDER BY `time` 
    DESC '; // делаем запрос отдельной строкой,
    var_dump($sql);
    //вставив в него переменную убеждаемся что там ерунда
    
    //пишем нормально
    $search   = $_POST['search_string'].'%';
    $sql = '
    SELECT * 
    FROM `chat` 
    WHERE `user_id` IN (
       SELECT `id` 
       FROM `users` 
       WHERE `login` LIKE ?
    ) 
    ORDER BY `time` 
    DESC '; 
    $stmt = $mysqli->prepare($sql);
    $stmt->bind_param('s', $search);
    $chat_result = $stmt->execute();
    while ( $row = $chat_result->fetch_assoc() ) {
        echo $row['user_id'].'<hr>';
    }


    ps: и нет смысла делать серч через пост запрос, лучше через гет, так поисковый запрос можно например переслать или скопировать и переиспользовать.
    Ответ написан
  • Поддерживает ли PHP асинхронность на уровне ядра языка программрования?

    @rPman
    из коробки в php есть асинхронные методы работы с сокетами, метод socket_select позволяет создать event loop и вести асинхронную коммуникацию

    так же библиотека curl позволяет вести загрузку в фоновом режиме с помощью curl_multi_...

    используя штатные механизмы языка созданы библиотеки по типу ReactPHP с помощью которых можно создавать событийно-ориентированные приложения, например асинхронный websocket и http сервер в одном приложении. Если сравнивать с nodejs, где асинхронность 'из каропки' то реализация на php чуть медленнее но так каксам язык в большинстве случаев работает быстрее, в некоторых случаях код будет работать быстрее (например я писал простейший веб сервис, работающий со сжатыми gzip файлами 'построчно', так вот на nodejs было сильно медленнее, но сам event loop там быстрее)

    p.s. чтобы nodejs по скорости был сравним с php приходится осторожно выбирать какими методами пользоваться, например штатные объекты и массивы там медленнее чем класс Map
    Ответ написан
    4 комментария
  • Как проверить на совпадение в бд?

    @alexalexes
    Динамически сформировать текст и список параметров запроса, в зависимости от критериев:
    $sql = "SELECT * FROM `shop` WHERE 1=1 "; // 1=1 - классическая заглушка, чтобы можно было удобно добавлять and.
    $params = []; // заготовка под входные параметры запроса.
    if(isset($_POST['criteria_1']) && $_POST['criteria_1'] == 'on') // выбрали нечто по первому критерию
    {
    // он проверяет только имя чего-то
    $sql .= 'and `name` = :name ' // добавляем условие в текст запроса
    $params['name'] = $_POST['name']; // добавляем параметры
    }
    if(isset($_POST['criteria_2']) && $_POST['criteria_2'] == 'on') // выбрали нечто по второму критерию
    {
    // он проверяет  например, страну и город
    $sql  .= ' and `country` = :country
                 and `city` = :city ' // добавляем условие в текст запроса
    $params['country'] = $_POST['country']; // добавляем параметры
    $params['city'] = $_POST['city']; // добавляем параметры
    }
    $stmt = pdo()->prepare($sql);
    $stmt->execute($params);
    if ($stmt->rowCount() > 0) {
        flash('Этот магазин уже существует.');
        header('Location: addshop.php'); // Возврат на форму регистрации
        die; // Остановка выполнения скрипта
    }
    Ответ написан
    Комментировать
  • Как вывести массив чисел в файл?

    @akonovalov
    Программист на компьютере
    1) RTFM
    2) В Numpy есть методы для записи датасетов в txt.
    Ответ написан
    Комментировать