Передача параметра php

274
24 февраля 2017, 03:11

Добрый день. Есть разметка

<div>
<h1>Статья 1</h1>
<form action="#" method="POST">
<button type="submit" name="sandId">Добавить статью</button>
</form>
</div>
<div>
<h1>Статья 2</h1>
<form action="#" method="POST">
<button type="submit" name="sandId">Добавить статью</button>
</form>
</div>

Все данные в разметку выводятся средствами php, вытягиваются из базы. У каждой статьи есть свой уникальный номер. Нужно сделать так чтобы при нажатии на кнопку sandId в файл- обработчик передавался id той записи,к которой прикреплена форма. Пытался сделать так:

 <div>
    <h1>Статья 1</h1>
    <form action="#" method="POST">
<input type="hidden" name="id" value="1"/>
    <button type="submit" name="sandId">Добавить статью</button>
    </form>
    </div>
    <div>
    <h1>Статья 2</h1>
    <form action="#" method="POST">
    <input type="hidden" name="id" value="1"/>
    <button type="submit" name="sandId">Добавить статью</button>
    </form>
    </div>

Но этот вариант мне не подходит, значения скрытых полей, а точнее id статей, берутся из базы, их не должен видеть пользователь. И иметь возможность изменять их прямо в браузере он тоже не должен.

Answer 1

Можно написать уравнение, которое бы при генерации страницы с формами вставляла в формы не настоящие данные идентификаторов записей из бд, а какие-то условные строки\цифры. Когда бы данные приходили от пользователя, то же уравнение высчитывало бы всё в обратном порядке. Важно добавить какую-то "соль", которая бы точно гарантировала, что расшифрованные данные относятся к какой-либо записи. Например, дату создания записи в БД. Но проще использовать шифрование. Или использовать логику хеширования паролей (проще всего).

Например, берём из базы идентификатор записи и дату-время создания этой записи (в качестве "соли"). Соединяем их вместе, приводим, например, к виду 174_2017-23-02_23-00 (лучше всего ИД записи писать не ожидаемо в начале, а где-нибудь в другом месте - между датой и временем. Пользователи ведь не знают, что и как вы тут крутите).

Дальше используем password_hash() (документация). Получаем хэш вида $2y$10$3KYZHiFhKHNB7.yJUGXJf.zR6Z8uc4.pdPsKbTTMDoApsp8CBY5qe, который используем для вывода пользователю в скрытое поле.

При получении данных от пользователя сверяемся с тем, что получили, с тем, что должно быть. Например, с помощью password_verify() (документация)

Если пользователь захочет что-то подправить у себя на странице, то он не сможет узнать что это за данные и не удастся ему ничего сделать. Смысл, надеюсь, ясен.

READ ALSO
html option и php

html option и php

Как получить выбранное пользователем value из option с помощью php ?

257
highcharts js. Как сделать скругленные концы?

highcharts js. Как сделать скругленные концы?

В опциях определено что linecap: round, но концы все равно не скругленные

298
Разница между ExtJS 4 и ExtJS 6

Разница между ExtJS 4 и ExtJS 6

Есть ли существенная разница между этими двумя версиями библиотекПросто по ExtJS 4 существует мануал на русском языке, с помощью которого я смогу...

453
Есть вопрос по owl карусели

Есть вопрос по owl карусели

У меня на странице может быть очень много слайдеровКак сделать так, что бы не копировать один и тот же код множество раз, где мне надо просто...

304