• Что прочитать по ООП и паттернам для веб-разработки на PHP?

    @gerashenko
    Тут сначала надо разобраться, что вам нужно, паттерны понять или суть ооп в целом.

    В пхп ооп на практике в большинстве случаев используется через одно место, в большинстве случаев все скатывается к файлам с кучей функий или методов, короче процедурщина. Как я понял вам близок такой стиль, но на большом проекте этот код поддерживать, масштабировать и вообще что-либо с ним делать сущий ад, это неструктурированная каша. Пхп позволяет писать эту кашу, и потому его так любят вначале, а потом ненавидят в конце. Ооп лучше рассматривать отдельно, а потом смотреть как оно используется в пхп в чистов виде типа Symfony и адаптированном под реалии php типа Laravel. Комбинация функционального и ооп подхода в пхп - это идеальный баланс, но чтобы его держать, нужно видеть плюсы и минусы обоих подходов.

    Laravel хороший фреймворк, но пользоваться им не умеют, он не заставляет писать правильно, в итоге получается очередная каша, та же процедурщина, но теперь размазанная по моделям контроллерам и папкам без какого либо намека на хорошую структуру.

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

    В вашем случае вам нужно просто начать с азов того, что такое ооп. На примерах типа транспортное средство это абстрактный класс, а автомобиль и самолет потомки, а интерфейс двигаться по разному в них реализуется, но надо помнить что эта детская на первый взгляд чушь отлично работает в программных сущностях, в частности для веба например вы пишете парсер торговой площадки, у вас есть абстрактный класс торговой площадки и конкретные реализации (amazon, ebay), который хранят какие-то атрибуты, а еще вы хотите, чтобы эти объекты можно было сохранять в хранилище, но хранилище сами не хотите писать, а берете готовое, у него есть метод storable, и вы реализуете этот метод в этих площадках, и вот у вас уже площадки могут сохраняться. Короче как вы видите я не особо старался сделать хороший ответ, но суть ооп в том, что код становится похожим на детальки конструктора, которые начинают состыковываться друг с другом. Никакого выигрыша в производительности, только структура, универсальность, масштабируемость.

    Извиняюсь за ошибки, с телефона неудобно писать.
    Ответ написан
    Комментировать
  • В чем проблема с нахождением елемента формы в post?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Во первых
    require_once 'controllers/authController.php';
    require 'templates/header.php';
    здесь отсутствует закрывающий тег пхп, после которого идет хтмл. Подозреваю что там и открывающего нет (в коде вы его не привели).
    Во вторых button type="sumbit" не является инпутом, и передаваться как значение пост не будет.
    В третьих в форме указан signup.php, а выше вы приводите "файл auth". Определитесь, или там переименуйте или тут.

    Ну и первое что нужно сделать - включить вывод ошибок, или смотреть логи, а не тыкать пальцем в небо.
    ini_set('error_reporting',E_ALL);
    ini_set('display_errors', 1);
    session_start();
    ...
    Ответ написан
    3 комментария
  • В чем ошибка передачи/подстановки данных при редактировании категории?

    delphinpro
    @delphinpro Куратор тега Laravel
    frontend developer
    Categories - это же модель, верно? Тогда почему она названа во множественном числе?
    Вы редактируете категорию, а не категории
    Модель - Category, таблица - categories
    Роут:
    Route::post('categories/{category}')->name('category.update');


    И тогда заработает магия неявного биндинга, и в контроллер будет передан правльный объект.

    public function edit(Category $category)
    {
        return view('admin.category.edit', ['category' => $category]);
    }


    <form action="{{ route('category.update', $category) }}"
          method="POST"
    >
    Ответ написан
    Комментировать
  • В чем ошибка передачи/подстановки данных при редактировании категории?

    tmaslov22
    @tmaslov22
    Backend developer
    В laravel есть соглашение об именованиях, стоит ему придерживаться. Тогда магия фреймоврка начнет работать.
    Ответ написан
    Комментировать
  • Как проверить есть ли в массиве определенное значение?

    karabanov
    @karabanov
    Системный администратор
    Тут не надо ничего в массиве искать. Добавь в SELECT условие WHERE chat_id=$chat_id. Если запрос ничего не вернёт, значит пользователя с таким chat_id в базе нет.
    Ответ написан
    1 комментарий
  • Как получить изменения с гх?

    ayazer
    @ayazer
    Sr. Software Engineer
    https://git-scm.com/docs/git-pull

    только origin указать не как вашу форку, а как оригинальный репозиторий
    Ответ написан
    2 комментария
  • Как посчитать количество элементов массива, имеющих определённое свойство?

    coderisimo
    @coderisimo Куратор тега JavaScript
    const totalSpecials = data.filter(i=>i.special).length;
    // где data - ваш массив.
    Ответ написан
    2 комментария
  • Как посчитать количество элементов массива, имеющих определённое свойство?

    0xD34F
    @0xD34F Куратор тега JavaScript
    Конечно, можно прямо посчитать количество интересующих нас элементов:

    const countWithKey = (arr, key) => arr.filter(n => key in n).length;
    
    console.log(countWithKey(arr, 'ключ'));

    Но можно решить задачу и в более общем виде.

    Например, просуммировав данные. Функция суммирования кроме данных получает также функцию, которая из отдельного элемента данных извлекает слагаемое, в данном случае - факт наличия нужного свойства:

    const sum = (data, val = n => n) =>
      Array.prototype.reduce.call(
        data,
        (acc, n) => acc + val(n),
        0
      );
    
    console.log(sum(arr, obj => obj.hasOwnProperty('ключ')));

    Кстати, что даёт более общий вид.
    Считать можно разные суммы. Как, например, обычных массивов из чисел (sum([ 1, 2, 3 ]) // 6), так и более сложные варианты. Например, есть массив, представляющий содержимое корзины с товарами (цена, количество), надо посчитать общую стоимость:

    const cart = [
      { price: 100, count: 5 },
      { price:  10, count: 6 },
      { price:   1, count: 7 },
    ];
    
    const total = sum(cart, item => item.price * item.count); // 567

    Или, считаем количество лайков за ответы на этот вопрос (можете открыть консоль и прямо там выполнить этот код):

    const likes = sum(document.querySelectorAll('.btn_like .btn__counter'), n => +n.innerText);


    Или, можно посчитать, сколько элементов набора данных относится к той или иной группе. Функция подсчёта помимо данных получает в качестве параметра функцию, которая принимает элемент данных, и возвращает группу, к которой он относится:

    function Counter(data, key = n => n) {
      const counted = new Map;
    
      for (const n of data) {
        const k = key(n);
        counted.set(k, (counted.get(k) ?? 0) + 1);
      }
    
      return k => counted.get(k) ?? 0;
    }
    
    const keyExists = Counter(arr, obj => Object.hasOwn(obj, 'ключ'));
    console.log(keyExists(true)); // смотрим, у скольких элементов массива ключ есть
    console.log(keyExists(false)); // и у скольких нет

    Аналогично суммированию, есть разные варианты применения.

    const str = 'hello, world!!';
    
    const chars = Counter(str);
    console.log(chars('h')); // 1
    console.log(chars('!')); // 2
    console.log(chars('x')); // 0

    const persons = [
      { name: 'Вася', birthday: new Date('1999-05-22') },
      { name: 'Маша', birthday: new Date('2004-03-06') },
      { name: 'Катя', birthday: new Date('1976-05-15') },
      { name: 'Петя', birthday: new Date('1987-04-18') },
      { name: 'Коля', birthday: new Date('2000-01-01') },
      { name: 'Дима', birthday: new Date('2003-05-09') },
      { name: 'Миша', birthday: new Date('1996-02-29') },
      { name: 'Таня', birthday: new Date('1981-03-12') },
      { name: 'Олег', birthday: new Date('1992-08-24') },
    ];
    
    const birthMonths = Counter(
      persons,
      ({ birthday }) => birthday.toLocaleString('ru-RU', { month: 'long' })
    );
    console.log(birthMonths('май')); // в мае родилось три человека
    console.log(birthMonths('март')); // в марте два
    console.log(birthMonths('октябрь')); // а в октябре никто

    function* naturalNumbers(n) {
      for (let i = 1; i <= n; i++) {
        yield i;
      }
    }
    
    const numLengths = Counter(naturalNumbers(100), num => `${num}`.length);
    console.log(numLengths(2)); // среди первых ста натуральных чисел - девяносто двухзначных
    console.log(numLengths(3)); // и одно трёхзначное
    console.log(numLengths(0)); // число из нуля знаков? - конечно же нет таких

    Ответ написан
    1 комментарий
  • Почему не распознается переменная при ее подстановке в строку?

    ZerdoX-x
    @ZerdoX-x
    Frontend developer influenced by web, a11y, crypto
    Первый вариант правильный. Что именно у тебя возвращает undefined? Функция val()?

    Попробуй задебажить это поэтапно:
    1. Создай константу в которой будет хранится строка с нужным тебе селектором:
      const selectorString = `.c_ipt_surname${i}`
      console.log({ selectorString })

    2. Получи DOM элемент:
      const surnameElement = $(selectorString)
      console.log({ surnameElement })

    3. Получи значение, которое ввёл юзер:
      const surname = surnameElement.val()
      console.log({ surname })


    Последним пунктом я бы посоветовал выпилить jq и больше никогда им не пользоваться. Но этот пункт слишком opionated, я не стал его включать.
    Ответ написан
    4 комментария
  • Изменение значения в html?

    rozhnev
    @rozhnev Куратор тега PHP
    Fullstack programmer, DBA, медленно, дорого
    Возможно, только Вам нужно изучить JavaScript, освоить технологию AJAX, ну и немгого PHP чтобы написать серверную часть и SQL для сохранения в базу даннах.

    Ну или воспользоваться Google Docs = там всё уже написано :)
    Ответ написан
    1 комментарий
  • Android приложение на js и php?

    Eugevin
    @Eugevin
    22 года, frontend как смысл жизни
    React Native - лучшее решение, если хочешь создать именно нативное приложение (+ его можно будет легко распараллелить на Anroid/IOS/Web).

    PWA - Можешь создать ПВА'шку в виде WEB-приложения, которую можно скачать на телефон и работать оно будет даже в Оффлайн режиме. Если не хочешь сильно запариваться, то выбирай этот вариант
    Ответ написан
    Комментировать
  • Триггер на удаление записей в связанной таблице?

    tsklab
    @tsklab Куратор тега SQL Server
    Здесь отвечаю на вопросы.
    Необходимо создать триггер на удаление
    Не нужно.
    Сделайте каскадное удаление. Например:
    ALTER TABLE [dbo].[PerformerGenre]
        WITH NOCHECK ADD CONSTRAINT [FK_PerformerGenre_Genre] FOREIGN KEY([Genre])
      REFERENCES [dbo].[Genre] ([ID])
      ON DELETE CASCADE


    в курсовой требуется
    CREATE TRIGGER deleted_otmetki ON student FOR DELETE
    AS 
    DELETE FROM otmetki WHERE otmetki.kod_studenta = deleted.kod_studenta
    GO

    Руководство.
    Ответ написан
    Комментировать
  • Как правильно обработать php скрипт через ajax?

    sslion
    @sslion
    Так ты логин и пароль не отправляешь, только submit
    Ответ написан
    8 комментариев
  • Как выполнить PHP скрипт через ajax?

    nefone
    @nefone
    Junior PHP разработчик
    Отправку POST запроса с помощью AJAX легко сделать через jQuery
    <!DOCTYPE html>
    <html lang="ru">
    <head>
        <meta charset="UTF-8">
        <title>AJAX Send</title>
    </head>
    <body>
        <button id="btn_yes">Btn_yes</button>
        <button id="btn_no">Btn_no</button>
    
        <script src="https://code.jquery.com/jquery-2.2.4.min.js"></script>
        <script src="main.js"></script>
    </body>
    </html>

    Файл main.js:
    //"file.php" - Это тот файл на который будем отправлять AJAX запрос
    $("#btn_yes").on('click', function() {
        $.post("file.php", { btn_yes: "btn_yes"})   
            .done(function( data ) {
                alert( "Сообщение: " + data );
        });
    });
    
    $("#btn_no").on('click', function() {
        $.post("file.php", { btn_no: "btn_no"})   
            .done(function( data ) {
                alert( "Сообщение: " + data );
        });
    });


    Код файла "file.php" (можете заменить на свой):
    if( isset( $_POST['btn_yes'] )) {
        echo 'Отправлена кнопка btn_yes';
    }
    
    if( isset( $_POST['btn_no'] )) {
        echo 'Отправлена кнопка btn_no';
    }
    Ответ написан
    Комментировать
  • Работа с mysql с помощью php и удаление html?

    samodum
    @samodum
    Какой вопрос - такой и ответ
    Проще всего это делать через Ajax
    Ответ написан
    3 комментария
  • Скрипт работы с MYSQL?

    Noizefan
    @Noizefan
    Логика в корне не верна к сожалению

    Ты в цикле разбора пришедших данных из бд проверяешь приход кнопки - у тебя эти условия будут выполняться каждый раз, т.е. если в базе 100 строк то код 100 раз изменит что ты там изменяешь, это раз
    нужно выносить за цикл в самый верх и проверять один раз

    два - ты же сам получаешь все строки из бд со всеми данными, звездочкой, зачем делать какие то $j и $i если можно из массива со строкой брать ее айди?

    echo '<form method="POST">';
        echo '<input type="hidden" name="rowid" value="'.$data['id'].'">';
        echo '<td><button name="btn_yes">Yes</button></td>';
        echo '<td><button name="btn_no">No</button></td>';
    echo '</form>';

    и при наличии входящего параметра rowid уже внутри проверяй какая именно и пришла ли вообще кнопка

    затем
    $mysqli_query ="UPDATE klient SET control = '0' WHERE id = 1;";

    Ты меняешь всегда только ту строку у которой айди 1
    По твоей же задумке нужно менять входящий айди, он содержится теперь в $_POST['rowid']

    еще избавляйся от mysqli, переходи на PDO, там нет ничего сложнее чем то чем ты занимаешься сейчас

    Рекомендую почитать про алгоритмы в общем и целом, пока что суешь куски кода из статей в примерно по-твоему нужное место
    нужно строго понимать при таком подходе какая строка что именно делает, каждый символ, каждый аргумент

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

    rozhnev
    @rozhnev Куратор тега MySQL
    Fullstack programmer, DBA, медленно, дорого
    UPDATE table_name SET control = 'what_you_need_here' WHERE id = 1;


    https://habr.com/ru/post/123636/
    Ответ написан
    Комментировать
  • Как сделать чтобы при нажатии на div, открывался другой div?

    EgoSab
    @EgoSab
    Web-developer
    В вашем JS коде в функцию вы передаёте параметр box, но нигде его даже не используете

    HTML

    <a href="#box">
      <div id="containercall">
        <img src="resource/call.png" alt="" id="call">
      </div>
      </a>
        <div id="box">Оставьте свой номер и мы с вами свяжемся</div>


    JavaScript

    let openBox = document.querySelector('a[href="#box"]');
    let box = document.querySelector('#box');
    
    openBox.addEventListener('click', () => {
      if (box.style.display == "none") {
         box.style.display = "block";
    } else {
         box.style.display = "none";
    }
    });
    Ответ написан
    3 комментария