Показать полную графическую версию : Вывод информации из MySQL
Moon Mag
30-12-2008, 10:04
Всех приветствую.
Есть база MySQL, таблица и ячейка в которой находится большой текс. Подскажите пожалуйста как вывести от туда информацию допустим на 20 строк, а остальное сформировать на 2 страницу и так далее.
Есть похожая тема но там описывается как сделать максимальное количество символов на странице, а хотелось бы именно ограничение по строкам.
http://forum.oszone.net/post-807556.html
SELECT * FROM `my_table` ORDER BY `id` LIMIT 0, 20;
SELECT * FROM `my_table` ORDRE BY `id` LIMIT 20, 20;
и т.д. В LIMIT'е сначала с какой строки, а потом - сколько строк.
Moon Mag
30-12-2008, 11:31
К сожалению не работает.
Для эксперимента в нес в ячейку текст
1<br>2<br>3<br>4<br>5 и какой бы LIMIT не выставлял, текс выводится полностью
Ааа... Я не правильно прочитал задание.
Вроде бы MySQL не может делить текст на строки.
Как насчёт php-функции
array explode (string separator, string string [, int limit])
Разбиваем возвращаемое значение на строки и выводим строки перебором нужных значений массива.
Moon Mag
30-12-2008, 11:44
Но за этот пример тоже спасибо, я заодно и в нем разобрался )
А эта функция по другому работает это когда в базе не сколько строк
table
id text
1 1-text
2 2-text
3 3-text
4 4-text
5 5text
$content = mysql_query ("SELECT * FROM content LIMIT 0, 2;", $db);
$contenT = mysql_fetch_array ($content);
do
{
echo "<br>".$content['text'];
}
while ($txT = mysql_fetch_array ($txt));
вот в таком случае выведется из базы 2 строчки
1-text
2-text
Moon Mag
30-12-2008, 12:10
А вот explode() я чего то не догнал, он же получается. что каждое слово помещает в массив, тем самым мы можем ограничить максиму выводимых слов, а слова могут быть разной длины.
Просто в чем дело, есть сайт где ограничена длина и поэтому информация должна разбиваться на несколько страниц.
Почему обязательно слово?
$arr = explode("\n", $str);
Так по переводу строки.
$arr = explode("<br />", $str);
А так - по брейкам.
Можно разбить по предложениям ( explode(". ", $str); ), потом в цикле добавлять по одному предложению, пока суммарная длина текста не достигнет определённой длины. Или вообще в сам текст вставить разделители типа {{PAGE}} в нужных местах и потом по ним разбивать.
Moon Mag
30-12-2008, 14:12
А можно задать максимальную длину строки, допустим width 300 и разбить это опять же на какое то количество строк?
Не хотелось бы делать какую-то определенную привязку, потому-то делаю не для себя, а для человека который даже от HTML очень далек.
explode("\n", $str); а какие еще ключи бывают(\n)?
А можно задать максимальную длину строки, допустим width 300 и разбить это опять же на какое то количество строк? »
Можно, но строка скорее всего разорвётся посередине слова.
Выделить часть строки так: $str = substr($str, 0, 300); Соответственно где-нибудь в середине - $str = substr($str, 3600, 300);
а какие еще ключи бывают(\n)? »
Да любые символы.
\n - знак новой строки
\t - знак табуляции
\r - перевод строки ( \r\n обычно объединяются)
Можно искать конец предложения регулярным выражением, например, но здесь я не смогу помочь :) Самый простой способ - по точке с пробелом.
Moon Mag
03-01-2009, 19:48
Спасибо большое за помощь Coutty.
И так после долгих мучение я смог вывести из MySQL определенное колличество строк на основе кода от chirs
$text = 'Первый пример текста. Второй пример текста. Третий пример текста. Четвертый пример текста.';
$max_length = 30;
$page = (isset($_GET['page']) ? $_GET['page'] : 2);
// Разбиваем $text на массив $arr[], находя в тексте пробелы между словами
$text.= ' ';
while (!empty($text)):
if (strlen($text)>$max_length) $n = $max_length; else $n = strlen($text);
for ($i = $n-1; $i>0; $i--) if ($text[$i]==' ') break;
$arr[] = trim(substr($text,0,$i+1)); $text = substr($text,$i+1);
endwhile;
$k = count($arr);
// Выводим на экран текущую страницу
echo 'Страница '.$page.' из '.$k.'<br><br>';
echo $arr[$page-1];
// Теперь рисуем простенький навигатор страниц
$nav = '<a href="?page='.($page>1 ? $page-1 : 1).'">Предыдущая</a> ';
$nav.= '<a href="?page='.($page<$k ? $page+1 : $k).'">Следующая</a>';
echo '<br><br>'.$nav;
// А это для отладки, чтобы было видно, что происходит
echo '<pre>'; print_r($arr);
, но после радостного успеха я сильно обломался когда попробовал в текс добавить картинку или ссылку так как все это
$text = 'Первый пример <img src=\"***.jpg\"> текста. Второй пример текста. Третий пример текста. Четвертый пример текста.'; считает одним текстом и может запись типа <img src=\"26_xp.jpg\"> разорвать на две части потому что там есть пробел между img_src и точно также ссылками.
Поэтому я сделал так
<?php
$text = 'Первый пример <img src="***.jpg"> текста.{{PAGE}} Второй пример текста.{{PAGE}} Третий пример текста.{{PAGE}} Четвертый пример текста.';
$all_page = substr_count($text,"{{PAGE}}"); /*Считаем сколько страниц*/
echo $all_page; /*Для проверки, потом можно убрать*/
/*Делаем проверку переменной page от не санкционированного ввода*/
if (isset($_GET['page'])) {$page=$_GET['page'];}
if (isset($_GET['page']) == false or $page != is_numeric($page) or $page < 1 or $page > $all_page) {$page='1';}
$string = strpos($text, "{{PAGE}}", 0); /*Ищем в тексте первую метку {{PAGE}} и возвращаем её значение*/
do
{
$i=$string+8; /*Так как наша метка состоит из 8 символов и чтоб метка не занасилась в массив и не выводилась на экран, нам нужно её перекрыть*/
$arr[] = trim(substr($text,0,$string)); /*Добавляем выборку из текста в массив - страница*/
$text = substr($text,$i); /*Выбираем последующие страницы, выбираем от начального и до конца текста*/
}
while ($string = strpos($text, "{{PAGE}}", 0)); /*Ищем 2-3,4, и тд. метку {{PAGE}} */
/* Если убрать скобки то выдаст структуру массива
echo '<pre>'; print_r($arr);
*/
/* Выводим на экран текущую страницу */
echo '<br>Страница '.$page.' из '.$all_page.'<br><br>';
echo $arr[$page-1];
// Теперь рисуем простенький навигатор страниц
$nav = '<a href="?page='.($page>1 ? $page-1 : 1).'">Предыдущая</a> ';
$nav.= '<a href="?page='.($page<$all_page ? $page+1 : $all_page).'">Следующая</a>';
echo '<br><br>'.$nav;
?>
я немного позаимствовал части кода из других примеров, авторам спасибо.
Теперь просто будет немного ручного труда, придется в ручную подбирать колличество строк передвигая метки {{PAGE}}.
Точно работает? :)
Остался непонятным вопрос - как всё-таки рссставил {{PAGE}}.
Как вариант может воспользоватся комментарием в HTML? <!-- -->
Moon Mag
08-01-2009, 00:26
Точно работает :) Уже использую.
{{PAGE}} расставляешь методом подбора, смотришь если текс выходит за границы поднимаешь {{PAGE}} выше.
Не множко кропотливая работенка если большой текс, но зато работает.
Главное что и пользователь сайта понял, вроде.
В принципе и <!-- --> можно использовать, покрайней мере PHPBB такой способ используют.
А так в принципе все что душе угодно можно туда подставлять, главное чтоб в последствии заполнения сайта не попало такая же запись, а то долго будешь искать где же у тя косяк.
Аааа, а я подумал ты расставляешь метки программно. Наверно всё-таки не пользователь сайта, а владелец? Ну это не важно.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.