MySQL/unique/die

9 отговора 291 прегледа
#1

MySQL/unique/die

И друг път е дискутиран подобен проблема за това какъв метод да се изплозва за да се провери, когато един юзър се регистрира, дали някой вече е взел сътвентите юзърнейм и парола. Сега обаче въпроса е:

колоните:
user_id primary key,
pass unique,

когато, към заявката за вмъкване на информацията в тези полета, използвам or die(mysql_error()) се появява едно доста хубаво на пръв поглед съобщение за грешка от рода на

Dublicate entry 'traicho' for key 1

или

Dublicate entry 'nhy234' for key 2

та въпроса ми е как вместо "key 1" или "key 2", да получа съобщение от вида:

Dublicate entry 'traicho' for username

Пробвах в die() да пиша разни работи но, не се получава. Някакви идей?

Отговор
в отговор на burov #2

Re: MySQL/unique/die

Множествено число на идея е идеи не идей

Встрани от темата в твоята таблица има адски погрешна логика. Говоря за уникална парола. Това е "ела Вълчо ме изяж"

Значи регистрирам си аз нов потребител и почвам да си сменям паролата, докато ми я откаже (с каквато и да е грешка) - значи вече си имам ПАРОЛА!!!! Намирането на валиден потребител или на списък на всимки потребители е далеч по-лесно.

Да не говорим пък, че Dublicate entry 'nhy234' for key 2 подсказва, че си пазиш паролите в прав текст в базата данни - има много и нашироко коментирани начини за криптиране.

Нататък въпросът ти изобщо не е за Бази Данни а за PHP или по-добре за Програмиране.

Първото трябва да подтиснеш съобщението за грешка - в PHP се прави с @ т.е. @mysql_query( ...

Второто е да си напишеш твое съобщение ... if mysql_error() ....

salle.online.bg/sig
Отговор
в отговор на salle #3

Re: MySQL/unique/die

Знам как да подтисна съобщението за грешка с @, знам че мога да си напиша и мое съобщение като част от die() обаче при каквато и да е грешка (независимо дали става съпрос за повтарящо се username или password) ще имам едно и също съобщение, а аз искам съобщението за грешка да казва каква точно е грешката, т.е. кое се повтаря - username или паролата.

Отговор
в отговор на burov #4

Re: MySQL/unique/die

ми аз го правя с една допълнителна заявка преди да инсертвам:
if(mysql_num_rows(mysql_query("SELECT * FROM table_name WHERE username='$username')))
{
i tuka syob6tenieto...
}
Е, малко е кофти допълнителна заявка, ама поне върши работа
Пък за парола е много прав salle, тъпо е да проверяваш, какво, ако се повтаря?

Кин Дза Дза

Отговор
в отговор на voyager #5

errno=1062

ако не се лъжа е duplicate record ;)

bofh
Отговор
в отговор на bofh #6

Re: Я гледай :)

Къде се загуби бе човече?

salle.online.bg/sig
Отговор
в отговор на bofh #7

Re: errno=1062

Имаш предвид да провери след като получи mysql_error() ли? Супер идея, мислех си нещо такова .
if($result=myslq_error()){
switch($result){
case 1062:
//kod nekyf
break;
}
}

Правилно ли съм те разбрал?


I want to walk into the lights

Отговор
в отговор на burov #8

Re: MySQL/unique/die

Kакто ти казаха, не изисквай уникална парола... може би уникална комбинация юзер/парола... т'ва последното пак е на майтап, ама един приятел преди време ми разказваше как е писал POP3 сървър за много домейни, всеки с много мейли, като го попитах по едно време как различава на кой домейн се е вързал човека /щото каза че юзърнейма за мейл клиента е само неговия юзърнейм, без домейна/, той казва "не различавам"... аз веднага му изтъквам голямата вероятност всеки домейн да си има webmaster или info и... той ми каза, че ги различава по паролата, която праща... направо паднах

А иначе по темата, аз предпочитам да ползвам

INSER IGNORE INTO table_name .....

и в PHP проверяваш mysq_affected_rows(), ако е минало, получаваш 1, ако не е:0...

ViruS
Отговор
в отговор на burov #9

Re: MySQL/unique/die

>> а аз искам съобщението за грешка да казва каква точно е грешката, т.е. кое се повтаря - username или паролата

Парсираш си съобщението за грешка и разбираш в кой ключ е конфликта ;-)

Ама все пак не изисквай уникалма парола...

ViruS
Отговор
в отговор на salle #10

3gpacmu salle :)

бях малко отпуск и на море :р

bofh
Отговор