Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Сравнить строку, неучитывая регистр
 
 автор: vorobey   (26.10.2010 в 23:00)   письмо автору
 
 

<?php
$result
["user_name"] = "Name";
$user_name     "name"//или  = "nAme"; 

if(mb_strtolower($result["user_name"],'utf-8') == mb_strtolower($user_name,'utf-8')) 
   echo 
"равны";
    else    { echo 
"не равны";}  
?>


Не пoлучается приравнять. Всегда не равны. Пробовал без mb_ то же самое.

  Ответить  
 
 автор: Лена   (26.10.2010 в 23:44)   письмо автору
 
   для: vorobey   (26.10.2010 в 23:00)
 

Если вам не нужно учитывать регистр при сравнении, так переведите все сначала в нижний регистр - mb_strtolower(), а после уже сравнивайте.

  Ответить  
 
 автор: psychomc   (26.10.2010 в 23:50)   письмо автору
 
   для: Лена   (26.10.2010 в 23:44)
 

а что он по-вашему сделал?

  Ответить  
 
 автор: psychomc   (26.10.2010 в 23:50)   письмо автору
 
   для: vorobey   (26.10.2010 в 23:00)
 

специально проверил, ваш скрипт работает правильно
(равны)

  Ответить  
 
 автор: vorobey   (27.10.2010 в 00:44)   письмо автору
 
   для: psychomc   (26.10.2010 в 23:50)
 

Так точно работает. Ошибки там нет..просто из базы не вытягивался.

Вот тут и проблема. "не в курю" логику проверки login-а .
Цель: не должно быть имен типа 'Andrey' . 'anDreY'
можно так 'a n d r e y'

скрипт проверки логина
<?php
    
########
    # LOGIN#
    // проверка на пустоту
    
if (empty($user_name)) 
        {
        
$err["error_login_empty"] = $lang_err["error_login_empty"];
        unset(
$_SESSION["user_name"]);
        }  
        else { 
        
$_SESSION["user_name"] = $user_name;
        
//$user_name = mb_strtolower($user_name,'utf-8');
                // проверка на корректность login
                
if(!name_check ($user_name))        $err["error_login"] = $lang_err["error_login"] ; 
                    {
                
$sql 'SELECT user_name 
                            FROM '
.users.
                            WHERE user_name="'
.mysql_real_escape_string($user_name).'" ' ;
                
$query mysql_query($sql);    
                
$result mysql_fetch_assoc ($query);
                echo 
"<b>".$result["user_name"]."</b>"// проверка вытаскивается или нет
                    // проверка на существование пользователя. Имена приравниваем в нижний регистр, для сравнения mb_ 'utf-8'
                    
if(mb_strtolower($result["user_name"],'utf-8') == mb_strtolower($user_name,'utf-8'))   $err["error_name"] = $lang_err["error_name"];
                        else    { 
                            
// проверка на колличество символов
                            
if(mb_strlen($user_name,'utf-8') < or mb_strlen($user_name,'utf-8') > 40)    {    $err["error_symbol"] = $lang_err["error_symbol"];        } 
                            }
                    }        
                } 
?>

не могу понять как сопоставить в имени поля 'user' логин если он с разным регистром, ведь если регистр имени не сопадает с именем записаном в таблице то тогда и запрос пустой приходит.
если знать что первая буде большая то это решаемо , а так я в потерянности.

ps тоесть имя 'Andrey' может быть, но только одно, безбукв разного регистра.

  Ответить  
 
 автор: psychomc   (27.10.2010 в 00:52)   письмо автору
 
   для: vorobey   (27.10.2010 в 00:44)
 

попробуйте использовать в запросе поиска пользователя LIKE %имя% например

  Ответить  
 
 автор: Trianon   (27.10.2010 в 08:14)   письмо автору
 
   для: psychomc   (27.10.2010 в 00:52)
 

Что это даст например?

  Ответить  
 
 автор: psychomc   (27.10.2010 в 10:17)   письмо автору
 
   для: Trianon   (27.10.2010 в 08:14)
 

выборку совпадающих имен

автору:
вот так можно попробовать

