|
На часто задаваемые вопросы ищите ответы в теме http://vkontakte.ru/topic-267650_11331820
Если там нет ответа на Ваш вопрос - задавайте его здесь.
242
Евгений
Лучше всего использовать уникальный ключ на поле логин в таблице БД.
Тоесть с id в таблице както связать?
243
Mr
select count(*) FROM users where username='Vasya'.
if > 1, say "good bye try again" else Insert into.... vot i vse.
244
Евгений
а можете объяснить смысл команды select count?
и мне ведь еще надо сравнивать не с определённым именем... тоесть не просто 'Vasya,а $login=$_POST['login']. Выходит так надо: select count * FROM players where login='$_POST['login']'; ?
245
Mr
http://http://dev.mysql.com/doc/refman/5.1...counting-rows...
$login=$_POST[....]; // проделайте все что надо с переменной, чтобы не было иньекций. select count (*) FROM players where login=$login
246
Алексей
#244
Хочу повторить про состояние гонки. У меня был примерно такой же код по-началу. Но в один прекрасный момент я обнаружил повторяющиеся логины. Поэтому самый удобный способ избежать дублей - уникальный ключ
247
Евгений
Алексей Aka~Android Вишняков,каким образом реализовать этот уникальный ключ?
248
Mr
Пиши хранимую процедуру - не будет состояния гонки.
отлично удобно использовать VARCHAR(50) как ключ! а кто о прозводительности будет думать?
249
Евгений
Блин,я просто новичёк в этом,не понимаю=)
может есть у кого форма регистрации/авторизации?Я бы в ней разобрался,думаю... если кто скинет на zik43@http://yandex.ru буду премного благодарен:)
250
Александр
"а кто о прозводительности будет думать?"
о производительности будем думать когда понадобится и в том месте где это нужно. делать логин индексом по моему достаточно логично. Алексей Aka~Android Вишняков предложил самый надежный и при этом простой в реализации метод. Но все равно придется при регистрации проверять на дубликат, дабы выдать адекватное сообщение юзеру. Уникальный ключ делается через любой клиент к базе данных. Очень удобно через phpMyAdmin, заходим в структуру таблицы, и напротив поля выбираем с помощью радио-кнопок что оно является уникальным ключом(U). select count(*) from... - это подсчет кол-ва строк в таблице Учим теорию баз данных и азы sql!
251
Алексей
#248
Ключ создается при создании таблицы.( или Alter Table если аблица уже есть) Синтаксис не помню http://http://dev.mysql.com/doc/refman/5.0...create-table.... Если используешь пхпМайАдмин, то там это делается через веб интерфейс. Где список ключей (primary итд) есть поле добавить ключ. Выбираешь там поле логин и тип Unique. #249 > Пиши хранимую процедуру - не будет состояния гонки. Тогда уже тригер целый нужно писать > кто о прозводительности будет думать? Поверь поиск по не ключевому полю - это гораздо хуже чем перестройка индекса при добавлении. Причем поиск происходит не только при создании пользователя, но и при авторизации, что случается гораздо чаще. Так что один запрос на вставку в ключевое поле - гораздо менее накладно чем 10 поисков по неключевому.
252
Игорь
#239 Спасибо )))
253
Евгений
Да,я через phpMyAdmin смотрю базы...
Идею вы хорошую подкинули,попробую реализовать.:)
254
Александр
#247 про уникальный ключ само собой, просто если ключ уникален, то пишешь обычно какой-нить try{}catch(){} а так проверил на каунт, но правда LOCK TABLE реально нужное дело :(( или просто проверять на каунт, а потом, смотреть добавлен юзер или нет, если нет, то какой-то косяк случился :((
255
Алексей
> а потом, смотреть добавлен юзер или нет
потом просто посмотреть ошибку. Если она будет Duplicate key entry login значит такой пользователь уже есть. Или mysql_insert_id проверять, но правда есть верятность что он содержит старое значение
256
Александр
"потом просто посмотреть ошибку."
не нравится мне такой подход
257
Алексей
В принципе есть в нем что-то быдлокодерское)
По хорошему должен быть способ проверить вставилась запись или нет без выполнения дополнительного запроса на выборку! mysql_insert_id?
258
Виктор
Возможно ктото знает учебник по Gdlib или хотябы примеры понятные.
Документацию я нашёл но понять как использовать немогу.
259
Сергей
Прочитав коменты, хочу поделиться своим мнением.
Делать поле логин уникальным вполне нормально если поиск происходит по этому полю т.е. WHERE 'поле', а так вполне достойное решение! Процедуры и тригеры только с 5 версии MYSQL и не на всех бесплатных хостингах поддерживается. Можно при регистрации дать возмость пользователю проверить есть ли желаемый логин или нет
260
Константин
чо за странное голосование? канеш первый кандидат.
261
Константин
Обьясните плиз функцию.. (или лучше прочитайте ее)..
if($num % 2==0){ } знак процента - знак деления, так?.. где можно посмотреть все эти тонкости.. ?
262
Mr
сумма по модулю два, операция XOR - исключающее или.
Грубо говоря здесь - проверяет на кратность. 0 % 2 =0 1 % 2 = 1 2 % 2 = 0 3 % 2 = 1 4 % 2 = 0. ....
263
Алексей
Вообще процент - это остаток от деления.
http://http://www.php.net/manual/ru/langua...perators.arit... аналог паскалевского "mod" в твоем случае, если делится на 2 без остатка "if($num % 2==0)" значит $num - четное, в противном случае - нечетное
264
Константин
спасибо парни..
265
Константин
стоит ли в практике заострять внимание только на пхп, либо нужно еще владеть явой?
все ли программерят на линухе?
266
Александр
работаю из под линукса, в виндовсом контактирую только по нужде, типа глюк в IE отловить.
под "явой" наверно имелся ввиду javas?1?ript (очень не люблю когда путают, это разные языки!). его знать надо. мимо него пройти все равно не получится.
267
Константин
хм.. ну вот все кроме пхп, мускл, хтмл,сиэсэс.. лес темный..
хм.. а вот реализация окошка типа выбор даты - делается при помощи javas?1?ript ?..
268
Mr
а я пишу как на линухе, так и на винде под .NET ;)
java s cript- придется все равно. Выбор окошка даты - да это Жабаскрипт, или VB Script ;)
269
Сергей
Простая java тоже необходима для написания аплетов, 3 раза очень спасало!!
Парни, Silverlight кто-нибудь юзал, поделитесь вечатлениями!
270
Константин
ребят, а глупый вопрос..
Как разбить строку : Иванов Иван Иваныч по пробелам.. и забить строку в массив с индексом: фамиилия имя очество. тесть чтоб было $name=array('Lastname'=>'Ivanov','Firstname'=> ;'Ivan','Midlename'=>'Ivanovich') ?? |


Алексей
Тогда при попытке вставить запись с существующим логином MySQL сервер будет выдавать ошибку "Duplicate Entry"
вариант no241 не очень подходит, потому что может произойти состояние гонки (http://http://ru.wikipedia.org/wiki/%D0%A1...BE%D1%81%D1%8...), если два пользователя одновременно будут регистрироваться с одним логином или один и тот же пользователь нажмет случайно два раза. Если все-таки хочется так, то нужно делать LOCK TABLE перед проверкой и вставкой, что бы быть уверенным что между проверкой и вставкой, никто ничего не добавил ;-)