Ответы пользователя по тегу PHP
  • Как лучше организовать код?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Во первых - ООП, иначе нет смысла заморачиваться с крупным проектом, да и функциональный подход сегодня вообще в проектах больше чем "свой микроблог" никто не использует, это не рационально.
    Так же откройте для себя MVC и возьмите какой-то фреймворк в котором все это уже нормально реализовано, в итоге время потраченное на прочтение документации и написание контроллеров и моделей к проекту будет в разы меньше чем вы потратите на свое кошмарное велосипедостроение. Кроме того, построенный по вашим наброскам Титаник и показать то кому-либо будет стыдно, а знания любого современного фреймворка напротив - будет большим плюсом.
    Удалив модуль и БД мы повлияем на работу других модулей. Изменив структуру БД мы повлияем на работу других модулей.
    SOLID, DRY, KISS...PSR4 и много других страшных аббривиатур вам помогут )
    Ответ написан
    8 комментариев
  • Как передать объект БД в класс?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Классический DI
    class App{
      protected $db;
      public function __construct($db){
        $this->db = $db;
      }
    }
    Ответ написан
    7 комментариев
  • Как при записи в файл пропускать повторяющее значение?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    $data = file("file.txt");
    $uniq = array_unique($data);
    file_put_contents("newfile.txt",implode("\n",$uniq));
    Ответ написан
  • Как обновлять базу по расписанию из базы?

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

    Логично при выводе / выборке в определенный период выводить заранее прописанную скидку, а в остальное время игнорировать ее.
    Ответ написан
  • Стоить ли так делать? Или все таки нет?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    код вполне юзабелен, не шедевр, но работать будет, хотя имхо слишком узкоспециализирован.
    Кроме того - логичнее не строить клин вложенных проверок, а создавать "отсечения", типа:
    public function dbGetRecordsToTableByColumn($table, $column, $value) 
      {
        if (empty($table)  || empty($column) || empty($value)) return [];
        if (!$this->searchTableToArray($table)) return [];
        if (!$this->searchColumnToArray($column, $table)) return [];
        return $this->db->row("SELECT * FROM `{$table}` WHERE `{$column}` = :{$column} ORDER BY `id` DESC", [ 
           $column => $value
         ]);
      }
    Ответ написан
    3 комментария
  • Редирект в зависимости от страны?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    если именно страна - geoIP
    если достаточно язык браузера - $_SERVER['HTTP_ACCEPT_LANGUAGE']
    Ответ написан
    3 комментария
  • Как перед отправкой GET сверить данные из БД?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Шэдевр ) елс без ифа - новый тренд )
    $id = $_GET['id'];
    $posts = R::load('posts', $id);
    
    R::trash($posts);
    
    echo 'udalos';
    else { echo 'ne udalos'; }


    Не получается
    у девочек на корбке механике "не получается", что конкретно происходит? Ошибки, результаты?
    Ответ написан
  • Как выдать 404 при несуществующем url при чпу?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    даже если без мвц, если вы хотите обрабатывать пути по каким-то правилам - логично где то иметь список этих правил. У вас же тупо берется все что приходит от клиента и фигачится в запрос. Расписывать что такое роутинг и как реализовать логику маршрутизации некогда, просто почитайте про эти понятия, много времени это не должно занять.
    Ответ написан
    Комментировать
  • Почему массив $_FILES пуст?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    $('#upload-image').on('submit',(function(e) {
                    e.preventDefault();
                    var formData = new FormData();
                    formData.append('image',$('#image')[0].files[0]); 
                    $.ajax({
                            type:'POST',
                            url: './modules/image-update-handler.php',
                            data: formData,
                            cache:false,
                            contentType: false,
                            processData: false,
                            success:function(data){console.log('success');},
                            error:function(data){console.log('error');}
                    });
            }));
    Ответ написан
    2 комментария
  • Как вывести добавленный комментарий из БД с помощью AJAX?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    на бэкэнде:
    //тут код который добавит комментарий, а далее
    $sqlComm = 'SELECT comments.id, comments.author_id, comments.date, comments.text,
            comments.post_id, users.name FROM comments
            JOIN posts ON posts.id = comments.post_id
            JOIN users ON users.id = comments.author_id
            WHERE posts.id = ' .  $_GET['id'] .
            ' ORDER BY comments.date DESC';
    $comments = $db->query($sqlComm);
    
    foreach ($comments as $comment) : ?>
                <div class="comments">
                    <div class="row comtext">
    
                        <div class="comname">
                            <?=$comment['name'];?>
                            <br>
                            <?=formatTime($comment['date']);?>
                        </div>
    
                        <div class="comtent">
                            <?=$comment['text'];?>
                        </div>
    
                        <div class="delete">
                            <button class="btn btn-sm btn-outline-light"  id="<?=$comment['id']?>">Удалить</button>
                        </div>
    
                    </div>
                </div>
                <? endforeach;?>


    на форнте:
    // кусок который аякс с отправкой коммента
    .done(function (data) {
    $('#comments_box').html(data); // здесь comments_box - ид врапера коментариев
    })
    Ответ написан
  • Как передать в js файл данные которые должны быть доступны только если ты админ?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    В приведенном примере у вас какой-то неверный подход, получается что если пользователь каким-то образом может получить 3 ключ, то может выполнять какие-то действия доступные админу. Это называется security through obscurity - защищенность через неизвестность(алгоритма работы), и является большой потенциальной дырой.

    В вашем случае данные пришедшие с клиента просто должны проходить через фильтр (что является обязательным в любом случае) + на каждое действие с объектами для которых нужны права админа проверять если таковые права есть, и уже исходя из этого прерывать работу или продолжать обработку.

    UPD: если ОЧЕНЬ нужно выводить в js какую-то строчку для админа, то перед загрузкой скрипта вашего аякс запроса добавьте:
    <script>
    <?php if($adminLogged){ ?>
    let val3 = $someSecretValue;
    <?php } else{?>
    let val3 = false;
    <?php } 
    </script>
    Ответ написан
  • Как лучше сделать такой метод выбора значения из массива?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    задача не совсем понятна, если этот набор индивидуален(будет выдаваться одному пользователю весь набор по порядку при загрузках скрипта) лучше хранить в сессии. Если это набор выдаваемый разным пользователям - любое независимое серверное хранилище: редис, мемкеш, файл, бд.
    Ответ написан
    Комментировать
  • Как исправить кодировку данных, полученных в PHP из JS через AJAX?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    1) php.ini - default_charset = "UTF-8"
    2) mb_internal_encoding("UTF-8");
    Ответ написан
    Комментировать
  • Как устранить проблему с preg_replace_callback?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    первая ссылка в гугле

    UPD:
    $tpl->copy_template = preg_replace_callback( "'\\[prev-link\\](.*?)\\[/prev-link\\]'is", 
    function($matches){
    foreach($matches as $match){
    return faq_get_cstart({$arr_pages['previous']}, $match)
    }
    }, 
    $tpl->copy_template );

    В зависимости от области видимости может понадобиться проброс некоторых переменных, писалось без проверки, возможно надо будет обработать напильником.
    Ответ написан
  • Роутинг на PHP?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    mvc?

    class AdminController extends BaseController{
        
        public function __construct(){
            parent::__construct();
        }
    
        public function editAction(){
            doSomeEdit();
            $this->view->renderView();
        }
    }


    BTW: что за тег сетевая маршрутизация в вопросе???
    Ответ написан
    Комментировать
  • Почему не загружается файл на сервер?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    1) отключить ваши проверки
    MAX_FILE_SIZE, указанное в HTML-форме
    и проверить идет ли загрузка

    2) проверить в каких единицах у вас
    указанно значение в разы больше
    (должно быть в байтах)

    3) в целом это тупая древняя проверка, которую никто в здравом уме все равно применять не будет, ибо предупреждения перед отправкой оно не дает, а после отправки уже нафиг не нужно, проще(и правильнее) рулить файлсайзом на сервере.
    Ответ написан
    2 комментария
  • Можно ли средствами PHP, HTML, CSS создать аналог ВК (исключительно для тренировки)?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    vk написан на слегка допиленном php. Да, можно, но без понятия архитектуры приложения / нормализации/денормализации данных и прочих вещей которые нужно знать опытному разработчику будет а) сложно, б) криво.
    Ответ написан
    Комментировать
  • Как преобразовать json в массив?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    я вам тут комменты напишу, а вы уже чуть сами головой подумайте:
    <?php
    // для начала посмотреть в доках ЧТО возвращает file_put_contents, 
    // после этого будет понятно почему в строчке ниже бред
    $postdata = (array) file_put_contents('file.txt', file_get_contents('php://input')); , FILE_APPEND);
    // если исправить бред сверху, то сначала нужно будет прочитать файл, декодировать в массив из json
    // и тогда уже можно будет что-то там проверять
           // если есть нужные нам поля
    // здесь уже используется другая переменная, $postData вместо $postdata, в этом коде это вообще 
    // не важно, так как в $postdata все равно ничего толкового не попало.
    foreach ($postData as $value){
    // по вашему комментарию вроде нужно что-то проверять, однако у вас тупо 
    // пишется в конец файла значение из массива без каких-либо разделителей
    // (теоретически, на самом деле скрипт сейчас сюда не доходит)
      file_put_contents('file.txt', $value , FILE_APPEND);
    // тут вообще закрывающая } отсутствует.
    ?>
    Ответ написан
    Комментировать
  • Как передать значение в input?

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

    Если это ключ вашего приложения - обычно он не светится пользователю и соответственно ни в каком $_POST не должен содержаться, хранить либо в глобальной константе, либо в свойстве класса который работает с этим ключом.
    Ответ написан
    Комментировать