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

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

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    1. Должен быть перезаписан
    2. Без разницы. Можо делать или так, или эдак. Или и так и эдак.

    Сама по себе операция какая-то бессмысленная. Не нужно хранить объекты в сессии. Можно хранить в сессии пару атрибутов, которые инжектить в объект при создании.
    Ответ написан
  • [SSH] Как подключиться к двум машинам сразу, при том что они в разных сетях?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Ничего не понял.
    Что мешает включить впн на 1, скачать файлы с 3, выключить впн и залить на 2?
    Ответ написан
    Комментировать
  • Использование функций из одного php файла, в другом?

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

    Если фунция возвращает не то, что ожидается, это значит что в нее передали неверные данные.
    Вот на данные, которые ты передаёшь, и надо смотреть.
    А не на файл, в котором функция лежит.
    Ответ написан
    Комментировать
  • While vs foreach при sql запросе?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Технически без разницы. Не нужно забивать себе голову такими вопросами.

    Практически - ни то ни другое.
    Нужно получить результат запроса в массив, с помощью mysqli_fetch_all(), и этот массив передать в другую функцию для дальнейшей обработки. Вывода например.

    Идея в том чтобы не тащить с собой базу данных по всему приложению. Соединился, получил нужные данные, передал в другой модуль сами данные, а не соединение с бд.

    Должен например модуль формирования html знать что-то про базу данных? Не должен. Его должны интересовать сами данные, а не средства работы с ними.

    Ну и разумеется, код для работы с БД не должен смешиваться с кодом вывода в браузер. Это аксиома.
    Ответ написан
    4 комментария
  • Можно ли это сделать быстрее?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Быстрее нельзя.

    Лучше можно. Зависит от определения что такое "лучше".
    Можно например изменяющиеся значения записать в массив и вывести элементы в цикле.
    Ответ написан
  • Как правильно составить запрос SQL?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Хоть и не очень элегантно, но благодаря удобству ПДО всё же и не очень громоздко,
    $params = [];
    $sql = "SELECT * FROM `brands` ";
    if (!empty($_GET['district'])) {
        $sql .= "WHERE `district` = ?";
        $params[] = $_GET['district'];
    }
    $stmt = $pdo->prepare($sql);
    $stmt->execute($params);


    Таким же образом можно добавлять и другие условия.
    Ответ написан
    Комментировать
  • Почему не сохраняются данные в БД?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Чтобы запрос всегда выполнялся, надо делать так
    1. сначала подготавлиавешь запрос, вместо всех переменных ставишь знак вопроса
    2. в bind_param пишешь столько букв s, сколько переменных, а дальше - сами переменные
    3. выполняешь запрос

    Кроме того и в тот и в дргой файл надо добавить разные нужные вещи, и выкинуть ненужные.

    Я знаю, что это трудно поначалу осилить, но тут надо выбирать - или постараться, или вообще не тратить время учебу.

    database.php взять отсюда , только название БД свое подставь

    saveOrder.php :

    <?php
    include "database.php";
    $order_number = $_GET["order_id"];
    
    $sql = "UPDATE `orders` SET `order_status`=?,`customer_surname`=?,`customer_name`=?,
    `customer_patronymic`=?,`email`=?,`phone_number`=,`second_phone_number`=?,`address`=? 
    WHERE `orders`.`order_number` =?";
    $stmt = $connection->prepare($sql);
    $stmt->bind_param("sssssssss", $_POST['orderStatus'],$_POST['customerSurname'],
        $_POST['customerName'],$_POST['customerPatronymic'],$_POST['email'],
        $_POST['phoneNumber'],$_POST['secondPhoneNumber'],$_POST['address'],$order_number
    );
    $stmt->execute();
    
    // второй запрос делаешь по тому же принципу
    header('Location: crm_order_page.php?order_id='.$order_number);
    Ответ написан
    4 комментария
  • Почему mysqli_query() получает первым параметром NULL?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Убрать строчки
    global $connection;
    function saveOrder (){
    }
    saveOrder();

    И постараться впредь не писать бессмысленные закорючечки только потому что они выглядят красиво
    Ответ написан
    Комментировать
  • Как получить данные с checkbox?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    убрать бессмысленную черточку из имени поля и написать

    $ids = array_keys($_POST['add']);
    Ответ написан
    Комментировать
  • Автозагрузка обязывает указывать namespace у всех классов?

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

    Других вариантов нет.

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

    Это какая-то белиберда на которую я даже не знаю, что ответить. Пространства имён служат для того чтобы не путаться. Про символы вообще непонятно

    Какой подход для использования spl_autoload_register из двух перечисленных является более правильным

    Второй
    Ответ написан
    3 комментария
  • Как настроить autoincrement PhpMyAdmin в Open Server?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Не в Open Server а в своем коде
    1. Вместо '' надо писать null
    2. Переменные никогда не пихать прямо в запрос, а передавать отдельно.
    3. Чтобы не тыкать пальцем в небо в оисках ошибки, надо настроить сообщения об ошибках в mysqli

    $stmt = $db->prepare("INSERT INTO `users` VALUES(null, ?,?)");
    $stmt->bid_param("ss", $login, $pass);
    $stmt->execute();


    Как настроить вывод ошибок и вообще правильно соединяться, см здесь
    Ответ написан
  • Какой оптимальный размер view?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Я так понял, что речь идет о размере страницы сайта.
    НЕТ, "2 мб и 5000 строк кода" это абсолютно ненормально.

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

    Но из чисто эмпирического опыта я бы за пару сотен килобайт максимум не вылезал.
    Ответ написан
    Комментировать
  • Можно ли отправить post или get запрос файлу с классом и передать данные определенному методу в этом классе?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    гугли роутер
    Ответ написан
    Комментировать
  • Ошибка Undefined variable: dbh и Undefined variable: dbh Call to a member function prepare() on null?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Вся проблема в том что пишешь код непонятно зачем. Пример: зачем тебе здесь функция? Для красоты?
    Сам код функции тоже написан без малейшего понимания
    if ($token == $tokenbd) {
    Что с чем ты здесь сравниваешь? И зачем? Что возвращает функция fetchAll()? Какой результат ты ожидаешь от этого сравнения? Зачем вообще сравнивать, если ты уже в запросе сравнил?

    Вот держи, в порядке баготворительности

    pdo.php

    <?php
    
    // MySQL Config
    $host = "localhost";
    $dbname = "api";
    $user = "root";
    $pass = "password";
    $charset = "utf8mb4"; // кодировку за тебя кто задавать будет? Максим Галкин?
    
    $dbh = new PDO("mysql:host=$host;dbname=$dbname;charset=$charset", $user, $pass);
    // про ошибки кто будет сообщать? Доктор комаровский?
    $dbh->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );


    сам файл

    <?php
    if ($_SERVER['REQUEST_METHOD'] == 'POST') {
        require 'pdo.php';
        $sth = $dbh->prepare("SELECT 1 FROM api WHERE token = ?");
        $sth->execute(array($token));
        $tokenOK = $sth->fetchColumn();
    
        if ($tokenOK) {
            echo(json_encode(array('response' => 1)));
        }
    }
    Ответ написан
    Комментировать
  • Как разрабатывать еще быстрее?

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

    Судя по формулировке вопроса и принятому ответу, задача - boilerplate разработка по паттернам "фигак-фигак - и в продакшен" и "отдал заказчику и забыл". В этом случае использование конструктора сайтов действительно является адекватным ответом. Рекомендую проверенное временем решение - вордпресс.

    Если же задача состоит в работе над одним крупным проектом, включая в себя поддержку существующего функционала и добавление нового, то тут ответ банален - учить ООП и фреймворки, TDD. Они как раз и придуманы для того, чтобы сделать работу программиста "творческой", позволяя сосредоточиться на алгоритмах, а не технической реализации. И также позволяя вносить правки в существующий функционал минимальными усилиями. О чем некоторые комментаторы здесь не подозревают, искренне полагая что залогом производительности является скорость нажатия на клавиши crtl-c, ctrl-v
    Ответ написан
    4 комментария
  • Почему не получается подключить autoload.php?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Учим различие между абсолютными и относительными путями

    При этом путь желательно не вписываь жестко, а достраивать от текущего файла, используя встроенную константу __DIR__
    Ответ написан
    6 комментариев
  • Какой подход для валидатора правильней?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Мне не равится ни тот ни другой подход.

    Исключение при валидации - это оксюморон.
    Исключение кидается кода функция не может выполнить свою работу. Проифнормировать о невалидности данных - это как раз функция функции валидации. Где тут исключительная ситуация?
    Вот для функции, скажем, сохранения данных, невалидные данные - это абсолютно законный повод кинуть исключение. Но для функции валидации - ни в коем случае.
    Функция проверки уникальности введенного логина не должна кидать исключение, если логин не уникальный.
    Исключение она должна кидать если БД недоступна.

    Но передача значения в параметр по ссылке - это как бы тоже адов кстыль, такая же архитектурная затычка, как global.
    Я бы архитектурно использовал первый подход, но добавил метод для получения текста ошибок.
    Ответ написан
    1 комментарий
  • Как перебрать 2 массива?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Так и не осилил свой аккордеон?
    Я ж тебе всё разжевал

    Массив один, два foreach-а
    там дел на 15 минут
    Ответ написан