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

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Самое время познакомиться с темной стороной программирования.
    Начинающие вайтишники искренне думают, что программист - это типа такой художник. Берет мольберт, поллитру, кисти и начинает ВАЯТЬ. Потом отходит на шаг, любуется делом рук своих, и снова. Ваять. А потом сразу заказчику, за большие деньги.

    Так вот, в реальности это всё не так.
    Большую часть времени программист не пишет код.
    А пытается разобраться, почему он не работает.

    Так что мы будем сейчас учиться это делать.
    Тем более, что это в принципе несложно.
    Главное не думать, что чем-то поможет сидеть и тупить в свой кодик. И приглашать других людей потупить в него тоже бессмысленно. Потому что причина может быть совсем не в нем. но даже если проблема и в коде, то искать её всё равно надо по-другому.
    В код не надо тупить. Его надо ЗАПУСКАТЬ.
    И выводить промежуточные результаты. Проверять его работу.
    Заранее выяснить, какие должны быть значения у переменных, и проверять их на каждом этапе.
    Где не совпадут - там и проблема.
    В идеале IDE сама покажет содержание всех переменных при трассировке, но если пишешь код в блокнотике, то даже тупо писать var_dump($bar1,$var2,$var3...); и смотреть что там лежит.
    Условия проверять еще проще, тупо echo 'зашли в условие if (!empty($user))';
    И если лежит не то, или эхо не выводится - вот тогда уже смотреть в код и думать, почему так получилось.

    В частности, при авторизации надо проверить две вещи:
    1. Находится ли юзер по логину
    2. если находится, то проверить корректность хэша. Для этого при регистрации надо вывести полученный через password_hash пароль и записать на бумажке
    потом запросить сохраненный из БД и сравнить

    Кроме того
    Разумеется, отладка невозможна без сообщений об ошибках.
    В половине случаев РНР человеческим голосом сообщает в чем проблема.
    Поэтому всегда, в любом окружении должно стоять error_reporting(E_ALL);
    плюс на домашнем компике полезно прописать ini_set('display_errors', 1); чтобы сразу видеть ошибки на экране.
    На боевом сервере разумеется поставить 0 вместо 1, и добавить ini_set('log_errors', 1);

    У меня только один вопрос.
    Какой смысл вообще делать парольную защиту, если любой придурок сможет спокойно авторизоваться через SQL инъекцию?
    Ответ написан
    9 комментариев
  • Верно ли решены задачи на текущую дату, извлечение данных (базовые знания SQL)?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    в первом явно не учитываются выходные и праздники, второй "запрос" я вообще не понял.

    sql-ex.ru вполне жив и помирать не собирается.
    Настоятельно рекомендую не только их задачки но и учебный курс.
    чтобы не писать такую откровенную белиберду, а производить SQL, который хотя бы отдаленно решает поставленную задачу.
    Ответ написан
    Комментировать
  • Как поправить mysql запрос?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Пишу сайты для Людей. Не быстро. Дорого. Качественно.

    "КАЧЕСТВЕННО", Карл!
    Этот человек пишет сайты качественно.
    Вот это вот называется у нас "качественно". Добро пожаловать в новую вайти реальность.

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

    И еще и имеет наглость брать за это деньги.
    Неплохой бизнес, с одних лохов взять денег за работу, а потом к другим с протянутой рукой: "поможите люди добрые, мы сами не местные, у меня не так много опыта... Напишите мне код забесплатно"
    Ответ написан
  • Целесообразно ли хранить изображения как BLOB в БД?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Ну то есть логика этого вопроса в том, что по какой-то причине файл с БД забэкапить затруднительно, а вот картинки, которые лежат в этом файле - наоборот
    Так же и "стороннее средство" в виде команды copy ну вообще ни с чем несовместимо, а создание/разворачивание "дампа" специфическими для БД средствыми доступно на каждом углу.
    Не говоря уже про доступ к этим картинкам сторонними средствами.

    Все-таки анекдот про Вовочку, "Где логика, где разум?" должен быть девизом этого сайта.
    Ответ написан
  • Как можно увеличить скорость записи в бд mysql?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Мария Турова, а зачем ты это всё писал?
    Ответ написан
    Комментировать
  • Как словить и прочитать http запрос?

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

    Попробуйте раз в жизни воспользоваться поиском.
    Ответ написан
    2 комментария
  • Как узнать какие файлы были загружены во время выполнения php скрипта (incluide/require/*_once)?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Когда я вижу такие вопросы от аккаунта с подписью "Заказывайте программинг" мне становится страшно за будущее планеты.
    И дело даже не в том что в РНР есть готовая функция, которая делает ровно то что написано в заголовке.
    А в том что это вот колупание в песочнице- это явно попытка изобрести отладчик из гуана и палок. Поскольку то ли по бедности, то ли по невежеству, но про современные IDE со встроенными отладчиками автор не в курсе.
    Ответ написан
    1 комментарий
  • Как переписать подключение к базе данных, по принципам ООП?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Никак.
    Это не стёб и не троллинг. Это единственный возможный ответ на этот хороший, в сущности, вопрос.

    ООП - это не картина, которую купил и на стенку повесил, для красоты.
    Это инструмент для решения какой-либо задачи.
    Если задачи нет, то и ООП применять не следует.

    в данном случае перед ООП надо выучить куда более базовые вещи.
    Например научиться применять готовые классы, такие как mysqli
    узнать почему за использование @ программистам в аду льют кипяток на самые нежные части тела
    выучить что exit('Ошибка подключения'); - это говнокод
    ну и открыть для себя разделение логики работы с данными и логики отображения. То есть сначала получить все данные, а потом только выводить.

    Эту страницу можно переписать в соответствии с принципами аккуратного кода

    Сначала сделать файл config.php.
    Этот файл можно будет исключить из системы контроля версий и таким образом иметь на каждом сервере свой

    <?php
    return [
        'db' => [
            'host' => '127.0.0.1',
            'port' => 3306,
            'db'   => 'pizza',
            'user' => 'root',
            'pass' => '',
            'charset' => 'utf8mb4',
        ]
    ];

    потом сделать файл mysqli.php
    Этот файл можно будет включать во все скрипты, которым нужно соединение с БД
    <?php
    mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
    $db = new mysqli(
        $config['db']['host'], 
        $config['db']['user'], 
        $config['db']['pass'], 
        $config['db']['db'], 
        $config['db']['port']
    );
    $db->set_charset($config['db']['charset']);
    $db->options(MYSQLI_OPT_INT_AND_FLOAT_NATIVE, 1);


    Потом сделать страницу pizza.tpl.php в которую поместить весь HTML
    .
                <select id="single" class="form-control" name = '1234' >
                    <option value="" disabled selected style='display:none;'>выберите тип</option>
                    <?php foreach($types as $object): ?>
                        <option value ="<?=$object['id']?>"><?=$object['name']?></option>
                     <?php endforeach ?>
                </select>


    И потом сделать страницу pizza.php на которой собрать это всё вместе
    <?php
    $config = require 'config.php';
    require 'mysqli.php';
    
    $sql="SELECT * FROM pizza";
    $types=$db->query($sql)->fetch_all(MYSQLI_ASSOC);
    
    include 'pizza.tpl.php';


    После этого можно будет потихоньку приглядываться к ООП.
    Например сделать класс pizzaModel
    Но делать его будет иметь смысл только тогда, когда мы будем знать, какие еще действия с пиццей будет производить этот код
    Ответ написан
    5 комментариев
  • Почему значение даты на php записывается задом на перёд, какие исторический предпосылки обусловили этот феномен?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Записывать дату в РНР можно практически в любом формате. Хоть 12/12/12
    А вот сравнивать значения можно только тогда, когда старшие разряды идут впереди младших. В частности, строки, содержащие дату, можно сравнивать и сортировать только в формате "задом наперёд". Что делает её очень удобной. Например при именовании папочек с фоточками на домашнем компе

    Ну и как правильно отмечено выше, здесь ничего не записывается, а просто выводится. То есть вопрос к тому, кто выводит.
    Ответ написан
    Комментировать
  • Почему не выполняется оператор "if"?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    если in_array($server, $changed) возвращает 1, то if(in_array($server, $changed)) "выполняется"
    это как бы базовый синтакс языка

    только непонятно, при чем здесь какая-то "функция"
    Ответ написан
  • Почему много HTTP запросов - это плохо?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Тебе когда надо достать из холодильника 5 бутылок пива, что проще - открыть холодильник, взять 5 бутылок пива и закрыть холодильник, или открыть холодильник, взять бутылку, закрыть холодильник, открыть холодильник, взять бутылку, закрыть холодильник, открыть холодильник, взять бутылку, закрыть холодильник, открыть холодильник, взять бутылку, закрыть холодильник, открыть холодильник, взять бутылку, закрыть холодильник?
    Ответ написан
  • Как спроектировать базу для приложения заметочника?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    - не станет ли всё это дело тормозить? - не станет
    - нужно ли разносить информацию по разным таблицам? - нужно. Плюс таблицы-связки, "заметка-раздел", "заметка-тег". Но сначала надо определиться, чем отличается раздел от категории.
    - Как максимально задействовать localStorage? - никак
    Ответ написан
    Комментировать
  • Не отправляются данные веденные из input в бд (Mysql, PHP)?

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

    - print "Ошибка!: " . $e->getMessage() писал дебил, потому что специально выводить ошибки не нужно - РНР и так выведет ошибку, если его об этом попросить.
    - try {} catch (PDOException $e) { писал дважды дебил, потому что ПДО будет кидать исключения только если ему об этом сказать при соединении. А дебил об этом не сказал
    - try {} catch (PDOException $e) { писал трижды дебил, потому что см. выше. Не нужно ловить ошибку, чтобы её вывести.
    - VALUES ('{$name}', '{$surname}', '{$age}', '{$email}', '{$phone}', '{$index}'"); - а вот это уже, я думаю, не руководство, а самодеятельность автора кода. Даже в дебильном руководстве такое вряд ли можно увидеть.
    - enter' => $submit - это уже тоже автор кода, от излишнего усердия и ПОЛНОГО не понимания своих действий
    - ну и да, почему-то в списке полей id_user есть, а в VALUES внезапно нету. "Где логика, где разум?" (с)

    В общем учимся работать с БД в РНР заново
    .
    // Параметры для подключения
    $db_host = "localhost";
    $db_user = "root"; // Логин БД
    $db_password = "root"; // Пароль БД
    $db_base = 'test'; // Имя БД
    $db_encoding = "utf8mb4" // кодировка 
    
    // Подключение к базе данных
    $db = new PDO("mysql:host=$db_host;dbname=$db_base;charset=$db_encoding", $db_user, $db_password);
    // Просим ПДО сообщать об ошибках
    $db->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
    
    // Собираем данные для запроса
    $data = array( 'name' => $name, 'surname' => $surname, 'age' => $age, 'email' => $email, 'phone' => $phone, 'index' => $index);
    // Подготавливаем SQL-запрос
    $query = $db->prepare("INSERT INTO `users`(`user_name`, `user_surname`, `user_age`, `user_email`, `user_phone`, `user_index`) 
                         VALUES (:name, :surname, :age, :email, :phone, :index)");
    // Выполняем запрос с данными
    $query->execute($data);


    Хотя бы так
    Ответ написан
    6 комментариев
  • Как объединить результат foreach и разделить запятыми?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    $result = '';
    foreach($val['tags'] as $tags) {
        $result .= ($result ? "," : "" ) . $tags['value'];
    }
    Ответ написан
    Комментировать
  • Как расширит диапазон используемых функций в php?

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

    Во-вторых, встроенные функции - это вообще какая-то ерунда. Используется раз в неделю. Куда важнее умеешь ли ты пользоваться библиотеками. Вот где эрудиция-то проявляется. Сидишь ли на коленке колупаешь CURLOPT или используешь гузлю. mail или phpmailer. И так далее.
    Как в анекдоте - ты уже не сам анекдот рассказываешь, а только номер называешь.

    В-третьих, опять же, код мы пишем не на голом пхп, а с использованием своих моделей, фреймворка, тех же библиотек. То есть в современном коде редко можно встретить голую функцию пхп.
    То есть это просто другой уровень. зачем тебе mb_strlen и mb_substr чтобы обрезать текст по заданной длине, если у тебя уже есть готовая функция, которая это делает?

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

    Но если для общей эрудиции, если совсем словарный запас совсем мизерный, можно на ночь читать списки функций для работы со строками и массивами.
    Ответ написан
    4 комментария
  • Открывается директория а не сайт, как пофиксить??

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

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    В ужасе выкинуть таблицу, в которой поле может иметь вид 1,2,3,5,15 и потом еще полчаса тошнить в унитаз от омерзения.
    Купить букварь по базам данных
    Прочитать в нем такое слово как "реляционная база данных"
    Сделать нормальную таблицу, в которой 1,2,3,5,15 будет не в одной строке, а в ПЯТИ
    Дальше всё как и было
    Ответ написан
    6 комментариев