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

Форум PHP

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

 

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

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

тема: HELP: Алфавитный указатель на php
 
 автор: FireParanoia   (26.02.2010 в 08:44)   письмо автору
 
 

Доброго времени суток всем!

Суть: нужно сделать систему управления каталогом электронной библиотеки. Конкретно алфавитный указхатель и вывод книг по определенной букве алфавита.
Мое решение:
1. В таблице БД "books" есть 3 поля (ID, name, desc) вот...
2. в скрипте имеется меню в виде ссылок что-то вроде
<a href='index.php?letter=A'>A</a>

3. Если послана переменная $_GET["letter"], то скрипт начинает циклическую проферку данных из БД:
$letter = $_GET["letter"]; // Присваиваем значение (БУКВУ на которую нужно искать книгу)
$query = "SELECT * FROM books"; // Создаем запрос Выбираем из базы все книги
$result = mysql_query($query); // выполняем запрос
$books = mysql_fetch_array($result); // помещаем результат запроса в массив
do { // Начинаем циклическую обработку полученных данных
$booksplit = str_split($books['name']);
if($booksplit[0] == $letter) {
 echo $books['name']."<br />"; // Если первая буква названия книги совпадает с искомой буквой, то выводим название
}
}
while($books = mysql_fetch_array($result));

Вот тут и возникает проблема !!! Если название в латинице, то все нормально, ну а если в кириллице, то скрипт ненаходит нужные книги... вот такая вот ерунда.. Кодировки скрипта, БД, таблиц, и отображения в браузере совпадают (utf-8). Кто может помочь...???

  Ответить  
 
 автор: Trianon   (26.02.2010 в 09:14)   письмо автору
 
   для: FireParanoia   (26.02.2010 в 08:44)
 

str_split не работает с многобайтовыми кодировками.
Применяйте preg_match("/^([\S])/u",...)

  Ответить  
 
 автор: FireParanoia   (26.02.2010 в 09:23)   письмо автору
 
   для: Trianon   (26.02.2010 в 09:14)
 

А подробнее можно, а то я с регулярками не дружу.. )

  Ответить  
 
 автор: TrianoN   (26.02.2010 в 09:59)   письмо автору
 
   для: FireParanoia   (26.02.2010 в 09:23)
 

А я регулярку Вам уже нарисовал.

  Ответить  
 
 автор: FireParanoia   (26.02.2010 в 10:06)   письмо автору
 
   для: TrianoN   (26.02.2010 в 09:59)
 

Ну тоды, спасибо, буду изучать функцию прегматч, дабы понять как ее заюзать...

  Ответить  
 
 автор: bab-nike   (26.02.2010 в 13:19)   письмо автору
 
   для: FireParanoia   (26.02.2010 в 08:44)
 

ну вот так то точно различит латиницу с кириллицей
<?php 
if (isset($_GET['letter'])) $letter addslashes($_GET['letter']); // Присваиваем значение 
else  $letter='';
//Создаем запрос выбираем из базы книги начинающие с искомой буквой
//и сортируем по возростанию
//если $letter пусто, выводит все книги
$query "SELECT * FROM books WHERE name LIKE '".$letter."%' ORDER BY books"
$result mysql_query($query); // запрос 
$books mysql_fetch_array($result); 
do { 
 echo 
$books['name']."<br />"// вывод списка

while(
$books mysql_fetch_array($result));
?>

  Ответить  
 
 автор: Trianon   (26.02.2010 в 13:22)   письмо автору
 
   для: bab-nike   (26.02.2010 в 13:19)
 

-

  Ответить  
 
 автор: bab-nike   (26.02.2010 в 13:23)   письмо автору
 
   для: FireParanoia   (26.02.2010 в 08:44)
 

поправка
ORDER BY name

  Ответить  
 
 автор: Trianon   (26.02.2010 в 13:24)   письмо автору
 
   для: FireParanoia   (26.02.2010 в 08:44)
 

Очень советую выкинуть этот код.
В нем преизрядно ошибок разных уровней помимо нестыковки с utf.

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

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