Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   PHP, PERL, MySQL, JavaScript (https://forum.antichat.xyz/forumdisplay.php?f=37)
-   -   проверка на наличие (https://forum.antichat.xyz/showthread.php?t=101661)

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

Цитата:

Сообщение от BlackSun
$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 - регистрация

PHP код:

 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

Цитата:

Сообщение от ChaaK
PHP код:

.... {$this->prefixusers .... 


Omg, а не удобнее ли #__ ?

Цитата:

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

PHP код:

 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 я ему говорил а он не верил)


Время: 19:38