Вебмастеру

 
 
1812

Вопросы от новичков...

  • Категория: php
На часто задаваемые вопросы ищите ответы в теме http://vkontakte.ru/topic-267650_11331820

Если там нет ответа на Ваш вопрос - задавайте его здесь.
 
 
241

Алексей

  • группа: Гости
Лучше всего использовать уникальный ключ на поле логин в таблице БД.
Тогда при попытке вставить запись с существующим логином MySQL сервер будет выдавать ошибку "Duplicate Entry"

вариант no241 не очень подходит, потому что может произойти состояние гонки (http://http://ru.wikipedia.org/wiki/%D0%A1...BE%D1%81%D1%8...), если два пользователя одновременно будут регистрироваться с одним логином или один и тот же пользователь нажмет случайно два раза. Если все-таки хочется так, то нужно делать LOCK TABLE перед проверкой и вставкой, что бы быть уверенным что между проверкой и вставкой, никто ничего не добавил ;-)
 
 
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')
??
 
 
Регистрация

Популярные статьи

» Mozilla Firefox: помощь и взаимоподдержка. Спрашиваем, ...
» Вопросы от новичков...
» перешли ли вы 100% на линукс без установленной параллел ...
» Ваши любимые плагины и дополнения
» Ответы на вопросы по PHP
» Какие CMS ВЫ предпочитаете - (плюсы и минусы)
» FAQ: вопросы и ответы
» Вопросы и консультации
» Другие браузеры (голосование!)
» Зарплата PHP программиста