Forum Webscript.Ru

Программирование => PHP => Тема начата: Neter от 22 Июля 2002, 20:31:09

Название: Проверка ников
Отправлено: Neter от 22 Июля 2002, 20:31:09
Вобщем у меня есть табтица ников в БД при регистрации.. воот.. и вопрос как избежать подмены ников допустим НИК и HИК.. Зрительно они одинаковы но БД их воспринимает как разные.. К!=K потому что одна из них русская а другая английская...
Название: Проверка ников
Отправлено: Covex от 22 Июля 2002, 20:43:06
самый верный и дибильный способ ограничить ввод (т.е. только латиница)
а иначе это мало реально, имхо... больно много писанины, а выхлоп близок к нулю..
Название: Проверка ников
Отправлено: Neter от 22 Июля 2002, 20:53:59
А может чё-нить  готовое есть?
Название: Проверка ников
Отправлено: GotZfild от 22 Июля 2002, 21:48:58
Neter
Ну напиши сам функцию, что-типа

function foo($nick) {
      return strtr($nick, "aAcCkKMoOTxXBeEpP", "аАсСкКМоОТхХВеЕрР");
}

а потом по оригинальному значению и возвращенному функцией ищи в базе.
Название: Проверка ников
Отправлено: Макс от 22 Июля 2002, 22:01:39
Кажись в димином чате была такая функция. Покопайся в коде, там даже комментарии есть :)
Название: Проверка ников
Отправлено: Neter от 22 Июля 2002, 22:54:02
Макс, Если честно я не знаю Диму.. И тем более не знаю где лежит его чат :(
Название: Проверка ников
Отправлено: Neter от 22 Июля 2002, 22:59:12
GotZfild, я чего-то не пойму.. Допустим чувак вводит Neter, то есть первая буква (e) английская а вторая русская.. это сработает?
Название: Проверка ников
Отправлено: ThE0ReTiC от 22 Июля 2002, 23:47:26
Neter
Нет конечно.
У русской и английской е разные ASCII коды.
Так что совпадения не будет.
Название: Проверка ников
Отправлено: Neter от 23 Июля 2002, 00:01:14
Хмм... тогда как? Запретить нахрен русские ники?
Название: Проверка ников
Отправлено: Neter от 23 Июля 2002, 00:50:24
Так, народ, зацените фишку:


$str = "HiK";
$str2 = "НiK";

function foo($str){
$str = str_replace("а", "a", $str);
$str = str_replace("А", "A", $str);
$str = str_replace("В", "B", $str);
$str = str_replace("Е", "E", $str);
$str = str_replace("е", "e", $str);
$str = str_replace("У", "Y", $str);
$str = str_replace("у", "y", $str);
$str = str_replace("Р", "P", $str);
$str = str_replace("р", "p", $str);
$str = str_replace("О", "O", $str);
$str = str_replace("о", "o", $str);
$str = str_replace("С", "C", $str);
$str = str_replace("с", "c", $str);
$str = str_replace("Т", "T", $str);
$str = str_replace("М", "M", $str);
$str = str_replace("К", "K", $str);
$str = str_replace("Н", "H", $str);
return $str;
}

if (foo($str) == foo($str2)){
echo "Ники одинаковы!";
}

Незнаю правильно ли я сообразил...
И незнаю как это будет в плане быстродействия... Но эта операция в принцепе будет выполнятся только один раз при регистрации...
Название: Проверка ников
Отправлено: ThE0ReTiC от 23 Июля 2002, 01:28:21
Neter
Да зпарети ты их в крайнем случае.
Зачем они?
Название: Проверка ников
Отправлено: Covex от 23 Июля 2002, 01:54:20

if (preg_match("/[а-я]+/i",$nik)) {
echo "ты блин еще на арабском напиши";
}


но лучше яваскриптом проверить до сабмита формы...
Название: Проверка ников
Отправлено: Tronyx от 23 Июля 2002, 11:12:10
Цитировать
Так, народ, зацените фишку:
PHP:
.....

Ну ты блин гонишь. Тебе же GotZfild тоже самое давно сказал, только бестрее использовать strtr, а не str_replace.
[OFF]Извини за грубость[/OFF]

А Димин чат это насколько я знаю на http://www.php.spb.ru
Название: Проверка ников
Отправлено: Neter от 23 Июля 2002, 12:01:31
Всё, я понял.. GotZfild с меня бутылка пива.. Хотя.. Нет.. ящик, сенкс очень помог :)
Название: Проверка ников
Отправлено: GotZfild от 23 Июля 2002, 12:11:35
Neter
Да плюнь ты на это. И в Димином чате, насколько я помню, этого не было. Там было перевод транслита на русский.
Если уж очень надо, то вот функция, которая возвращает массив с различными вариациями ника:

function foo($nick) {
      $eng = "aAcCkKMoOTxXBeEpP";
      $rus = "аАсСкКМоОТхХВеЕрР";
      $nicks[0] = $nick;
      for ($i = 0; $i < strlen($eng); $i++) {
            $new_nick = str_replace($eng[$i], $rus[$i], $nick);
            if ($new_nick != $nick) {
                  $nicks[] = $new_nick;
                  $nick = $new_nick;
            }
      }
      return $nicks;
}
Название: Проверка ников
Отправлено: Neter от 23 Июля 2002, 12:20:21
Ещё раз сенкс :)
Название: Проверка ников
Отправлено: Макс от 23 Июля 2002, 13:24:35
GotZfild
Цитировать
И в Димином чате, насколько я помню, этого не было
в файле __other.php смотрел? ;)

Neter
Дима - это автор php.spb.ru а адрес чата - chat.php.spb.ru
Название: Проверка ников
Отправлено: GotZfild от 23 Июля 2002, 14:33:37
Макс
Нашел. Так я же и написал
Цитировать
насколько я помню

Но все равно у него разрешено только
Цитировать
использовать либо только русские, либо только английские буквы (но не их комбинацию).

[OFF]Что-то сегодня форум уж очень активный[/OFF]
Название: Проверка ников
Отправлено: ThE0ReTiC от 23 Июля 2002, 14:39:23
Цитировать
Что-то сегодня форум уж очень активный

[off]Ага. заняться видимо нечем[/off]
Название: Проверка ников
Отправлено: Evgeny от 23 Июля 2002, 15:05:19
Covex
Цитировать
но лучше яваскриптом проверить до сабмита формы...

Нет, не лучше, может быть быстрее и меньше ресурсов требует, но на сервере всё равно проверять нужно. Думаю понятно, почему...
Название: Проверка ников
Отправлено: Tronyx от 23 Июля 2002, 15:29:04
Цитировать
Ага. заняться видимо нечем

[OFF]У меня в Ростове дождь был слабый конечно, но всё же вот тоже каждый час-два просматриваю форум.[/OFF]
Название: Проверка ников
Отправлено: Neter от 23 Июля 2002, 23:52:31
Люди, извините за офф топ.. просто не хочу на каждый глупый вопрос тему создавать...

Как загнать массив в таблицу(которая в mysql)?
Точнее мне надо сделать UPDATE тем полям знаначения которых совпадают со значенияи в массиве.. что-то типа

mysql_query("UPDATE users SET active = 1 WHERE user_id = 1");

Но для кучи user_id ...
Название: Проверка ников
Отправлено: Макс от 24 Июля 2002, 00:21:42
mysql_query("UPDATE users SET active = 1 WHERE user_id  IN (".implode(\',\',$array).")");
примерно так