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

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

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Хороший вопрос, кстати. Сначала ответим на вопрос из заголовка

    file_put_contents($filemame, $somecontent, FILE_APPEND);


    ВСЁ. Это весь код, который нужен, чтобы записать в файл. Одна единственная строчка, без всех этих танцев с саблями.

    А по поводу кода из мануала - это чудовищный, идиотский рудимент из прошлого века, который остался в мануале по недосмотру. Так писать нельзя. Не нужно писать проверки на каждый чих - пхп сам прекрасно сообщит об ошибке. Не нужно заменять четкое и однозначное сообщение об ошибке изложением в свободной форме. И тем более не надо вываливать эти изложения на пользователя сайта. Ему совершенно не интересно читать что у тебя какой то файл не прочитался
    Ответ написан
    3 комментария
  • Выгрузка картинки из базы mysql?

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

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Три простых шага для решения данной проблемы:

    1. Посмотреть на календарь и уточнить, какой сейчас век на дворе.
    2. Аккуратно выделить этот код, и нажать клавишу Del
    3. Скачать phpmailer
    4. Забыть все эти кустарные ковыряния как страшный сон.

    В итоге код должен получиться примерно таким:

    require 'PHPMailerAutoload.php';
        $mail = new PHPMailer;
        $mail->setFrom('from@example.com', 'First Last');
        $mail->addAddress('whoto@example.com', 'John Doe');
        $mail->Subject = 'PHPMailer file sender';
        $mail->msgHTML("My message body");
            // Attach uploaded files
        $mail->addAttachment($filename1);
        $mail->addAttachment($filename2);
        $mail->send();

    следует понимать, что отправка почты - это не просто копирование в свой скрипт каких-то определенных сочетаний символов, которые случайно сработали в прошлом веке у автора какой-либо допотопной статьи. Это гораздо более сложный процесс, который включает множество нюансов. И поэтому отправку почты надо не лепить вручную на ходу из навоза и палок, а доверить проверенному и отлаженному решению.
    Ответ написан
    1 комментарий
  • Как можно заставить обрабатывать HTML теги в языковых файлах?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Надо включить логику и использовать языковую поддержку для перевода, а не для вывода HTML, JS или canvas

    $lang['use_top_up_cards']       = 'Оплатить с препей карты';
    $lang['available_sum']       = 'Доступная сумма:';
    $lang['pre_deposit']        = 'Оплатить с депозита';
    return $lang;

    В шаблоне
    {$Think.lang.use_top_up_cards}<br><span class="fl ml30">{$Think.lang.available_sum}</span>
    {$Think.lang.pre_deposit}<br><span class="fl ml30">{$Think.lang.available_sum}</span>
    Ответ написан
    Комментировать
  • Нужно ли обрабатывать фатальные ошибки в PHP?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Ответ на этот вопрос очень простой.
    Сначала надо ответить себе на вопрос, что значит "обрабатывать". Что конкретно ты имеешь ввиду под этим словом. Какие конкретно действия, какой код.
    Как только ты себе на него ответишь - тут же станет очевидным и ответ на вопрос - нужно ли.

    ЗЫ: https://phpdelusions.net/articles/error_reporting#fatal
    Ответ написан
    Комментировать
  • Как спроектировать фреймворк?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Ответ написан
    Комментировать
  • Как обработать ассоциативный массив PHP и внести изменение в БД?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    учить тут надо SQL, поскольку в РНР все стандартно

    $sql = "UPDATE `list` SET `count`=greatest(count-?,0)  WHERE `id`=?";
    $stmt = $conn->prepare($sql);
    foreach($cart as $value ) {
        $stmt->bind_param("ss", $value['id'], $value['count']);
        $stmt->execute();
    }
    Ответ написан
    Комментировать
  • Как передать нужный путь к файлам на другую страницу?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Функция, конечно, ад.
    Как и ответы, которые здесь настрочат местные помогайки.

    Первое, о чем тебе надо позаботиться - это безопасность
    Чтбы не вываливать наружу содержимое любой папки на диске.
    Поэтому "как передать" зависит от того, какая структура папок
    Если совсем сложная, то ссылки на голереи хранить в БД, передавать id записи в таблице. а в cats.php доставать ссылку из базы.
    Если БД нету и это для тебя ну совсем неподъемно сложно, то передавать прямо ссылку и как-то её валидировать

    Например если главных категорий не очень много, и вложенность всегда 2

    $sections = ['tentacles','yaoi','yuri'];
    
    $parts = explode("/", $dir);
    $dir = "../img/$dir/"
    if (count($parts) <> 2 || !in_array($parts[0], $sections, true) || !is_dir($dir)) {
        return [];
    }
    и дальше уже лепить свой скандир

    в общем лучше по базе
    Ответ написан
    Комментировать
  • Как правильно написать запрос в бд?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    В вордпрессе лучше использовать его собственную пепяку, wpdb
    Но если прям так хочется собстенное соединение с БД, то при коннекте надо сказать mysqli чтобы оно сообщало тебе об ошибках, вот этой строчкой
    mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);

    и после этого РНР тебе напишет, какая проблема у тебя в запросе.
    Ответ написан
    1 комментарий
  • Как вставить assembler код в программу на php?

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

    В общем вопрос из той серии что про FFI рассказывать явно ни малейшего смысла
    Ответ написан
    9 комментариев
  • Как переделать форму прикрепления файла?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Комментировать
  • Кто знает хорошие уроки про PHP,MVC?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Ответ написан
    Комментировать
  • Как в php 7.4 проверить является ли строка json?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Нет. Это занятие само по себе бессмысленное потому что нормальная программа всегда точно знает - с джейсоном она работает или нет, и поэтому никаких "специальных функций" нормальным программистам не нужно.
    Ответ написан
    3 комментария
  • Почему php не может подключиться к БД?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Чтобы узнать, почему не работает соединение или запрос, надо настроить РНР так чтобы он отображал ошибки, а mydsqli - чтобы оно бросало исключения.
    То есть код должен выглядеть вот так

    <?php
    // видеть все ошибки!
    ini_set('display_errors',1);
    error_reporting(E_ALL);
     // подключаем настройки
    require_once 'connect.php';
    
    // включаем режим информирования об ошибках
    mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
    // подключаемся к серверу
    $link = mysqli_connect($host, $user, $password, $database);
    // не забываем установить кодировку, чтобы не было ошибок с кракозябрами
    $mysqli->set_charset('utf8mb4');
       
    // выполняем операции с базой данных
    $query ="SELECT * FROM foo";
    $result = mysqli_query($link, $query);
    // дальше делаем что нужно
    
    // и кстати, в большинстве случаев закрывать подключение не надо


    ЗЫ. На боевом сервере ошибки на экран выводить конечно не стоит, а их надо писать в лог (собственно, именно поэтому все эти die - это ужас). И на боевом сервере display_errors надо отключать, а log_errors наоборот - подключать.
    Если совсем не можешь найти, где у сервера висит лог ошибок, можешь задать свой собственный, с помощью функции ini_set('error_log','/путь/к/файлу');. Но только размещать его надо разумеется в папке недоступной пользователям сайта


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

    Если разобраться, то код or die("Ошибка1 " . mysqli_error($link)); очень смешной (это не к тебе претензия, никто не ожидает от тебя понимания таких тонкостей, которые не то что новички, а половина здешних "кураторов" не понимают).
    Что тут происходит?
    слово or die (которое на самом деле вообще нельзя никогда писать) пишут тогда, когда ожидают что в переменной $link будет значение false. Но если в $link будет false, то тогда её бессмысленно подставлять в mysqli_error. Именно поэтому для получения ошибки соединения в мускули есть отдельная специальная функция.

    Но как я говорил выше, применять её не следует, как и or die.
    Ответ написан
    2 комментария
  • Чем отличается этот синаксис?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Хороший вопрос.

    Этот кот будет работать только в 5 версии.
    В 7 версии в РНР появился uniform variable syntax.
    Он унифицировал обращения к любым типам переменных - объектам, функциям, массивам - так что их стало возможно приписывать друг к другу в любом порядке, $foo()['bar']()->baz.
    Но при этом, очевидно, понадобилось ввести правило очередности исполнения. Самое простое - слева направо.

    То есть что в итоге мы получаем? Сначала пхп читает $post->$attrs_arr и ждет что в $attrs_arr будет строка. Но там получается массив, и РНР начинает орать тебе об этом. но ты зачем-то выключил отображение ошибок, и ничего не видишь. Так делать нельзя. Если бы ты увидел ошибку, то мог бы при некотором минимальном навыке гугления найти решение самостоятельно. Хотя конечно зумеры, в отличие от нас старых пердунов, родившихся когда интернета ещё не было, на удивление с трудом представляют себе что такое поиск в интернете.

    Ну а решение простое - заключить переменное свойство в фигурные скобки, чтобы ПХП сначала получил элемент массива, а потом уже поставлял его в качестве имени свойства
    Ответ написан
    8 комментариев
  • Почему не записывает значение в БД?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    ё моё, ну нормальный почти у тебя код был
    оставь все как было только запрос поменяй
    $dsn = "mysql:host=$host;dbname=$db;charset=$charset";
    $opt = [
        PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,
        PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
        PDO::ATTR_EMULATE_PREPARES   => false,
    ];
    $pdo = new PDO($dsn, $user, $pass, $opt);
    
    $query = 'INSERT INTO `configs` (`CName`, `Username`, `Time`) VALUES (?,?,?)';
    $stmt->$pdo->prepare($query);
    $stmt->execute([$CName,$Username, $Time]);
    $id = $pdo->lastInsertId();
    Ответ написан
  • Какую книгу посоветуете по PHP?

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

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    НИКАК не делать.
    Либо тебе вообще не нужна эта функция, и тогда ее не использовать, либо, если нужна, то оставить скобки в покое и найти себе проблему поумнее.
    Ответ написан
    Комментировать
  • Чем заменить ReadBeanPHP?

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

    Поэтому в качестве прививки от говнокода я порекомендую сначала
    - учить устройство БД. Создавать все свои схемы руками
    - учить SQL. Писать все свои запросы руками
    - освоить работу с БД из РНР на базовом уровне, через нативный ПДО.

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