Просмотр полной версии : проверка на наличие
Подскажите как изящнее проверять существуют ли данные в БД ... какбы при реге проверять скажем
емайл .... логин и т.п
у меня есть идея но она слишком громоздкая ...
может подскажите более изящьный способ ? =)
зарание спасибо!
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)
{
...
типа так?)
$sql = "SELECT * FROM users WHERE username='".addslashes($_POST['username'])."' AND email='".addslashes($_POST['email'])."'"; // и тд
$result = mysql_query($sql);
if (mysql_num_rows($result) > 0)
{
...
типа так?)
а чо, типа может быть много юзеров с одинаковыми логинами и паролями?
BlackSun есиб так.. =( ... нада знать что иммено уже существует ... логин пасс или там ещё чтото =\\ поэтому конструкция получяется грамоздкой =\\
мда и чё я раньше не дадумался чёт я туплю последнеевремя :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";
}
ы =)
тему в мусарку плз
кстати.лучше юзать mysql_real_escape_string
Добавляй в конец запроса LIMIT 1
Я так полагаю, что предполагается выборка одной записи, а в твоём варианте мускуль будет перебирать все записи талицы.
Pashkela
18.01.2009, 02:05
А он и должен перебирать все записи, чтобы найти совпадения. Если алгоритм верный был ДО внедрения процедуры, такая запись будет только одна, если есть совпадения
Но без условия LIMIT 1 он будет перебирать записи уже после того, как найдёт нужную, а это лишняя нагрузка на БД.
Ставь поле unique, бд при занесении дубликата, возвратит ошибку, парси ее на предмет того, что поле не может быть продублировано -> выноси сообщение пользователю
etc код у меня другой ... тот что я привёл этоо просто пример =)
ChaaK О_О зачем так извращятся?)...
SMiX +1 прав нада будет сделать =)
Pashkela он из БД выберет только 1но совпадение .. мне большене нада =)
ChaaK где ты видел 2 запроса?
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'))
{
//уже есть
}
}
проверка не должна основываться на принудительном вызове ошибки. Это крайне неправильный подход. Ну а определение типа ошибки методом поиска слова в ней - это конечно полный пипец.
[x26]VOLAND +1 я ему говорил а он не верил)
vBulletin® v3.8.14, Copyright ©2000-2026, vBulletin Solutions, Inc. Перевод: zCarot