2015-01-18 4 views
0

Прежде всего, я использую MYSQL, потому что серверы моего университета не обновили свои servers для `mySQLI '.Остановить пользователя от подписки на событие два раза

Table

Выше приведена таблица, тест собирается посещать все события, но я не хочу тест, чтобы снова присутствовать на мероприятии.

if(isset($_REQUEST['register'])!=''){ 

$user = $name; 
$eventTitle = $_REQUEST['select']; 

$result = mysql_query("SELECT Event FROM attend where Event != '$eventTitle'"); // run the query and assign the result to $result 
while($table = mysql_fetch_array($result)) { // go through each row that was returned in $result 

     echo $table[0]; 
     if($table[0] == $eventTitle) 
     { 
      echo "dont add"; 
     } 
     else 
     { 
      echo"add"; 
     } 
} 

/*$sql="INSERT INTO `assignment`.`attend` (`User`, `Event`) VALUES ('$user', '$eventTitle')"; 

$res=mysql_query($sql); 

if($res) 
{ 
    Echo "Record successfully inserted"; 
    //header("location: myTickets.php"); 
} 
Else 
{ 
    Echo "There is some problem in inserting record"; 
    //echo $name; 

} 

Я попытался пробегаем по строке в «событие», чтобы увидеть, если значение там равно значению выбранного. Но поскольку это цикл while, он будет продолжать цикл.

код Псевдо мудрый

if(the value selected is == the value in the table && and the name is == to data in the User row then do not add, else add; 
+0

добавить уникальный ключ к пользователю и событию –

+0

применить уникальность на уровне базы данных. затем просто * попробуйте * 'INSERT'. –

+0

MySQLi был представлен в PHP 5.0. В вашем университете работает PHP4? Это ... впечатляет, но да, возможно. – Keelan

ответ

2

Не делайте этого в PHP. Вместо этого создайте ключ UNIQUE на user и event (см. here, как это сделать). Таким образом, это один ключ на два столбцов. Это означает, что любая пара значений в этих двух столбцах может появляться только один раз. Тем не менее, пользователи могут посещать несколько событий, а в мероприятиях могут участвовать несколько пользователей.

Нравится программа? Поделись с друзьями!

Кроме того, этот цикл while не будет продолжать цикл: он заканчивается, когда результатов больше нет.

Еще одна идея, более с точки зрения UX, - предоставить пользователям, которые уже подписались на мероприятие, не возможность подписаться снова - например, изменив кнопку подписки на кнопку отмены подписки или полностью ее удалив. Однако всегда убедитесь, что пользователи, которые начнут настраивать запросы, не могут еще подписаться во второй раз - например, добавив ключ UNIQUE.

+1

Создайте уникальный ключ для пользователя и события. Ах, я вижу, это имеет смысл и не требует много сценариев. Да, цикл while был быстрым тестом/реализацией без помех. Да, я добавляю кнопку снятия, поэтому пользователи могут перестать ходить на мероприятие. Именно здесь полезен ключ UNIQUE. – Moynul

+0

Работает как очарование, большое спасибо. Внедрение вывода будет просто сделать запрос, который сбрасывает эти два значения правильно? – Moynul

+0

@ Мойнул Счастлив услышать - да, точно. В качестве альтернативы, возможно, вы захотите включить функцию, которую вы можете проверить, какие пользователи подписаны и сняты, вы можете добавить для нее еще один столбец. Но падение - это самое простое решение. – Keelan

0

Извлекает строку с событием, и если вы получите результат. Затем добавьте.

0

Они не будут вызывать ваш исключая события из вашего поискового запроса с Event! = «$ EVENTTITLE»

0

Создайте уникальный индекс для пользователя/события комбинации (это также идеальный первичный ключ). При столкновении вы получите уникальное нарушение ограничений

Смежные вопросы