Задать вопрос
Ответы пользователя по тегу PHP
  • Сохранение в базу из текстового поля в таблице?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Кошмарус максимус...
    ладно все в лапше функциями, так еще и
    1) в одной функции все в кучу - запросы, обработка, вывод...
    2) это вы в каждой функции будете создавать / закрывать соединение где надо из базы 1 запись вытащить?
    3) строка С ЗАПРОСОМ передается ПО ССЫЛКЕ, Карл!(экономим память епта!). Запрос как аргумент функции - вообще новое веяние...
    4) при этом делаем: $query = $string; ... Не, ну а чо...
    Ответ написан
    5 комментариев
  • Оптимизировать запрос MySQL. Как узнать сколько всего рядов когда использую limit?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    $GLOBALS это ваще жесть конечно... как и вставка гданных из гет в запрос(даже с какой-то обработкой), у вас же препэйреды по идее должны работать!

    $STH = $GLOBALS["mysqlcon"]->prepare("
    SELECT count(id) as count
    FROM `post` 
    WHERE MATCH (tags) 
    AGAINST ('".clearStr($_GET['search'])."' 
    IN BOOLEAN MODE)");


    UPD: вам в любом случае придется делать 2 запроса, так как количество результирующих строк разное, кроме того каунт по первичному ключу будет быстрым, а выборка скорее всего сразу закешируется после первого запроса.
    Ответ написан
  • Если я бросаю свое исключение, то я могу указывать любой код? Даже не обзятально 404, если ошибка связана с неудачей в поиске чего-либо?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Тут еще и вопрос - "ошибка связана с неудачей в поиске чего-либо" - если это какая-то выборка пустая, то никакого особого ответа не нужно, просто пишете что "ничего не найдено", код 200. Ексепшн бросаете только в случае когда допустим файл ДОЛЖЕН быть по логике приложения(например на него есть запись в бд), но физически его на сервере нет. Это уже исключение, в случае же пустого результата поиска никакого эксепшна нет, это не исключительная, а штатная ситуация.
    Ответ написан
    Комментировать
  • Как правильно писать условие с числом?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    7 == intval($attribute_group['attribute_group_id'])
    Ответ написан
  • Как защитить файлы от скачивания?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Никак, все что попало на клиент = уже есть у клиента, в самом сложном случае я просто открою консоль нетворка и скопирую сырые данные приходящие с сервера.
    Ответ написан
    2 комментария
  • Как валидировать информацию из mysql бд?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    В принципе есть всего 2 варианта, оба варианта выше написали.
    1) уникальный ключ по 2 полям
    2) Селект по этим же полям и проверка на стороне ЯП на наличие записи

    Оба варианта работать будут, однако я бы все же советовал бы использовать 2 вариант. Не смотря на то что вариант 2 имеет некоторую возможность коллизий(как верно заметил Rsa97), он не вызывает неоднозначности в выполнении, то есть он явно проверяет наличие строки, в то время как первый метод вызывает ошибку вставки по уникальному ключу на стороне БД, что гораздо сложнее обрабатывать. В целом ничего не мешает скомбинировать оба метода, тогда коллизий можно избежать, максимально ограничив количиство возможных ошибок предварительной проверкой.
    Ответ написан
  • Можно ли обойти ISSET или $_SESSION?

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

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    1) замер времени запроса
    2) замер времени рисования графиков после запроса
    3) Настройка slow query log
    4) Если дело действительно в запросах, а не скажем в модуле построения графиков - курить explain
    5) Расставить индексы на поля которые БД выбирает перебором "в лоб" группами по используемым полям
    6) если в коде(маловероятно)- тут уже сокращать и оптимизировать циклы
    Ответ написан
    Комментировать
  • Как лучше организовать код?

    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
    задача не совсем понятна, если этот набор индивидуален(будет выдаваться одному пользователю весь набор по порядку при загрузках скрипта) лучше хранить в сессии. Если это набор выдаваемый разным пользователям - любое независимое серверное хранилище: редис, мемкеш, файл, бд.
    Ответ написан
    Комментировать