проверка на наличие

Discussion in 'PHP' started by Doom123, 17 Jan 2009.

  1. Doom123

    Doom123 Elder - Старейшина

    Joined:
    11 Nov 2006
    Messages:
    749
    Likes Received:
    244
    Reputations:
    22
    Подскажите как изящнее проверять существуют ли данные в БД ... какбы при реге проверять скажем
    емайл .... логин и т.п

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

    зарание спасибо!
     
  2. BlackSun

    BlackSun Banned

    Joined:
    1 Apr 2007
    Messages:
    989
    Likes Received:
    1,168
    Reputations:
    446
    $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)
    {
    ...

    типа так?)
     
    #2 BlackSun, 17 Jan 2009
    Last edited: 17 Jan 2009
    1 person likes this.
  3. [dei]

    [dei] Active Member

    Joined:
    24 Nov 2008
    Messages:
    171
    Likes Received:
    112
    Reputations:
    5
    а чо, типа может быть много юзеров с одинаковыми логинами и паролями?
     
    1 person likes this.
  4. Doom123

    Doom123 Elder - Старейшина

    Joined:
    11 Nov 2006
    Messages:
    749
    Likes Received:
    244
    Reputations:
    22
    BlackSun есиб так.. =( ... нада знать что иммено уже существует ... логин пасс или там ещё чтото =\\ поэтому конструкция получяется грамоздкой =\\
     
  5. Doom123

    Doom123 Elder - Старейшина

    Joined:
    11 Nov 2006
    Messages:
    749
    Likes Received:
    244
    Reputations:
    22
    мда и чё я раньше не дадумался чёт я туплю последнеевремя :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";
    }

    ы =)


    тему в мусарку плз
     
    #5 Doom123, 17 Jan 2009
    Last edited: 17 Jan 2009
  6. etc

    etc Elder - Старейшина

    Joined:
    16 Feb 2008
    Messages:
    113
    Likes Received:
    175
    Reputations:
    1
    кстати.лучше юзать mysql_real_escape_string
     
    1 person likes this.
  7. SMiX

    SMiX Elder - Старейшина

    Joined:
    25 Jul 2005
    Messages:
    227
    Likes Received:
    55
    Reputations:
    29
    Добавляй в конец запроса LIMIT 1
    Я так полагаю, что предполагается выборка одной записи, а в твоём варианте мускуль будет перебирать все записи талицы.
     
    1 person likes this.
  8. Pashkela

    Pashkela Динозавр

    Joined:
    10 Jan 2008
    Messages:
    2,750
    Likes Received:
    1,044
    Reputations:
    339
    А он и должен перебирать все записи, чтобы найти совпадения. Если алгоритм верный был ДО внедрения процедуры, такая запись будет только одна, если есть совпадения
     
    1 person likes this.
  9. SMiX

    SMiX Elder - Старейшина

    Joined:
    25 Jul 2005
    Messages:
    227
    Likes Received:
    55
    Reputations:
    29
    Но без условия LIMIT 1 он будет перебирать записи уже после того, как найдёт нужную, а это лишняя нагрузка на БД.
     
  10. Chaak

    Chaak Elder - Старейшина

    Joined:
    1 Jun 2008
    Messages:
    1,059
    Likes Received:
    1,067
    Reputations:
    80
    Ставь поле unique, бд при занесении дубликата, возвратит ошибку, парси ее на предмет того, что поле не может быть продублировано -> выноси сообщение пользователю
     
    1 person likes this.
  11. Doom123

    Doom123 Elder - Старейшина

    Joined:
    11 Nov 2006
    Messages:
    749
    Likes Received:
    244
    Reputations:
    22
    etc код у меня другой ... тот что я привёл этоо просто пример =)

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

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

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

    Doom123 Elder - Старейшина

    Joined:
    11 Nov 2006
    Messages:
    749
    Likes Received:
    244
    Reputations:
    22
    ChaaK где ты видел 2 запроса?
     
  13. Chaak

    Chaak Elder - Старейшина

    Joined:
    1 Jun 2008
    Messages:
    1,059
    Likes Received:
    1,067
    Reputations:
    80
    1 - проверка наличия
    2 - регистрация

    PHP:
     if(@mysql_query("INSERT INTO {$this->prefix} users SET login='{$login}', pass='{$pass}"))
    {
       return 
    true;
    }
    else
    {
        if(@
    stristr(mysql_error(),'duplicate'))
        {
       
    //уже есть
        
    }
    }
     
    #13 Chaak, 19 Jan 2009
    Last edited: 19 Jan 2009
    2 people like this.
  14. [х26]VОLАND

    [х26]VОLАND Elder - Старейшина

    Joined:
    7 Jun 2006
    Messages:
    513
    Likes Received:
    756
    Reputations:
    218
    Omg, а не удобнее ли #__ ?

    проверка не должна основываться на принудительном вызове ошибки. Это крайне неправильный подход. Ну а определение типа ошибки методом поиска слова в ней - это конечно полный пипец.
     
    #14 [х26]VОLАND, 20 Jan 2009
    Last edited: 20 Jan 2009
    1 person likes this.
  15. Doom123

    Doom123 Elder - Старейшина

    Joined:
    11 Nov 2006
    Messages:
    749
    Likes Received:
    244
    Reputations:
    22
    [x26]VOLAND +1 я ему говорил а он не верил)
     
    1 person likes this.