PDA

Просмотр полной версии : проверка на наличие


Doom123
17.01.2009, 12:03
Подскажите как изящнее проверять существуют ли данные в БД ... какбы при реге проверять скажем
емайл .... логин и т.п

у меня есть идея но она слишком громоздкая ...
может подскажите более изящьный способ ? =)

зарание спасибо!

BlackSun
17.01.2009, 12:18
$sql = "SELECT * FROM users WHERE username='".addslashes($_POST['username'])."' OR email='".addslashes($_POST['email'])."'"; // и тд
$result = mysql_query($sql);
if ($result AND mysql_num_rows($result) > 0)
{
...

типа так?)

[dei]
17.01.2009, 12:23
$sql = "SELECT * FROM users WHERE username='".addslashes($_POST['username'])."' AND email='".addslashes($_POST['email'])."'"; // и тд
$result = mysql_query($sql);
if (mysql_num_rows($result) > 0)
{
...

типа так?)
а чо, типа может быть много юзеров с одинаковыми логинами и паролями?

Doom123
17.01.2009, 12:32
BlackSun есиб так.. =( ... нада знать что иммено уже существует ... логин пасс или там ещё чтото =\\ поэтому конструкция получяется грамоздкой =\\

Doom123
17.01.2009, 12:43
мда и чё я раньше не дадумался чёт я туплю последнеевремя :D

$sql = "SELECT `username`,`email` FROM users WHERE username='".addslashes($_POST['username'])."' OR email='".addslashes($_POST['email'])."'";
$result = mysql_query($sql);
$fetch = mysql_fetch_assoc($result);

if($fetch != array())
{
if($fetch['username'] == $_POST['username'])
$error = "username alredy exist";
elseif($fetch['email'] == $_POST['email'])
$error = "email alredy exist";
}

ы =)


тему в мусарку плз

etc
17.01.2009, 17:05
кстати.лучше юзать mysql_real_escape_string

SMiX
18.01.2009, 01:57
Добавляй в конец запроса LIMIT 1
Я так полагаю, что предполагается выборка одной записи, а в твоём варианте мускуль будет перебирать все записи талицы.

Pashkela
18.01.2009, 02:05
А он и должен перебирать все записи, чтобы найти совпадения. Если алгоритм верный был ДО внедрения процедуры, такая запись будет только одна, если есть совпадения

SMiX
18.01.2009, 03:20
Но без условия LIMIT 1 он будет перебирать записи уже после того, как найдёт нужную, а это лишняя нагрузка на БД.

Chaak
18.01.2009, 13:27
Ставь поле unique, бд при занесении дубликата, возвратит ошибку, парси ее на предмет того, что поле не может быть продублировано -> выноси сообщение пользователю

Doom123
19.01.2009, 09:00
etc код у меня другой ... тот что я привёл этоо просто пример =)

ChaaK О_О зачем так извращятся?)...

SMiX +1 прав нада будет сделать =)

Pashkela он из БД выберет только 1но совпадение .. мне большене нада =)

Doom123
19.01.2009, 17:11
ChaaK где ты видел 2 запроса?

Chaak
19.01.2009, 18:39
1 - проверка наличия
2 - регистрация

if(@mysql_query("INSERT INTO {$this->prefix} users SET login='{$login}', pass='{$pass}"))
{
return true;
}
else
{
if(@stristr(mysql_error(),'duplicate'))
{
//уже есть
}
}

[x26]VOLAND
20.01.2009, 09:01
.... {$this->prefix} users ....
Omg, а не удобнее ли #__ ?

1 - проверка наличия
2 - регистрация

if(@mysql_query("INSERT INTO {$this->prefix} users SET login='{$login}', pass='{$pass}"))
{
return true;
}
else
{
if(@stristr(mysql_error(),'duplicate'))
{
//уже есть
}
}
проверка не должна основываться на принудительном вызове ошибки. Это крайне неправильный подход. Ну а определение типа ошибки методом поиска слова в ней - это конечно полный пипец.

Doom123
20.01.2009, 10:33
[x26]VOLAND +1 я ему говорил а он не верил)