создание алфавитного индекса с выборкой по алфавиту

czech

Новичок
у меня база в utf8
и ниже привеженный код выводит
вот это

PHP:
for ($q=192; $q<224; $q++) {
echo "<a href=people.php?q=".chr($q)." >".chr($q)."</a>"; //перебираем и выводим все символы русского алфавита, одновременно делая их сслыками на скрипт с передачей самого символа в качестве параметра
}
echo '<a href="people.php?q=all">Все</a><br>'; //добавляем в конец индекса "Все" - чтобы выбрать все :)
if (isset($_GET['q'])) //если переменная q передана методом GET, то
{
$q=$_GET['q']; //переопределяем переменную (иногда надо)
if ($q=='all') //если перемнная q равна all, то делаем выборку всех
{
$sql ="SELECT *  FROM `persons`  ORDER BY `name`";	

$result = mysql_query($sql) or die(mysql_error());

}
else //иначе делаем выборку тех фамилий, которые начинаются на букву, переданную в ссылке в качестве значения переменной $q
{
$sql ="SELECT *  FROM `persons`  WHERE LCASE(name) LIKE '$q%' ORDER BY `name`";	
$result = mysql_query($sql) or die(mysql_error());

}
while ($row=@mysql_fetch_array($result)) //выводим полученные данные в цикле
{

echo "<a  href='human.php?id=".$row['personid']."'>".$row['name']."  </a><hr>";
}
}
что не так
 

Вложения

czech

Новичок
вопросики подсказывают, что дело в chr($q)
а чем заменить
а может в этом $q=192; $q<224;
странно почему русские ASCII символы не правильно отображаются?
перевожу страницу в кодировку windows-1251 то они корректно выводятся (кроме конечно содержания страницы)
 

ksnk

прохожий
PHP:
$alphabet=str_split('АБВГДЕЁЖЗИКЛМНОПРСТУФХЦЧШЩЬЫЪЭЮЯ',2); //is it really UTF-8 with all russian letters?

for ($q=0; $q<count($alphabet); $q++) {
   echo "<a href=people.php?q=".urlencode($alphabet[$q])." >".$alphabet[$q]."</a>";
}
простой str_split здесь можно применить, поскольку известно, что это текст в utf-8, все буквы русские и других нет.
 

флоппик

promotor fidei
Команда форума
Партнер клуба
PHP:
$alphabet=str_split('АБВГДЕЁЖЗИКЛМНОПРСТУФХЦЧШЩЬЫЪЭЮЯ',2); //is it really UTF-8 with all russian letters?

for ($q=0; $q<count($alphabet); $q++) {
   echo "<a href=people.php?q=".urlencode($alphabet[$q])." >".$alphabet[$q]."</a>";
}
простой str_split здесь можно применить, поскольку известно, что это текст в utf-8, все буквы русские и других нет.
PHP < 5.4
 

флоппик

promotor fidei
Команда форума
Партнер клуба
Помнится, сказали что в 5.4 обычные строковые функции начали правильно работать с мультибайтными строками, и mb_* больше не нужны.
 

czech

Новичок
PHP:
$alphabet=str_split('АБВГДЕЁЖЗИКЛМНОПРСТУФХЦЧШЩЬЫЪЭЮЯ',2); //is it really UTF-8 with all russian letters?

for ($q=0; $q<count($alphabet); $q++) {
   echo "<a href=people.php?q=".urlencode($alphabet[$q])." >".$alphabet[$q]."</a>";
}
простой str_split здесь можно применить, поскольку известно, что это текст в utf-8, все буквы русские и других нет.
и еще как сделать чтоб небыло ссылки на выбранную букву
 

Absinthe

жожо
Помнится, сказали что в 5.4 обычные строковые функции начали правильно работать с мультибайтными строками, и mb_* больше не нужны.
Ты ошибся.
В 5.4 просто кодировка по умолчанию для таких функций(необязательный параметр) стала UTF-8.

А та фишка, про которую ты говоришь, есть давно, но архитектурно-кривая( http://php.net/manual/en/mbstring.overload.php )
 

czech

Новичок
возник следующий вопрос
вот навоял
PHP:
$alphabet=str_split('АБВГДЕЁЖЗИКЛМНОПРСТУФХЦЧШЩЬЫЪЭЮЯ',2); //is it really UTF-8 with all russian letters?
$alphabets=str_split('ABCDEFGHIJKLMNOPQRSTUVWXYZ',1);

for ($q=0; $q<count($alphabet) or $q<count($alphabets); $q++) {

   $letters.= "<li><a href=alph.php?type=".$type."&alphovite=".urlencode($alphabet[$q]).">".$alphabet[$q]."</a></li>";

}
for ($q2=0; $q2<count($alphabets) or $q2<count($alphabets); $q2++) {
 $lettersENG.= "<li><a href=alph.php?type=".$type."&alphovite=".urlencode($alphabets[$q2]).">".$alphabets[$q2]."</a></li>";
}

echo $letters;
echo $lettersENG;
теперь мне надо отделить что выбрал пользователь если русские буквы то сделать такой запрос
PHP:
$query="select `cinemaid`, `rusname`, `engname`, `country`, `year`, `rating`, `genre`, `ratingnum`, `online` from `cinemas` where found=1 and `rusname` like '".$lnk."%' 
and(".$typeconstr.") order by `rusname` asc";
если латинские
то такой
PHP:
$query="select `cinemaid`, `rusname`, `engname`, `country`, `year`, `rating`, `genre`, `ratingnum`, `online` from `cinemas` where found=1 and `engname` like '".$lnk."%' and(".$typeconstr.") order by `engname` asc";
 

ksnk

прохожий
czech И что происходит, если вывести var_dump($_GET) в том месте, которое должно формировать запрос?
 

czech

Новичок
czech И что происходит, если вывести var_dump($_GET) в том месте, которое должно формировать запрос?
а пример условия можно?!
PHP:
$alphabet=str_split('АБВГДЕЁЖЗИКЛМНОПРСТУФХЦЧШЩЬЫЪЭЮЯ',2); //is it really UTF-8 with all russian letters?
$alphabets=str_split('ABCDEFGHIJKLMNOPQRSTUVWXYZ',1);
var_dump($alphabet,$alphabets);
что здесь
if что здесь???
{
запрос
}
else
{
запрос
}
p.s. я не силен в программировании (я только учусь)
просьба отвечать более развернуто
 
Сверху