За последние 24 часа нас посетили 22514 программистов и 1031 робот. Сейчас ищет 621 программист ...

Обработка input hidden

Тема в разделе "PHP для новичков", создана пользователем S_t_e_e_p, 10 сен 2018.

  1. S_t_e_e_p

    S_t_e_e_p Активный пользователь

    С нами с:
    12 июл 2012
    Сообщения:
    181
    Симпатии:
    4
    Приветствую всех гуру.

    Через ajax допустим заносим в бд запись с отношением допустим product_id

    есть поле input type="hidden" value="12" name="product_id"

    Если юзер допустим залезет в код через браузер и изменит на другое id допустим 99999

    Вопрос: на стороне сервера нужно сделать проверку есть ли продукт с таким id правильно я понимаю в случаи если нет кинуть Exception?
     
  2. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.745
    Симпатии:
    1.319
    Адрес:
    Лень
    PHP:
    1. if ( filter_input ( INPUT_SERVER, 'REQUEST_METHOD' ) === 'POST' )
    2. {
    3.     $definition = [ 'product_id' => FILTER_VALIDATE_INT ];
    4.  
    5.     $filters = filter_input_array ( INPUT_POST, $definition );
    6.  
    7.     if ( in_array ( null, $filters, true ) )
    8.     {
    9.         exit ( 'does not exist one name inputs or all' );
    10.     }
    11. }
    --- Добавлено ---
    6** потом еще раз прочел о чем речь шла...
     
  3. Valick

    Valick Активный пользователь

    С нами с:
    12 авг 2018
    Сообщения:
    1.911
    Симпатии:
    328
    @S_t_e_e_p, на стороне сервера необходимо проверять всё, вообще всё, вообще всё всё всё, что приходит от пользователя, и имеет ли он право добавлять/менять/удалять информацию под тем или иным id
     
  4. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.792
    Симпатии:
    650
    @S_t_e_e_p, чтобы не делать валидацию параметра и не проверять существование продукта вручную, можно повесить алиас вроде /add/12 или добавить POST-обработчик к имеющемуся GET-обработчику по адресам вроде /product/12, который выводит товар на страницу (выбирая его из БД и проверяя его существование – после можно поставить вилку). Алиас и вилка POST/GET в чистом виде (без написания предварительных действий по выборке товара из БД и проверки его существования), естественно, будут работать, если можно настроить автоматическую выборку и проверку (довольно популярная фишка в наших даже самых простых каркасах). Иначе выносите в функцию и дергайте ее из нужных обработчиков. Валидацию id в адресе можно отделить от выборки, возложив ее на роуты (т.е. заменив фильтрацией).
     
    #4 miketomlin, 10 сен 2018
    Последнее редактирование: 10 сен 2018
  5. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.792
    Симпатии:
    650
    Была на одном демосайте «таблица продуктов». Решил наглядно продемонстрировать, о чем я писал.
    AJAX POST-обработчик:
    PHP:
    1. Done<?php exit;
    GET-обработчик (ничего кроме шаблона писать не пришлось):
    PHP:
    1. <?php
    2.  
    3. extra('head-section','
    4. <script>
    5. function addproduct(id)
    6. {
    7.  ...
    8.  var data="";
    9.  xhr.open("POST","/products/"+id,true);
    10.  ...
    11. }
    12. </script>');
    13.  
    14. ?>
    15. <h1><?= $page['name'] ?></h1>
    16. <form method="post" action="/404">
    17. <button onclick="return addproduct('<?= $page['id'] ?>');">Add</button>
    18. <button onclick="return addproduct('bad-<?= $page['id'] ?>');">Bad</button>
    19. <p id="result"></p>
    20. </form>
    Это все, не считая вилки AJAX POST/GET. Функцию addproduct целиком можно посмотреть на странице с примером g09.ru /products/item-1 (в таблице есть еще item-2, item-3, item-4). На использование слагов вместо числовых id не обращайте внимания – такова была таблица – код от этого не меняется.