есть у меня база
дата | ФИО | место работы | отработанные часы | прочие ячейки
я делаю форму через ajax отправляю все на сервер и php записываю в БД , теперь у меня стала дилема если 2 или более человек зайдут одновременно заполнять форму, они оба могут отправить данные и выйдет огромный дубль
как мне запретить добавление в БД если в определенную дату у ФИО уже есть запись?
Сперва нужно определиться с логикой, т.е. как это должно обрабатываться. Мы запрещаем добавлять дубли при попытке. Мы перезаписываем данные при загрзке новых данных с той же датой. А может стоит все же делать дубль и отправлять сообщение пользователю, чтобы он уже сам разбирался, какой из вариантов корректный, а какой следует удалить.
Не выйдет, если ФИО+дата - первичный ключ или уникальное поле. Причем вместо ФИО желательно использовать логины или иные значения, хранимые в сторонней таблице, чтобы Иванов И.И. и Иванов И И не были разными значениями
да ФИО это отдельная таблица и там только цифра будет их id , а дата только в одном формате , так что у нас по сути есть что сравнивать , вопрос только как это правильно сделать чтоб еще потом и ответит получить в виде id продублированной записи ..
Павел, зачем Вам ID записи? Unique поля и Primary key служат,чтобы дублей не было. Просто код ошибки получаете и выдаете окошко "такая запись уже существует"
Павел, если человек забивает "Иванов Петр, 31 января....." и видит ошибку "Такая запись уже есть", то очевидно что Иванов Петр 31 января уже вносился. Сам текст уж как-нибудь придумаете)
Сергей С., я вам обрисую что у меня есть чтоб примерно понимать
в форме есть select , в который подтягивается из БД id человека , дата вносится через jquery датапикер , это все в виде таблицы , выводится сразу на всех людей которые есть , у них по умолчанию проставлено место работы для удобства заполнения .
Я через jquery ajax формирую запись
$query = 'INSERT INTO dates (user_id,dates,visited) VALUES
(дата, ФИО, место работы,часы),
(дата, ФИО, место работы,часы),
(дата, ФИО, место работы,часы),
(дата, ФИО, место работы,часы) ....... и так за каждого человека';
Павел, сделайте вставку через commit, отключив автокоммит. Тогда для каждой вставки можно поймать ошибку. Я бы сделал так:
$query = 'INSERT INTO dates (user_id,dates,visited) VALUES
(дата, ФИО, место работы,часы)
Для каждой записи execute, после чего в массив результатов пихаем ФИО, Дату и текст ошибки. Если ошибки нет, там пустое значение.
При возврате данных разобрать массив и вывести уведомление - дело техники.
Написано
Войдите на сайт
Чтобы задать вопрос и получить на него квалифицированный ответ.