Я создаю сайт для бронирования мероприятий. У меня есть 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());
}
При создании таблицы добавьте уникальный атрибут в поля, которые вы хотите запретить, что-то вроде этого
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)
Надеюсь, это поможет вам; Если у вас нет уникального идентификатора, я считаю, что он подойдет вам лучше всего в том, что вам нужно; Обратите внимание, что это не полный код; Вы должны добавить некоторые данные к другой, чтобы соответствовать вашему вопросу;
// 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"; }
Вам нужно создать уникальный (составной) индекс для столбцов, которые вы хотите быть уникальными. Вы можете игнорировать свой ПК при создании уникального индекса. В вашем случае ваш 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.