Задать вопрос
  • Форма забирает картинку с другой формы HTML. В чем может быть дело?

    ThunderCat
    @ThunderCat Куратор тега Веб-разработка
    {PHP, MySql, HTML, JS, CSS} developer
    // в оба обработчика формы онсубмит добавлено:
    var $inputFiles = $('.inputfile');
    // то есть ВСЕ инпуты с классом инпутфайл будут добавлены в отправляемые данные,
    //независимо от того в какой части документа они находятся
    Ответ написан
  • Почему массив $_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");
    Ответ написан
    Комментировать
  • Как сделать быструю пагинацию с сортировкой по дате?

    ThunderCat
    @ThunderCat Куратор тега MySQL
    {PHP, MySql, HTML, JS, CSS} developer
    Ответ написан
    Комментировать
  • Как сформировать sql запрос?

    ThunderCat
    @ThunderCat Куратор тега MySQL
    {PHP, MySql, HTML, JS, CSS} developer
    По уму - форматирование даты/времени отдается в яп, задача бд - хранить данные в определенном формате. Если критично сделать это именно средствами бд - используйте DATE_FORMAT, как выше отписал вам Андрей.

    Я бы выбирал SELECT `DateTimeOp` As Dateи в яп уже парсил дату в нужный формат.
    Ответ написан
    Комментировать
  • Как устранить проблему с 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 не должен содержаться, хранить либо в глобальной константе, либо в свойстве класса который работает с этим ключом.
    Ответ написан
    Комментировать
  • Почему варнинг?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Вообще налицо попытка сделать роутер, но фишка в том что роутер как раз и делается для работы с белым списком, а у вас получается роутер с правилами "щупайте все что есть и до чего достанете, мне не жалко". Не поленитесь сделать массив "белых" урлов в формате
    ['url'=>'includePath','url1'=>'includePath1','url2'=>'includePath2']
    или что то подобное. Можно даже посмотреть готовые решения и на их основе чего-то построить.
    Ответ написан
    Комментировать
  • Почему ни работает переадресция?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Тут все , включая оформление вопроса без тегов и древний как какашки мамонта код - кошмарный ужас.
    1) Прочитайте про ООП, ваша лапша просто кошмар
    2) Хотя бы смените библиотеку на mysqli, а еще лучше на PDO
    3) про MVC например почитайте

    у вас ечится ерортекст, затем скрипт пытается сделать редирект, но так как все заголовки уже отправлены и начался вывод контента, заголовок переадресации не отсылается(читайте как работает протокол хттп(с)).
    Ответ написан
    Комментировать
  • Как реализовать смену текста?

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

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    по уму что-то такое должно быть:
    class Category extends Model{
        public $table = 'category';
        public $db = false;
    // вариант DI - передаем $db в конструктор
       public function __construct($db){
          $this->db = $db;
       }
    
    //или вариант инициализации по id
       public function __construct($id=false){
          parent::__construct($id); 
    // в базовом классе модели берем $db из регистра и присваиваем $this->db
       }
    }
    
    $categories = new Collection(new Category());
    $categories = $categories->getArrayOfObjects();

    Сразу скажу что не очень жалую вариант с DI, так как либо приходится делать синглтон, либо в каждом контроллере делать новый $db(что имхо бред), либо так же совать дб в регистри и тащить его при инициализации каждого объекта. Минус второго способа - IDE "не видит" как подключен дб и интелисенс и прочие плюшки не работают.
    Ответ написан
    Комментировать