#1 2009.06.14 16:41

JInn
Участник
Откуда: Север нашей Родины
Зарегистрирован: 2008.11.18
Сообщений: 120
Карма: 2
Профиль Веб-сайт

Вывод большого текста, теория

Делаю библиотеку и столкнулся с тем, что не знаю как правильно вывести большой текст. Весь же выводить не будешь в одну страницу. Теоретически план созрел такой. Достаешь текст из базы, обрезаешь (substr а лучше даже mb_substr) до нужного количества символов, выводишь на экран. Если текст длиннее обрезанного, то создаем страницы и следующая страница уже будет с того места, где обрезали. Вроде как то так. Такой вывод это нормально или есть варианты получше? Мне не нравится что текст запрашивается полностью на каждой странице, это как бы не есть хорошо. Но других вариантов пока не вижу, слаб еще в пхп ( Смотрел MCH - библиотеку но там сплошной ООП (


Как все таки сложно быть ботом...

Неактивен

#2 2009.06.14 17:24

Gemorroj
Administrator
Откуда: Белоруссия
Зарегистрирован: 2007.11.03
Сообщений: 6593
Карма: 107
Профиль Веб-сайт

Re: Вывод большого текста, теория

нет там никакого ООП. Если файл достается из БД, то можно доставать лишь его часть. В MySQL есть функция substr, работает так же как и в PHP.

Неактивен

#3 2009.06.14 19:04

JInn
Участник
Откуда: Север нашей Родины
Зарегистрирован: 2008.11.18
Сообщений: 120
Карма: 2
Профиль Веб-сайт

Re: Вывод большого текста, теория

У меня уже глюки какие то, вроде писал сообщение и нет его...
mch-lib\sys\libs вот здесь вроде классы лежат.

А вот эта функция SUBSTRING, да? Нашел только ее, но как то сухо объяснено. Не могу понять как запрос с ней сделать. Там
SUBSTRING(str,pos,len)
SUBSTRING(str FROM pos FOR len)
Насчет pos и len понятно, но че писать в str???
Вот пример
SELECT SUBSTRING('Quadratically',5,6);
Выдает  'ratica'
Вместо Quadratically должна стоять строка, но мне ее найти еще надо, мне прямо там написать WHERE условие? Скажем у меня запрос такой
mysql_query("SELECT * FROM `tabl` WHERE `id`=1 LIMIT 1");
И куда мне этот SUBSTRING вставлять и че писать вместо str? (((

В поиске везде одно и то же. На mysql.ru толком ничего не объяснено а php.su накрылся, либо накрыли...


Как все таки сложно быть ботом...

Неактивен

#4 2009.06.14 20:10

Gemorroj
Administrator
Откуда: Белоруссия
Зарегистрирован: 2007.11.03
Сообщений: 6593
Карма: 107
Профиль Веб-сайт

Re: Вывод большого текста, теория

вместо str ставь имя колонки строку в которой нужно обрезать

Неактивен

#5 2009.06.15 05:13

JInn
Участник
Откуда: Север нашей Родины
Зарегистрирован: 2008.11.18
Сообщений: 120
Карма: 2
Профиль Веб-сайт

Re: Вывод большого текста, теория

Вот это рабочая строка:
$array=mysql_query("SELECT  `tema`,`new` FROM `news` WHERE `n_id`=7  LIMIT 1 ");

А вот вставляю substring
$array=mysql_query("SELECT  SUBSTRING(`new` FROM 7 FOR 200),`tema` FROM `news` WHERE `n_id`=7  LIMIT 1 ");
новость сразу пропадает, а тема показывается, причем только в этом варианте ошибки, связанной с запросом нет,  только такая:
Notice: Undefined index: new in T:\home\virtual\dvig.cms\news\new_c.php on line 23
это пишет, что я вывожу незапрошенное поле, во всех других вариантах которые пробовал выдавало:
Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource

Нигде нет примера как использовать эту функцию, мучаюсь уже 3 часа и бесполезно
Добавлено спустя   4 минуты  42 секунды:
$array=mysql_query("SELECT  SUBSTRING(`new`,7,200),`tema` FROM `news` WHERE `n_id`=7  LIMIT 1 ");
Такой вариант тоже пробовал


Как все таки сложно быть ботом...

Неактивен

#6 2009.06.15 05:43

JInn
Участник
Откуда: Север нашей Родины
Зарегистрирован: 2008.11.18
Сообщений: 120
Карма: 2
Профиль Веб-сайт

Re: Вывод большого текста, теория

$array=mysql_query("SELECT  SUBSTRING(`new` FROM 7 FOR 200) AS `new`,`tema` FROM `news` WHERE `n_id`=7  LIMIT 1 ");

Нашел уже, надо добавить AS `new`
И ни в одном учебнике этого нет, ни на сайтах, где маны выложены... Бесят такие учебники вообще. Нашел на сайте где кто то разъяснял код рсс новостей, и выложил кусочек кода.
Gemorroj спасибо что подсказал про функцию )


Как все таки сложно быть ботом...

Неактивен

#7 2009.06.16 06:07

JInn
Участник
Откуда: Север нашей Родины
Зарегистрирован: 2008.11.18
Сообщений: 120
Карма: 2
Профиль Веб-сайт

Re: Вывод большого текста, теория

Возникла проблема с mb_string  Когда выводится текст, то в конце и в начале иногда неправильно обрезает. Я использовал mb_substr Но ситуация не изменилась, хотя насколько я знаю эта функция должна нормально обрезать.
вот ссылка сразу на страницу с текстом и проблемкой
http://cms.jinn.su/biblio/text.php?id=2&str=1&page=3

А вот как в тексте mb_substr использовано
echo 'Текст: '.mb_substr(clean2($cat['text']),$st,$strok).'<br />';

$st - это с какого символа $strok - длина строки

Может пишу что-нибудь не так?


Как все таки сложно быть ботом...

Неактивен

#8 2009.06.16 06:43

Chizh
Участник
Зарегистрирован: 2009.06.16
Сообщений: 26
Карма: 2
Профиль

Re: Вывод большого текста, теория

нужно указать кодировку, в которой ты работаешь.
mb_internal_encoding('UTF-8'); - вроде так. можно еще хитаче это сделать

Неактивен

#9 2009.06.16 09:55

JInn
Участник
Откуда: Север нашей Родины
Зарегистрирован: 2008.11.18
Сообщений: 120
Карма: 2
Профиль Веб-сайт

Re: Вывод большого текста, теория

Кодировку я указываю в начале страницы. Внутри функции еще можно, но так как кодировка указана, я этого не делал. По идее она должна принять ту кодировку которая в скрипте


Как все таки сложно быть ботом...

Неактивен

#10 2009.06.16 10:06

Akdmeh
Участник
Откуда: Киев и рядом;)
Зарегистрирован: 2008.11.30
Сообщений: 257
Карма: 9
Профиль Веб-сайт

Re: Вывод большого текста, теория

не по идее.
Указать кодировку нужно чётко в самой функции!


Желание стать программистом из-за того, что вам нравляться компьютерные игры-это все равно, что желание стать гинекологом из-за того, что вам нравиться сексwink

Неактивен

#11 2009.06.16 10:07

Chizh
Участник
Зарегистрирован: 2009.06.16
Сообщений: 26
Карма: 2
Профиль

Re: Вывод большого текста, теория

как раз таки это не зависит от кодировки страниц. для библиотеки нужно специально указать еще раз )

Неактивен

#12 2009.06.16 10:24

JInn
Участник
Откуда: Север нашей Родины
Зарегистрирован: 2008.11.18
Сообщений: 120
Карма: 2
Профиль Веб-сайт

Re: Вывод большого текста, теория

Я имею ввиду что в начале страницы я пишу mb_internal_encoding("UTF-8"); Поэтому  в самой функции я кодировку не пишу
Добавлено спустя   1 минуту  34 секунды:
Вот вся страница

Код:

1
span style="color: #0000BB"><?php###################################### Скрипт написал Jinn ## http://jinn.su ## ICQ - 240067366 ## Двигатель будет ## дорабатываться ## Обновления будут здесь ## http://jinn.su ## ######################################define ('JINNY',31);mb_internal_encoding("UTF-8");$where = 'Библиотека';require'../include/connect.php';require '../reklama.php';require '../css/verh.php';require 'func.php';$array=mysql_query("SELECT SUBSTRING(`news` FROM 7 FOR 251) AS `news`,`tema` FROM `news` WHERE `n_id`=7 ");$news=mysql_fetch_assoc($array);echo '<div class="rek">Библиотека</div>';//Удаление статьиif ($_SESSION['a']==9 && $_GET['del']=='del'){$array=mysql_query("SELECT * FROM `lib_t` WHERE `id`='".clean($_GET['id'])."' LIMIT 1 ") or die (ERR);$del=mysql_fetch_assoc($array);mysql_query("DELETE FROM `lib_t` WHERE `id`='".clean($_GET['id'])."' ") or die (ERR);mysql_query("UPDATE `lib_k` SET `kol`=`kol`-1 WHERE `id`='".$del['id2']."' ") or die (ERR);mysql_query("UPDATE `users` SET `J`=`J`-5,`k_t`=`k_t`-1 WHERE `login`='".$del['user']."' ") or die (ERR);echo '<div class="box2">Статья удалена</div>';niz();require '../css/niz.php';exit;}if ($_GET['achtung']){mysql_query("UPDATE `lib_t` SET `achtung`=`achtung`+1 WHERE `id`='".clean($_GET['id'])."' AND `adult`=1 ") or die (ERR);echo '<div class="box2">Благодарим за содействие )</div>';}else {if ($_SESSION['lock'] != $_GET['id']){mysql_query("UPDATE `lib_t` SET `order`=`order`+1 WHERE `id`='".clean($_GET['id'])."' AND `adult`=1 ") or die (ERR);$_SESSION['lock'] = clean($_GET['id']);}}//Страницы!$k_post=mysql_fetch_assoc(mysql_query("SELECT CHAR_LENGTH(`text`) AS `text` FROM `lib_t` WHERE `id`='".clean($_GET['id'])."' LIMIT 1"));if ($_GET['str'] > 0){$strok=2048 * abs($_GET['str']);} else {$strok=2048;}$k_page=k_page($k_post['text'],$strok);$page=page($k_page);$start=($strok*$page-$strok);if ($start!=0){$start=$start-20;}else{$start=$start+1;}$cat=mysql_fetch_assoc(mysql_query("SELECT `id`,`id2`, SUBSTRING(`text` FROM ".($start)." FOR ".$strok."+10) AS `text`,`nazv`,`order`,`user`,`upload`,`achtung` FROM `lib_t` WHERE `id`='".clean($_GET['id'])."' AND `adult`=1 LIMIT 1 ")) or die (ERR);echo '<div class="box">'.$cat['nazv'].'<br />Написал <a href="../user.php?user='.$cat['user'].'">'.cvet($cat['user']).'</a><br />Статья написана '.$cat['upload'].'<br />Прочитано '.raz($cat['order']).'<br />Жалоб '.$cat['achtung'].'<br />';if ($_SESSION['use'] ==1){echo '<a href="?id='.$_GET['id'].'&achtung=1"><span id="nic">Пожаловаться</span></a><br />';}if($_GET['page']>1){$st=2;}else{$st=0;}echo 'Текст: '.mb_substr(clean2($cat['text']),$st,$strok).'<br /></div>';if ($_SESSION['a'] ==9){echo '<div class="box"><a href="?del=del&id='.$cat['id'].'"><span id="nic">Удалить статью (необратимо!!!)</span></a></div>';}if ($k_page>1)str('text.php?id='.$_GET['id'].'&str='.$_GET['str'].'&',$k_page,$page);echo '<div class="box">Строк <a href="text.php?id='.$_GET['id'].'&str=1&page='.$_GET['page'].'">[25]</a> <a href="text.php?id='.$_GET['id'].'&str=2&page='.$_GET['page'].'">[50]</a> <a href="text.php?id='.$_GET['id'].'&str=4&page='.$_GET['page'].'">[100]</a></div>';niz();require '../css/niz.php';?>

Как все таки сложно быть ботом...

Неактивен

#13 2009.06.16 10:36

JInn
Участник
Откуда: Север нашей Родины
Зарегистрирован: 2008.11.18
Сообщений: 120
Карма: 2
Профиль Веб-сайт

Re: Вывод большого текста, теория

По идее субстринг в базе тоже работает с многобайтовыми символами, но неправильно режет, поэтому и мб_стринг пришлось использовать, но тоже не помогает, а я с этими функциями только столкнулся, поэтому даже не понимаю как это работает (


Как все таки сложно быть ботом...

Неактивен

#14 2009.06.16 13:04

Gemorroj
Administrator
Откуда: Белоруссия
Зарегистрирован: 2007.11.03
Сообщений: 6593
Карма: 107
Профиль Веб-сайт

Re: Вывод большого текста, теория

база данных в UTF-8 ?? SEN NAMES utf8 прописал?

Неактивен

#15 2009.06.16 13:08

Akdmeh
Участник
Откуда: Киев и рядом;)
Зарегистрирован: 2008.11.30
Сообщений: 257
Карма: 9
Профиль Веб-сайт

Re: Вывод большого текста, теория

да, посмотри кодировку таблицы-это мне своего времени тоже массу проблем доставляло...


Желание стать программистом из-за того, что вам нравляться компьютерные игры-это все равно, что желание стать гинекологом из-за того, что вам нравиться сексwink

Неактивен

#16 2009.06.16 15:02

JInn
Участник
Откуда: Север нашей Родины
Зарегистрирован: 2008.11.18
Сообщений: 120
Карма: 2
Профиль Веб-сайт

Re: Вывод большого текста, теория

не. не писал. Работало же )))
А как правильно написать? Это надо при установке делать?
Я вот поковырял дкмс, нашел там такое
mysql_query('set charset utf8');
mysql_query('SET names utf8');
mysql_query('set character_set_client="utf8"');
mysql_query('set character_set_connection="utf8"');
mysql_query('set character_set_result="utf8"');

