2010-12-07 5 views
2

Я создал форму на сайте, которая захватывает несколько полей, включая «электронную почту», и отправляет ее в базу данных, имеющуюся у меня с таблицей «данные». Я использую плагин jQuery Validate, чтобы убедиться, что все поля завершены, хотя я не могу дублировать адреса электронной почты в db.Как проверить дублируемую запись в БД?

Плагин пришел с подлинника по имени emails.php, который он называет при проверке полевых данных и вот код:

<?php 
$request = trim(strtolower($_REQUEST['email'])); 
$emails = array('[email protected]', '[email protected]', '[email protected]'); 
$valid = 'true'; 
foreach($emails as $email) { 
if(strtolower($email) == $request) 
    $valid = '"Thats already taken."'; 
} 
echo $valid; 
?> 

Этот фрагмент кода проверяет только те сообщения, которые перечислены. Есть ли способ запросить БД для поиска по «данным» таблицы и проверить «электронные письма», чтобы увидеть, есть ли дубликат и, надеюсь, отправить сообщение об ошибке, если это так?

Кроме того, сценарий, похоже, работает, когда я использую любой из электронных писем примера, поэтому он по существу «работает». Мне просто нужно настроить его, чтобы проверить БД.

ответ

2

Поместите ограничение уникальности в столбец электронной почты.

0

Вам просто нужно будет написать запрос, чтобы проверить, если адрес электронной почты в таблице:

$query = SELECT count(*) AS `total` FROM `data` WHERE `email` = '{$request}' 
$row = mysql_fetch_assoc(mysql_query($query)); 
if($row['total']) echo false; //exists 
else echo true; //doesn't exist 

редактировать означало «эхо», а не «возвращения»

1

Во-первых, поставить UNIQUE ограничение на столбец электронной почты. Затем, в знак вверх, выполните следующий запрос:

SELECT COUNT(*) as 'count' FROM `data` WHERE email = '[email protected]'; 
0

Вы могли бы сделать, возможно, код PHP, который проверяет базу данных для существующих значений с помощью команды mysql_num_rows.

Что-то вроде этого:

$result = mysql_query("SELECT email from accounts where email = $email_to_check"); 
$found = mysql_num_rows($result); 

if ($found > 0) { echo "Email already exists"; } 
else ..... 
2

Не используйте недостатки "SELECT, прежде чем INSERT" подход. Между вашим «SELECT» и последующим «INSERT» всегда будет условие гонки, если вы не находитесь в глобальной транзакции, и я сомневаюсь, что это так.

Вы должны установить ограничение UNIQUE на столбец электронной почты, а затем просто попытаться вставить новую запись и уловить ошибку SQL уникальности. Вы можете поймать ошибку, проверив код ошибки, для MySQL, например, это 1062 или 23000 в зависимости от драйвера.

+0

Я думал, что ошибки ловушки по дизайну являются ошибкой. (Я согласен с уникальностью, но не уверен, что ошибки прилова - это самый чистый способ - я обычно делаю то, что предлагает webbiedave + обработка ошибок, если два пользователя попытаются вставить одно и то же сообщение электронной почты после того, как они его не проверили). – Unreason 2010-12-07 16:47:46

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