если вы используете базу данных, вы можете использовать следующую структуру.Иметь таблицу базы данных (feedbackTable) и не менее 3 столбцов (IP, feedbackText, feedbackTime - отметка времени отправки отзыва).
При отправке формы пользователя получите необходимые переменные ...
$ip=$_POST["ip"];
$feedbackText=$_POST["feedbackText"];
Использовать информацию в запросе ...
$qry = "SELECT * FROM feedbackTable WHERE IP=:ip AND feedbackTime BETWEEN DATE_SUB(NOW(), INTERVAL 4 HOURS) AND NOW()";
// or NOW()-4 hours ... depends on database and version
Выполнить запрос.Если возвращается 0 строк (используйте rowCount () для подготовленных операторов PDO в PHP), тогда текст обратной связи можно добавить в базу данных и / или сделать видимым для пользователей.Если возвращается 1 строка, сообщите пользователю, что он не может отправить отзыв снова, пока не истечет 4 часа.На самом деле было бы лучше не делать форму видимой для пользователя, пока не истечут 4 часа с момента последней отправки.Вы можете сделать это путем «опроса» с использованием ajax и jQuery (скрыть форму после отправки, затем установить интервал - может быть, каждую минуту) в сценарии запроса к базе данных, используя ajax, когда сценарий возвращается, когда говорят, что 4 наших номера показаныформа снова) ... но это не обязательно.Пользователь может немного расстроиться, если он потратит время на заполнение отзыва, а затем вы скажете ему, что не принимаете его, потому что прошло недостаточно времени.Я бы не стал использовать локальное хранилище для экономии времени, поскольку у пользователя есть способы изменить эту информацию.