SELECT text FROM table WHERE UPPER(name) LIKE UPPER('%'.mysql_real_escape_string($user_name).'%')

или так

SELECT * FROM table WHERE name LIKE '%'.mysql_real_escape_string($user_name).'%' COLLATE кодировка

  Ответить  
 
 автор: Trianon   (27.10.2010 в 10:36)   письмо автору
 
   для: psychomc   (27.10.2010 в 10:17)
 

>выборку совпадающих имен

да нифига подобного.
потому что, например, под имя Доли сервер спокойно вернет запись Кондолиза

  Ответить  
 
 автор: psychomc   (27.10.2010 в 11:03)   письмо автору
 
   для: Trianon   (27.10.2010 в 10:36)
 

я надеюсь, что автор уже сам додумает как проставить % в запросе

  Ответить  
 
 автор: Trianon   (27.10.2010 в 11:14)   письмо автору
 
   для: psychomc   (27.10.2010 в 11:03)
 

> я надеюсь, что автор уже сам додумает как проставить % в запросе
Во первых, тогда уж их не проставлять нужно, а удалять.
Во вторых, операция LIKE (даже если закрыть глаза на возможное наличие процентов в самом имени) в этом вырожденном (без знаков маски) виде все равно не имет преимуществ перед прямым сравнением операндов. В отличие от недостатков. Вы уверены, что LIKE в полной мере воспользуется построенными индексами? Я вот чтобы да так нет.
В третьих, надежды, к сожалению, сбываются далеко не всегда.
Я вот надеюсь, что Вы перестанете выносить явную лажу сомнительные суждения в качестве советов...
А как-то бестолку.

  Ответить  
 
 автор: vorobey   (27.10.2010 в 11:31)   письмо автору
 
   для: Trianon   (27.10.2010 в 11:14)
 

Ну тогда остается по буквенное сравнение. запросов тогда многовато получится.

  Ответить  
 
 автор: psychomc   (27.10.2010 в 11:57)   письмо автору
 
   для: vorobey   (27.10.2010 в 11:31)
 

SELECT *
FROM table1
WHERE name = 'andrey'

в итоговую выборку попадает
Andrey и anDreY

судя по всему то что вам надо

(utf8_general_ci)

  Ответить  
 
 автор: Trianon   (27.10.2010 в 12:02)   письмо автору
 
   для: psychomc   (27.10.2010 в 11:57)
 

вот это совсем другое дело. :)

  Ответить  
 
 автор: psychomc   (27.10.2010 в 12:05)   письмо автору
 
   для: Trianon   (27.10.2010 в 12:02)
 

не было времени на тесты :)

  Ответить  
 
 автор: vorobey   (27.10.2010 в 12:04)   письмо автору
 
   для: psychomc   (27.10.2010 в 11:57)
 

да мне как раз и надо это, но в итоговую выборку не поподают имена если регистр разный.
У меня такой же sql (выше написал) .

  Ответить  
 
 автор: psychomc   (27.10.2010 в 12:06)   письмо автору
 
   для: vorobey   (27.10.2010 в 12:04)
 

какая кодировка у поля name?

  Ответить  
 
 автор: vorobey   (27.10.2010 в 12:10)   письмо автору
 
   для: psychomc   (27.10.2010 в 12:06)
 

блин. utf-8 bin
unicode - поставил все ок
Спасибо! капец какойто.
ps Везде ее проверял, а в юзерах на потом оставил...

  Ответить  
 
 автор: psychomc   (27.10.2010 в 12:12)   письмо автору
 
   для: vorobey   (27.10.2010 в 12:10)
 

бывает :)
пожалуйста

  Ответить  
 
 автор: psychomc   (27.10.2010 в 11:36)   письмо автору
 
   для: Trianon   (27.10.2010 в 11:14)
 

это всяко лучше чем ничего.
p.s а где ваш совет?

  Ответить  
 
 автор: Trianon   (27.10.2010 в 12:02)   письмо автору
 
   для: psychomc   (27.10.2010 в 11:36)
 

>это всяко лучше чем ничего.
Вот с этим постулатом я и несогласен. Категоричеси.
Ошибочный ответ хуже его отсутствия.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования