(Если я правильно понял вопрос, маловато дополнительной информации.)
Попытаюсь ответить развёрнуто.
1. Использование куки для данной цели не совсем надёжно(пользователь может просто очистить куки, зайти с инкогнито и т.д) И проголосовать таким образом ещё раз.По этому хранить информацию о конкретном голосе лучше бы также и в базе. Куки для данной цели не подходят(в данной задаче они вам понадобятся для идентификации пользователя в системе).
2. Скрыть форму вы можете например при помощи JS. (Например)В момент передачи параметров на страницу(на бэкэнде), проверяете голосовал ли конкретный пользователь за данный конкретный товар, передаёте соответствующий параметр. В зависимости от значения этого параметра делаете на фронте проверки и выводите то что нужно(скрываете то что нужно). (Можно и при помощи PHP это сделать)
3. Также крайне желательно сделать соответствующие проверки и в методе отвечающем за приём формы, поскольку так то пользователь, несмотря на то, что формы голосования не видно, всё же может отправить запрос с соответствующими данными для записи, и если у вас проверки не будет, то информация о голосе снова запишется. (одним визуальным скрытием или "не отрисовыванием" формы дело не обойтись не может)