Задать вопрос
  • Как вывести нужную строку (оператор LIKE)?

    logpol32
    @logpol32 Автор вопроса
    FanatPHP
    это было видно на примере шаблонизатора

    Нормально вроде сделал. В меру своих сил.

    static function GetTemplateCode($templateFileName, $templateArgumentsArray) {
    $templateFullPath=$_SERVER['DOCUMENT_ROOT'].'/templates/'.$templateFileName;
    ob_start();
    include $templateFullPath;
    return ob_get_clean();
    }


    прикрыть желание сделать по-своему

    Ох уж эти разработчики, любят помучаться. Нет бы делать как надо, достигать гарантированного результата, получать хорошие зп, создавать софт без багов. Нет - им надо всё по своему.
    А потом править баги, выпуская патч каждую неделю.
    Что с ними делать...

    Книжки надо читать. Пишут им книжки каждый год, а они не читают. А им всё пишут.
    Этот автор напишет, другой. Уже куча книг по одной теме - а нет, всё задают вопросы в интернете.
    Ленивые...

    Никто не любит "плавать в нечистотах", особенно умные люди.
    Но IT быстро развивается и единого подхода (делать как нормальные люди) тут нет. Иначе откуда было бы столько легаси кода? Образования нормального нет - Гоша дударь про PHP такого расскажет.
    Можно посмотреть курсы PHP Специалист Баумана - лучше, но...ООП в PHP, пространство имен PRS стандарт...по сравнению с C# и его идеологией (Шевчук - эксперт Майкрософт хорошо объясняет суть и идею ООП) мягко говоря не очень.

    Я не вижу единого подхода к разработке. Все пишут как могут.
    Я пишу так. И вообще есть планы перейти с PHPшного ООП назад на функциональное в силу отсутствия нормальной поддержки ООП, в силу того, что экземпляр класса хранится в памяти только от начала до окончания выполнения скрипта. Это не десктоп - процесс висящий в памяти, это выполнилось и все.
    И unset часто не надо - всё скрипт завершен. Другой подход.
    И как следствие куча статики и написания ООП в процедурном стиле. Такое ООП нам не нужно )

    хранение данных в БД никак не отражается на коде

    Код работает с БД. Они связаны. В идеале не должно отражаться - нет никакой разницы чем и как обрабатывать БД. На практике есть - писать одну строчку кода или 10.
    Либо пишем код под БД, либо БД проектируем под код.
  • Как вывести нужную строку (оператор LIKE)?

    logpol32
    @logpol32 Автор вопроса
    Спасибо, потестирую.

    Этот запрос понятен.
    SELECT * FROM `table` WHERE (`users_id` LIKE '28,%' OR `users_id` LIKE '%,28,%' OR `users_id` LIKE '%,28')


    А вот тут не очень понятна логика
    SELECT * FROM `table` WHERE FIND_IN_SET('28', `users_id`) > 0

    FIND_IN_SET должна вернуть позицию строки с содержимым 28 между запятыми.
    Но это работает (что хорошо) и без запятых.
    Работает и с 28 и с 28, и с ,28,
    Не работает c 282 и 1, 282 и 228,1
    То есть прямо то что мне надо. Функция понимает, что мне надо именно 28, а не 228 и т.д.
  • Как вывести нужную строку (оператор LIKE)?

    logpol32
    @logpol32 Автор вопроса
    FanatPHP,
    а на деле

    на деле вам скажут 1 пользователь 1 строка с инфой.
    Какой запрос вы напишите?
    А потом скажут а давайте много пользователей и 1 строка с инфой.
    А там уже куча логики завязана.
    Будете переписывать?
    А завтра будут новые хотелки...т.е. бизнес требования.
    Вот отсюда и идут финты ушами. А не от нежелания делать всё как надо с первого раза.
    Буду переписывать как надо? Скорее всего да. Но попутно учту и другие требования, чтобы не переписывать в третий раз.
    А пока нужно написать запрос, который работает и по возможности не сильно нагружает бд.
  • Как вывести нужную строку (оператор LIKE)?

    logpol32
    @logpol32 Автор вопроса
    galaxy, FanatPHP,
    потому что переделывать все равно придется, но потом будет гораздо больнее

    Придется. И это нормально. Вы не видите всего pi...всю систему.
    Сначала делаем как можем, быстро, без подготовленных запросов, фильтрации данных и т.д. Никто не будет ломать. Нужен прототип.
    А по ходу юзания собираем фидбек и делаем вторую, третью, сотую версию - исправляя ошибки.
    А там ошибок будет и хотелок... Или не будет.

    Ваш запрос правильный. И логичный. Но в силу определенных причин (конкретно трудности планирования) получается вот это. Должен был быть 1 пользователь и простейший запрос а тут раз...
    И вот выбор - или финт ушами или рефракторинг и переделывание кучи логики. А это время.
    А система прототип и не факт что взлетит.
    Поэтому пока вот так.

    В общем написал такое. Вроде работает.
    SELECT * FROM `table` WHERE `users_id` RLIKE "[[:<:]]'.$userId.'[[:>:]]


    galaxy
    чем insert от update отличается
    вставляет, обновляет? )

    как использовать PDO с подготовленными запросами

    Накрутив это на шаблонизатор и ООП (про ООП в PHP после C# говорить не охота, перегрузку методов завезут? банальное..)... Так можно 2 месяца просидеть.
    Я пока даже банально фильтрацию данных не делаю. Время.
    Нужен прототип. И требования изменяются. Поэтому финты ушами.

    Нет я не профи, ни разу. Просто как говорится по ходу пьесы возникают непредвиденные обстоятельства.
    А на качественное планирование времени нет.
  • Как вывести нужную строку (оператор LIKE)?

    logpol32
    @logpol32 Автор вопроса
    FanatPHP, да, это хорошее решение.
    Но мне надо менять много логики в моем приложении.
    По моему было логично хранить идентификаторы доступа в строке с разделителями.
    В PHP нет проблем найти строку в подстроке. Аналогично и в MySQL если бы идентификатор был один.
    SELECT * FROM `table` WHERE id='$id'
    Неужели SQL не может найти подстроку в строке. Регулярками, например...
  • Как вывести нужную строку (оператор LIKE)?

    logpol32
    @logpol32 Автор вопроса
    Akina, так нормализовано же.
    В первой таблице хранятся пользователи id login pass
    Во второй информация.
    Пользователю нужно показать инфу. для этого его идентификатор помещается в поле второй таблицы.
    По другому никак.

    Если бы одному пользователю нужно было бы показать информацию - то джоин.
    Но тут информация предназначена нескольким пользователям.
  • Как вывести нужную строку (оператор LIKE)?

    logpol32
    @logpol32 Автор вопроса
    Бд в нормальной форме.
    Идентификаторы лежат в отдельной таблице. id userlogin pass
    А есть таблица user_ids information
    Если в поле user_ids есть идентификатор из первой таблицы - показываем запись.

    Вы не сможете объединить таблицы join.
    Одному пользователю могут быть доступны 2 и более строк из таблицы с инфой.
    Пользователи создаются и удаляются.
    Вы не можете создать для каждого пользователя отдельное поле во второй таблице.
  • Как изменить ширину input в таблице?

    logpol32
    @logpol32 Автор вопроса
    Это работает, но у меня это будет работать немного криво.
    Дело не в вашем коде, а в том, что у меня много input-ов. Слишком много.
    Всё тормозит.
    Можно просто при загрузке сделать ширину инпут по содержимому?
    Без изменения ширины при дальнейшем вводе текста.
  • Как отправить (submit) все формы на странице?

    logpol32
    @logpol32 Автор вопроса
    Надим Закиров,
    Вышло вот так. Это почти ваш скрипт, но с небольшим отличием.

    $("#sub").click(function(){
        $("form").each(function(){
            var fd = new FormData($(this)[0]);
            $.ajax({
                type: "POST",
                url: "solve.php",
                data: fd,
                processData: false,
                contentType: false,
                success: function(data,status) {
                   //this will execute when form is submited without errors
               },
               error: function(data, status) {
                   //this will execute when get any error
               },
           });
        });
    });


    У меня в action формы был id table_save?id=19
    В коде выше все передается post.
    Поэтому я создал скрытое поле с id. И вроде всё работает.

    И все же хочу спросить - такой способ передачи/сабмита не будет глючить?
    В обработчике события простой Update таблицы. Обновить таблицу значениями полей.
    В таблице 30 текстовых полей.

    Форм 40.
    То есть будет 40 апдейтов с одного клика.
    За железо не беспокоюсь, а вот за браузер...
  • Как проще передать все данные (поля из таблицы) в массив?

    logpol32
    @logpol32 Автор вопроса
    FanatPHP,
    это я не понял совсем.

    Переменная = участок памяти. Там по определению что то есть. "Мусор", например.
    Но я имел ввиду неявную инициализацию.

    В общем вот пример из C#.
    Я тоже руководствовался "Буратино", но тимлид мне сказал, что я не прав.
    public static double GetAccruals(int ServiceId, double currentReadings = 0.0, double previousReadings = 0.0)
                {
                    double summ = 0; // Вот тут я не прав.
                    summ = (currentReadings - previousReadings) * Convert.ToDouble(SQLiteBase.GetServiceTariff(ServiceId));
                    return summ;
                }
  • Как отправить (submit) все формы на странице?

    logpol32
    @logpol32 Автор вопроса
    Надим Закиров, у меня это не работает.
    Я плохо знаю jQuery и до конца не понимаю как и где вызывать асинхронные функции.
    Ошибка Uncaught SyntaxError: await is only valid in async functions and the top level bodies of modules
    С вашей функцией ни одна моя JS функция не работает. Видимо я вставляю вашу функцию не в то место.

    Вот частично мой код

    Ваша функция находится в скрипте script.js
    <head>
    <script type="text/javascript" src="/js/jquery.min.js"></script>
    <script type="text/javascript" src="/js/jquery-ui.min.js"></script>
    <script type="text/javascript" src="/js/script.js"></script>
    </head>
    <! -- Форма на странице  -->
    <form action="actions.php?action=table_save?id=19" method="POST">
    <input  type="text" name="field1" value="Текст" >
    <input  type="text" name="field2" value="Текст2" >
    </form>


    script.js

    $(document).ready(function() {
    // Тут другие мои простейшие функции.
    
    AllFormSubmit();
    });
    
    async function AllFormSubmit() {
    
    var promises = [];
    
    // Щелчок по ссылке с классом submit_all_href
    $('.submit_all_href').on('click', function(e){
    	
      console.log('Клик'); // Этого мы не видим
    	
      $('form').each(function(n, e) {
        promises.push($.ajax({
          'type': 'POST',
          'url': e.action,
          'processData': false,
          'contentType': false,
          'data': new FormData(e)
        }));
      });
    
      
      
      var results = await Promise.all(promises);
      
      
    });
      
      
      
      console.log('Все формы со страницы успешно отправлены, результаты ниже:');
    console.dir(results);
      
      return results;
    
    }
  • Как проще передать все данные (поля из таблицы) в массив?

    logpol32
    @logpol32 Автор вопроса
    FanatPHP, с одной стороны да, с другой нет.
    Это верно, что надо инициализировать объекты/переменные. Так удобнее контролировать его содержимое (а вдруг там что то уже есть?).
    С другой стороны, любой объект изначально уже инициализирован т.е. имеет какое либо значение.
    Аналогично и с удалением объекта из памяти.

    Во многих языках программирования мы не инициализируем объект.
    В некоторых языках программирования мы не удаляем объект из памяти (есть сборщик мусора).

    В общем, по моему мнению - инициализировать объект не нужно, нужно правильно использовать область видимости объекта и соблюдать парадигмы ООП (инкапсуляцию).

    Вот и даже джаваскрипт к этому вроде пришел - от var к let.
    Ну а C# давно уже там...
  • Как проще передать все данные (поля из таблицы) в массив?

    logpol32
    @logpol32 Автор вопроса
    Slava Rozhnev, FanatPHP, странно, работает и без иницализации и вроде не жалуется (нет warning или я их просто не увидел)
    $MyListArray = []; //  Это точно надо?
    while ($row = $queryResult->fetch_assoc()) {
      $MyListArray[] = $row;
    };


    Все же рекомендуете инициализировать массив?
    Без инициализации будут проблемы? (в другой версии php например )
  • Почему не работает Ajax?

    logpol32
    @logpol32 Автор вопроса
    Emil Revencu, да была проблема с CORS
    https:// не обязателен. Даже http
    без проблем грузит адрес вида test1.html, если файл на этом же домене
  • Почему не работает Ajax?

    logpol32
    @logpol32 Автор вопроса
    Rsa97,
    e.preventDefault();

    Не загружает...

    В консоли пишет
    TEST.HTML:28 Uncaught ReferenceError: query is not defined
        at HTMLAnchorElement.<anonymous> (TEST.HTML:28)
        at HTMLAnchorElement.dispatch (jquery.min.js:2)
        at HTMLAnchorElement.v.handle (jquery.min.js:2)


    У ссылки убирал href ставил решетку и т.д. - все равно эта ошибка.

    28 строка это data: query,

    type: "POST",
    data: query,
    success: function (html) {


    PS
    Менял ссылку на div
    <div class="menu-link  jquery-link"  >Ссылка меню</div>

    Всё аналогично.
  • Почему не работает Ajax?

    logpol32
    @logpol32 Автор вопроса
    Rsa97,
    поменяйте на href="#",

    Попробовал - результат тот же. Не загружает.
    По моему, это не очень корректно с точки зрения html.
    В строке браузера отобразится эта решетка (якорь в никуда). Он, по идее вообще не нужен т.к. действие скрипта завязано на класс. И href не нужен (оставил временно для того, чтобы курсор был hand).

    либо добавьте preventDefault.

    Не понимаю как корректно добавить эту функцию в мой код.
    Какой там будет evt...
    https://developer.mozilla.org/ru/docs/Web/API/Even...
  • Почему не работает Ajax?

    logpol32
    @logpol32 Автор вопроса
    Хорошо. Исправил вопрос. Теперь вместо гугла загружается файл test1.html.
    Ajax должен возвращать его содержимое.
    https://youtu.be/8pFZnqGL7ts
  • Как правильно настроить PHP mailer?

    logpol32
    @logpol32 Автор вопроса
    никогда не надо выдавать себя

    это я для примера. В реальности будут настоящие email.
  • Как исправить код работы с шаблонами?

    logpol32
    @logpol32 Автор вопроса
    include_once

    Я знаю, что означает эта функция. Вставить код файла 1 раз.
    Используется при "цепочке инклудов", например, когда можно забыть вставил ли ты где-то этот файл или нет.
    Исправил на include, работает.
    Я не понимаю, почему это не работало.

    В HTML::GetTemplateCode прописано - вставить код шаблона. Один раз, несколько...,но вставить.
    Далее идут вызовы GetTemplateCode. Код шаблона там должен быть.

    У нас нет цепочки инклудов. У нас идет вызов статического метода, грубо говоря функции.
  • Почему недоступно верхнее меню?

    logpol32
    @logpol32 Автор вопроса
    да, если пользоваться инструментами разработчика, то и без фона всё видно

    У меня было предположение - кнопка, меню....
    Я не заметил
    .content-wrapper-position-center {
        width: 100%;
        height: 100%;
        position: fixed;
       top: 0;
        left: 0;

    да с фоном было бы сразу видно. Потому что глаз видит фон.
    А код выше, надо осмыслить. Особенно когда кодишь 4 часа.
    Сам написал, сам забыл... традиционно.