Это все запрашивать надо или что то необязательное?


Как все таки сложно быть ботом...

Неактивен

#17 2009.06.16 15:07

Gemorroj
Administrator
Откуда: Белоруссия
Зарегистрирован: 2007.11.03
Сообщений: 6593
Карма: 107
Профиль Веб-сайт

Re: Вывод большого текста, теория

так делают только те, кто не в курсе что делает SET NAMES, достаточно mysql_query('SET names `utf8`');

Неактивен

#18 2009.06.16 15:33

JInn
Участник
Откуда: Север нашей Родины
Зарегистрирован: 2008.11.18
Сообщений: 120
Карма: 2
Профиль Веб-сайт

Re: Вывод большого текста, теория

Понятно. А вот еще вопрос. Создаю базу и делаю такие запросы

Код:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
mysql_query('SET names utf8');
mysql_query("
CREATE TABLE `set` (
`id` int(11) NOT NULL auto_increment,
`nsite` varchar(100) default NULL,
`asite` varchar(50) default NULL,
`admin` varchar(20) default NULL,
`err` varchar(100) default NULL,
`sizef` smallint(6) default '0',
`sizen` smallint(6) default '0',
`sizeop` smallint(6) default '0',
`hb` smallint(6) default '0',
`wb` smallint(6) default '0',
`jb` smallint(6) default '0',
`hs` smallint(6) default '0',
`ws` smallint(6) default '0',
`js` smallint(6) default '0',
`paswordic` varchar(50) default NULL,
`asd` bigint(20) default NULL,
`descript` text,
`keywords` text,
`links` varchar(100) default '0',
`nlinks` varchar(100) default NULL,
`order` smallint(3) default NULL,
`style` varchar(100) default NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 ");
 
mysql_query("
INSERT INTO `set` VALUES
(1, 'Jinn.CMS', 'dvig.cms', 'Admin', 'База накрылась', 350, 50, 250, 0, 0, 100, 65, 50, 100, '827ccb0eea8a706c4c34a16891f84e7b', 394329864, 'Развлечения', 'Развлечения игры загрузки', NULL, NULL, NULL, 'blue'),
(2, NULL, NULL, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL, NULL, NULL, NULL, 'forum', 'Форум', 20, NULL),
(3, NULL, NULL, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL, NULL, NULL, NULL, 'news', 'Новости', 10, NULL),
(10, NULL, NULL, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL, NULL, NULL, NULL, 'chat', 'Чат', 30, NULL),
(5, NULL, NULL, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL, NULL, NULL, NULL, 'album', 'Фотоальбом', 40, NULL),
(6, NULL, NULL, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL, NULL, NULL, NULL, 'pricol.php', 'Приколы', 70, NULL),
(7, NULL, NULL, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL, NULL, NULL, NULL, 'ICQ', 'ICQ', 90, NULL),
(8, NULL, NULL, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL, NULL, NULL, NULL, 'games', 'Игры', 50, NULL),
(9, NULL, NULL, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL, NULL, NULL, NULL, 'shop.php', 'Магазин', 80, NULL),
(13, NULL, NULL, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL, NULL, NULL, NULL, 'guest.php', 'Гостевая', 100, NULL),
(14, NULL, NULL, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL, NULL, NULL, NULL, 'obmen', 'Файлообменник', 60, NULL) ");

И меню у меня потом показывает в неправильной кодировке. Приходится из скрипта уже переделывать.
Это как то можно исправить? Сам файл инсталл в utf8 без БОМ


Как все таки сложно быть ботом...

Неактивен

#19 2009.06.16 15:43

Gemorroj
Administrator
Откуда: Белоруссия
Зарегистрирован: 2007.11.03
Сообщений: 6593
Карма: 107
Профиль Веб-сайт

Re: Вывод большого текста, теория

mysql_query('SET NAMES `utf8`');  нужно писать сразу же после соединения с сервером MySQL. и когда создаешь БД, выбери сравнение utf8_general_ci

Неактивен

#20 2009.06.16 17:09

Akdmeh
Участник
Откуда: Киев и рядом;)
Зарегистрирован: 2008.11.30
Сообщений: 257
Карма: 9
Профиль Веб-сайт

Re: Вывод большого текста, теория

А ещё когда таблицу создаешь можно указать
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
к примеру


Желание стать программистом из-за того, что вам нравляться компьютерные игры-это все равно, что желание стать гинекологом из-за того, что вам нравиться сексwink

Неактивен

#21 2009.06.16 17:11

Gemorroj
Administrator
Откуда: Белоруссия
Зарегистрирован: 2007.11.03
Сообщений: 6593
Карма: 107
Профиль Веб-сайт

Re: Вывод большого текста, теория

ну у него там так и стоит)

Неактивен

#22 2009.06.17 16:14

JInn
Участник
Откуда: Север нашей Родины
Зарегистрирован: 2008.11.18
Сообщений: 120
Карма: 2
Профиль Веб-сайт

Re: Вывод большого текста, теория

Вот убейте меня, но я ничего не понимаю. Вот полностью файл инсталла. Че бы я не делал, но в базу заливается неправильно ((( в htaccess php_value default_charset UTF-8 еще пробовал вот это  AddDefaultCharset UTF-8. Тоже не помогает...


Вложения

Как все таки сложно быть ботом...

Неактивен

#23 2009.06.17 16:25

JInn
Участник
Откуда: Север нашей Родины
Зарегистрирован: 2008.11.18
Сообщений: 120
Карма: 2
Профиль Веб-сайт

Re: Вывод большого текста, теория

Может есть какой нибудь скрипт, где заливается база и потом выводится в утф8? Я уже не знаю где посмотреть


Как все таки сложно быть ботом...

Неактивен

#24 2009.06.17 16:40

Gemorroj
Administrator
Откуда: Белоруссия
Зарегистрирован: 2007.11.03
Сообщений: 6593
Карма: 107
Профиль Веб-сайт

Re: Вывод большого текста, теория

mysql_query('set charset utf8');
mysql_query('SET names utf8');
mysql_query('set character_set_client="utf8"');
mysql_query('set character_set_connection="utf8"');
mysql_query('set character_set_result="utf8"');

вот этот бред убери и оставь только mysql_query('SET NAMES `utf8`');
как ты определяешь, что данные заливаются в не корректной кодировке? через phpmyadmin показыает корректно?

Неактивен

#25 2009.06.17 16:57

JInn
Участник
Откуда: Север нашей Родины
Зарегистрирован: 2008.11.18
Сообщений: 120
Карма: 2
Профиль Веб-сайт

Re: Вывод большого текста, теория

Да я уже не знал че делать поэтому писал все что можно. Я заливаю в базу а потом вывод делаю и выводится в cp-1251. Когда открываю phpmyadmin то там нормально показывает если страница в кодировке cp-1251


Как все таки сложно быть ботом...

Неактивен

#26 2009.06.17 17:13

Gemorroj
Administrator
Откуда: Белоруссия
Зарегистрирован: 2007.11.03
Сообщений: 6593
Карма: 107
Профиль Веб-сайт

Re: Вывод большого текста, теория

[

JInn написал:

Я заливаю в базу а потом вывод делаю и выводится в cp-1251

- коннект к бд как происходит? после нето есть SET NAMES? При создании БД сравнение utf8_general_ci выбрал?? Сделай дамп бд и прикрепи сюда.

Неактивен

#27 2009.06.17 17:39

JInn
Участник
Откуда: Север нашей Родины
Зарегистрирован: 2008.11.18
Сообщений: 120
Карма: 2
Профиль Веб-сайт

Re: Вывод большого текста, теория

При создании бд выбирал сравнение utf-8 general_ci SET_NAMES есть только в инсталле. Или во время работы скрипта тоже надо???


Вложения

Как все таки сложно быть ботом...

Неактивен

#28 2009.06.17 17:47

Gemorroj
Administrator
Откуда: Белоруссия
Зарегистрирован: 2007.11.03
Сообщений: 6593
Карма: 107
Профиль Веб-сайт

Re: Вывод большого текста, теория

естественно надо тоже.

Неактивен

#29 2009.06.18 03:40

JInn
Участник
Откуда: Север нашей Родины
Зарегистрирован: 2008.11.18
Сообщений: 120
Карма: 2
Профиль Веб-сайт

Re: Вывод большого текста, теория

Вот ёпт... Написал SET_NAMES и все заработало... А я 2 дня ломал phpmyadmin big_smile И мало того, по ходу теперь и mb_striing не нужен, потому что все режется так как надо (SUBSTRING'ом при запросе). Вывод русского текста на 25 страницах не выдал ни одной ошибки ) Всем огромное спасибо big_smile


Как все таки сложно быть ботом...

Неактивен

Дополнительно

forum.wapinet.ru

PunBB Mod v0.6.2
0.019 s