предотвратить повторяющиеся записи в таблице MySQL

Я создаю сайт для бронирования мероприятий. У меня есть 3 центра. Клиент не может забронировать одно и то же действие дважды ни в одном центре. Я использую таблицу в MySQL, в которой я храню информацию, предоставленную клиентами. Есть ли способ отфильтровать или проверить мой php-код, если клиент уже забронировал одно и то же действие более одного раза и выдает ошибку msg?
моя таблица (и информация, которую я спрашиваю) содержит эти столбцы:
Идентификатор (первичный)
Имя
Фамилия
Эл. адрес
Контактный телефон
ИмяКласса
Неделю
интенсивность
CentreName

$values = $_POST;
foreach ($values as &$value) {
$value = mysql_real_escape_string($value);
}

$sql1="INSERT INTO loan (loan_id)
VALUES ('$values[loan_id]')";

$result = mysql_query($sql1);
if (!$result) {
die('Invalid query: ' . mysql_error());
}

0

Решение

При создании таблицы добавьте уникальный атрибут в поля, которые вы хотите запретить, что-то вроде этого

CREATE TABLE Persons
(
P_Id INT NOT NULL AUTO_INCREMENT,
LastName VARCHAR(255) NOT NULL,
FirstName VARCHAR(255),
Address VARCHAR(255),
City VARCHAR(255),
UNIQUE (P_Id)
)

Если вы уже создали таблицу, просто отредактируйте ее следующим образом

ALTER TABLE Persons
ADD UNIQUE (P_Id)
1

Другие решения

Надеюсь, это поможет вам; Если у вас нет уникального идентификатора, я считаю, что он подойдет вам лучше всего в том, что вам нужно; Обратите внимание, что это не полный код; Вы должны добавить некоторые данные к другой, чтобы соответствовать вашему вопросу;

// Checks if the value already exist on the database
$query = SELECT EXISTS(SELECT column_name FROM table_name WHERE
condition   LIMIT 1)

// If condition is not met it will proceed with save
if (mysql_num_rows(!$query) > 0) {
echo "Activity Booked";
} else { // If condition is met it will echo an error message
echo "Unable to booked activity"; }
0

Вам нужно создать уникальный (составной) индекс для столбцов, которые вы хотите быть уникальными. Вы можете игнорировать свой ПК при создании уникального индекса. В вашем случае ваш sql будет выглядеть примерно так:

Alter table yourtablename
add unique index idx_unq(`LastName`, `FirstName`, `Email`, `ContactNumber` `ClassName`, `Week`, `Intensity`, `CentreName`);

Затем сделайте INSERT IGNORE INTO вместо INSERT INTO.

Этот пост также может помочь вам.

"INSERT INTO .. ​​ON DUPLICATE KEY UPDATE" Только вставляет новые записи, а не заменить?

Чтобы увидеть, существует ли запись в таблице, вы должны сначала «проверить», чтобы увидеть, существует ли эта точная запись в вашей таблице. Это должно быть сделано до того, как вы вставите IGNORE Into в свою логику. Используя переменные, ваш код будет выглядеть примерно так:

$testcount = "Select count(`LastName`, `FirstName`, `Email`, `ContactNumber` `ClassName`, `Week`, `Intensity`, `CentreName`)
from yourtablename
where
(LastName = '$LastName' AND FirstName= '$FirstName' AND Email= '$EMAIL' AND ContactNumber= '$ContactNumber' AND ClassName= '$ClassName' AND Week= '$Week' Intensity = '$Intensity' AND CentreName = '$CentreName' )";

Этот запрос вернет вам (при условии, что в таблице уже нет дубликатов) 0 или 1 и сохранит его в переменной $ testcount. Затем его можно использовать либо для определения на основе значения для вставки записи в таблицу, либо для распечатки сообщения конечному пользователю, информирующего его о том, что оно уже существует.

Я не уверен, как вы хотите структурировать код php, но psuedocode будет выглядеть примерно так:

If $testcount = 1 then do your insert.

else if $testcount = 0 then echo your message.
0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector