Профиль пользователя заблокирован сроком с 10 апреля 2022 г. и навсегда по причине: систематические нарушения правил сервиса
Ответы пользователя по тегу PHP
  • Как обработать ошибку mysql подключения в PHP 8.1?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Ни в коем случае не надо совершать ни одно из телодвижений, предложенных Rsa97
    Режим выброса исключений специально сделан, чтобы не писали этот говнокод из прошлого века.
    Если в коде написано if($mysqli->connect_errno) {, это означает что никакой нормальной обработки ошибок там всё равно не было. И надо просто убрать этот бесполезный мусор. Поскольку вариант с исключением в сто раз информативнее и удобнее для обработки.
    И у запросов тоже, кстати, надо поубирать всю тупизну с if($mysqli->error) или, того хуже, or die()

    Если же интересует, как в принципе обрабатывать ошибки в РНР, то это другой вопрос.
    Для локальной системы ничего менять не надо. Для боевой - включить логирование ошибок, выключить показ в браузер и в случае ошибки выводить стандартную страницу о временной недоступности сайта.

    Тот редкий случай, когда действительно требуется именно обработка ошибки соединения, а не "die('что-то пошло не так')" мы здесь не рассматриваем, поскольку к моменту, когда программисту такое может понадобиться, он уже владеет базовыми приемами программирования и вполне разберётся сам.
    Ответ написан
    Комментировать
  • Могу ли я заниматься коммерческой разработкой (backend с php) на Windows 10?

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

    Ну нет бы хоть кто-то спросил, "я вот учу это, это и это, а еще хочу вон то и то, а что ещё посоветуете?"
    Нет - все желающие вайти стройными рядами маршируют на тостер за разрешением, "а можно я не буду учить это, это и это?"
    Ну что ж вы за народ-то такой?
    Учить еще не начал, а уже боится - как бы не перетрудиться.

    Что - уже все основы выучил? Теперь на перепутье стоишь, уже идти устраиваться или линукс мучать? Какой там линукс? Базовые операторы, основы БД, отладку, обработку ошибок, разделение кода и представления, основы НТТР, основы безопасности уже выучил? Нет? Ну так надо садиться и учить то что и на винде прекрасно учится. И задавать вопросы если что-то непонятно. Для этого тостер придуман.
    А не ковырять в носу мечтательно, "все у нас хорошо, только линукса не хватает!".

    Надо меньше мечтать и больше работать. И задавать вопросы по ходу дела. Тогда станешь программистом.
    А с таким подходом дальше дивана не продвинешься.
    Ответ написан
    11 комментариев
  • Как в php вытащаить в переменную из input значение?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Идём в первый класс, садимся за парту: Где работает РНР?
    после этого садимся учить javascript и ajax
    Ответ написан
    Комментировать
  • Как можно через htaccess указать id с другими страницами?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    На этом сайте не меньше ста ответов на этот вопрос.
    Надо немного потрудиться, и постараться найти хоть один
    Ответ написан
    2 комментария
  • Не передается GET параметр с настройками htaccess?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Традиционный вопрос, что я, сцк, делаю не так?
    Почему мне гуголь выдает 100500 ответов по заголовку вопроса, а товарищу generate показывает жирную дулю во всё лицо?
    Ответ написан
  • Почему не сохраняет username в базу данных mysql?

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

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

    Причем пример кода взять из второго ответа, и писать код для работы с БД нормально, без всего этого маразма "иф стмт мюскюли препаре, иф стмт сюскюли екзекюте, самсинг вент вронг!"
    Ответ написан
    Комментировать
  • Как выполнять скрипт php в фоне?

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

    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 комментариев
  • Как словить и прочитать 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)) "выполняется"
    это как бы базовый синтакс языка

    только непонятно, при чем здесь какая-то "функция"
    Ответ написан
  • Не отправляются данные веденные из 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 комментария