Тема: Как увеличить количество строк/знаков?

Доброго времени суток.
Нужна помощ.

Есть таблица создана в phpmyadmin и досих пор текст который копировали в ячейку без проблем сохранялся в phpmyadmin, а сегодня дали текст в котором на пару строк больше и phpmyadmin при попытке сохранить текст выдает ошибку что дескать знаков много, а текст сокращать нельзя.
Вопрос можно ли изменить и где свойство ячейки таблицы чтобы снять ограничение или задать другое? Или нужно полностью удалить таблицу и создать новую и задать большее число знаков, но какой параметр в таком случае нужно в phpmyadmin задавать, нужно знаков с пробелами(текст создается в word, а затем копируется в ячейку таблиы базы в phpmyadmin) в районе 687 или немногим больше?

Тип в поле id задан TINYINT, длинна значения 3.

2

Re: Как увеличить количество строк/знаков?

Victor2008
Для хранения текстовых данных используются типы:
TINYTEXT до 255 символов
VARCHAR и TEXT до 65,535 символов
MEDIUMTEXT до 16,777,215
LONGTEXT до 4,294,967,295 или 4ГБайта

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

3 (изменено: Hanut, 2008-12-04 15:55:34)

Re: Как увеличить количество строк/знаков?

Доброго времени суток.
Спасибо за ответ.

Когда мышкой жму в левой половине общего окна интерфейса phpmyadmin на таблицу line, то в правой половине общего окна интерфейса phpmyadmin появляются(кроме остального перечня меню phpmyadmin) две горизонтальные полоски с именами полей "id" и "text". Зачем енять "id"?

вот дамп таблицы:

CREATE TABLE IF NOT EXISTS `line` (
  `id` tinyint(3) NOT NULL auto_increment,
  `text` text NOT NULL,
  PRIMARY KEY  (`id`)
) TYPE=MyISAM AUTO_INCREMENT=2 ;

Насколько я правельно Вас понял можно просто в открывающемся списке типа поля "tinyint" выбрать другой тип VARCHAR и TEXT, и просто нажать на OK. Но так "VARCHAR" или "TEXT"? Мне нужно текстовое поле заполнять текстом причем какой текст ме дают такой нужно и вставить в ячейку без сокращений. Среднее число знаков с пробелами в районе 422....822.

Заранее благодарю за ответ.

4

Re: Как увеличить количество строк/знаков?

Victor2008
Не понял, в какое поле вы копируете текст, что он не вмещается? Поле `line`.`text` имеет тип TEXT и может содержать до 65535 символов.

5

Re: Как увеличить количество строк/знаков?

Доброго времени суток.
Спасибо что откликнулись.

Есть поле - text с типом text, именно в это поле копируется текст который мне дают предварительно набрав этот текст в программе—word. Я всегда или почти всегда перед копированием текста набранного в программе—word проверяю сколько знаков с пробелами содержит текст. Однажды это было 519 знаков с пробелами(до этого было 378-487 и мне думается что возможно дойдет однажды до 7000) я не проверил и phpmyadmin после помещения это текста из буфера Ctrl+V и нажатием кнопки OK и обновлении окна phpmyadmin выдал ошибку в тексте ошибки говорилось что количество знаков превышает допустимый параметр и ВСЕ!
Слава богу на сайте это не отобразилось, текст небыл изменен и измениения не сохранились—очевидно имела место ошибка соединения с сервером в интернете.

Но поскольку ситуация произошла, мне нужно знать можно ли изменить параметр tinyint на другой, который увеличивает количество помещаемых знаков с пробелами в таблице не удаляя эту самую таблицу из базы?
Помню что Вы как-то сказали что нельзя просто взять и изменить параметры в базе и тут же сохранить базу, нужно все удалить и поновой с нужными параметрами создать.
Но то база, а это таблица которая находится в этой базе. Может можно не удаляя таблицу просто внести изменения и сохранить без пересоздавания??

И в заключении, какие изменения в параметры настройки любой таблицы можно вносить и просто сохранять нажатием на ОК без удаления всего и пересоздавания всего ради пары-другой настроек в середине базы?

Заранее благодарен за ответ.

6

Re: Как увеличить количество строк/знаков?

Victor2008
Если вы дословно скопируете выводимую ошибку при вставке в поле text, то возможно сможем быстрее разобраться.

Вы вставляете данные в поле text, а менять зачем-то хотите id, так как именно оно имеет тип tinyint? Я этого до сих пор не понял. Поле id - это уникальный целочисленный идентификатор строки, то есть каждая строка имеет свой номер, который в этом поле и устанавливается. Благодаря параметру auto_increment устанавливается этот номер автоматически, прописывать его не надо, БД сама увеличит предыдущий id  на единицу при вставке новой строки.

Типы таблиц надо менять очень аккуратно: целочисленный тип должен быть заменен на целочисленный, то же самое с текстовым типом данных. Например, при существовании поля типа text и необходимости увеличить количество сохраняемых данных до 16 777 215, тип данных можно сменить на MEDIUMTEXT. Однако, поле типа MEDIUMTEXT можно сменить на TEXT, только если в полях нет данных более 65535 символов.

7

Re: Как увеличить количество строк/знаков?

Доброго времени суток.
спасибо что откликнулись.

Вы знаете к сожалению ани скриншота, ани записи ошибки в тот момент сделать не удалось, ввиду стрессовой ситуации. Часом позже клиент таки заработал в нормальном режиме без каких либо комментариев и текст на мое удивление без проблем вставлялся и сохранялся. Очевидно имел место таки сбой соединения с клиентом на сервере в момент соединеня с сервером.
Благодарю Вас за подробное описание типов:
TINYTEXT до 255 символов
VARCHAR и TEXT до 65,535 символов
MEDIUMTEXT до 16,777,215
LONGTEXT до 4,294,967,295 или 4ГБайта
Это здорово пригодилось!

У меня к Вам такой вопрос, скажите как можно подключить ADODB к PHP в файле php.ini? Как можно протестировать работу ADODB?

Заранее благодарен за ответ.

8

Re: Как увеличить количество строк/знаков?

Victor2008
Все здесь - http://adodb.sourceforge.net/
Не имею опыта установки ADOdb, но это класс и в php.ini ничего трогать не надо, как я понял.

9

Re: Как увеличить количество строк/знаков?

Доброго времени суток.
Спасибо за ответ.

Спасибо за ссылку.
Вопрос такой как на сайте написать PHP скрипт вывода даты в формате 16 декабря 2008 г., кроме того сделать для каждой ссылки вид сылки с датой который бы открывал по этой ссылке старницу с информацией по названию этой ссылки, и каждый день в ссылке менялась дата:
http://www.slava.sebastopol.ua/?cnt=lin … amp;day=16

знаю что links это название файла и когда нажимаешь на ссылку то попадаешь на другую страницу по ссылке;
&yr=2008&mnt=12&day=16 - это как я понимаю есть дата которую php скрипт кроме заголовка сайта засунул еще в ссылку. Как это делается на php?

Заранее спасибо за ответ.

10

Re: Как увеличить количество строк/знаков?

Victor2008
Сожалею, но не в состоянии сейчас вам помочь.
Попробуйте приняться за решение сами, если будут сложности, постараюсь подсказать что-нибудь.

11

Re: Как увеличить количество строк/знаков?

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

Скажите Вы сталкивались с написанием RSS лент? Если да то как сделать автоматическую RSS которая бы сама собирала из базы заголовки статей+пару строк из статьи и дадавала время когда статья появилась на сайте?

Заранее благодарен за ответ.

12

Re: Как увеличить количество строк/знаков?

Victor2008
Пример RSS здесь: http://ru.wikipedia.org/wiki/Rss
Описание стандарта здесь: http://cyber.law.harvard.edu/rss/rss.html

Делаем выборку из БД, формируем XML и сохраняем в файл. Скрипт, который будет все это делать запускается с помощью планировщика Cron в определенное время.

13

Re: Как увеличить количество строк/знаков?

Доброго времени суток.
Спасибо за ответ, спасибо, за ссылки, особенно за первую, более менее понятно как rss.xml вайл выглядит в коде. Правда там написано что в IE поддерживается rss.xml только начиная с 7 версии, а у моего начальника стоит 6-тая и у начальника аллергия на всякие обновления ПО. Может есть скрипт который учит обрабатывать rss.xml и в 6-ой версии IE?

Далее... есть php код который благодаря Вам используется мной в бегущей строке и посей день:
<?php
function rsspage()
     {     
     $hostname = "localhost";
     $username = "root";
     $password = "password";     
     
     @mysql_connect ( $hostname, $username, $password );   
     @mysql_select_db("slava_sebastopol_ua")
     or die(mysql_error());                 
     $r = @mysql_query ( "select * from `line` where `id`=1" )
     or die(mysql_error());
                 
     while ($row = mysql_fetch_assoc ( $r ))
           {                 
            $text_out = '<table border="0" width="100%" class="line"><tr><td>'.
            strip_tags( $row['text'] ).
            '</td></tr></table>';
           }
     return( $text_out );
     }
?>

Что нужно изменить в коде для того чтобы из базы для rss выводились: ЗАГОЛОВОК, и три первые строки текста, дата и время когда метериал выставлен на сайт? (так понимаю что код вывода из базы текста везде одинаковый, но в случае с бегущей строкой выводить нужно текст только из ячейки txt и все, а тут и дата+время, и загловок, и три строки текста, а это уже не одна ячейка, какой тут код нужно добавить?)

Вот дамп таблицы которая используется сейчас для хранения статей:
CREATE TABLE material (
  id int(11) NOT NULL auto_increment,
  year int(11) NOT NULL default '0',
  month int(11) NOT NULL default '0',
  day int(11) NOT NULL default '0',
  rubr text,
  zagol text,
  vrez text,
  text text NOT NULL,
  podp text,
  img text,
  img_alt text,
  counter enum('first','staty','anons','vopros','sevaya','news','mol') NOT NULL default 'first',
  UNIQUE KEY id (id),
  FULLTEXT KEY rubr (rubr)
) TYPE=MyISAM;

--
-- Dumping data for table `material`

Возможно нужно добавить еще ячейки для даты например в формате 22.12.2008? Т.е. три ячейки?
А какой код потом добавить для отображения даты рядом возле выводимой статьи браузером?
В Википедии дан пример rss.xml, а не rss.php. Как написать скрипт rss для php и mysql?

14

Re: Как увеличить количество строк/знаков?

Victor2008
Чтение RSS в IE6 отсутствует вообще.

Желательно время хранить в поле имеющем специальный тип TIMESTAMP. В нем хранится дата и время, и при необходимости можно легко переформировать вывод с помощью функции DATE_FORMAT. Поля year, month и day, в этом случае будут не нужны.

Код не обещаю. Только если будет свободное время.

15

Re: Как увеличить количество строк/знаков?

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

Вы знаете в сети попалась статья (http://itdoc.com.ua/showthread.php?p=225) в которой описывается счетчик нажатий по ссылке:

<?php

$f=fopen("stat.dat","a+");
flock($f,LOCK_EX);
$count=fread($f,100);
flock($f,LOCK_UN);
fclose($f);

echo "Количество скачек/кликов: $count"; ?>

альтернатива последней строке:
$s=file("stat.dat"); echo "Количество скачек/кликов: $s[0]";

Создал файл stat.dat.
(весь код поместил в том месте где находится кнопка перед началом тега <a)вот как выглядит помещенный код

     <td>'.$f=fopen("stat.dat","a+").
            flock($f,LOCK_EX).
            $count=fread($f,100).
            flock($f,LOCK_UN).
            fclose($f).

            $s=file("stat.dat"). 'Количество кликов:'. $s[0].'<a

Запустил на localhost в браузере выдает:
Resource id #31ArrayКоличество кликов:
вообще хотел вместо слов _Количество кликов:_ поставить просто круглые скобки и в середине которых менялось бы число нажатий по ссылке.
Кроме того браузер в самом верху выдает странную ошибку:
Warning: flock(): supplied argument is not a valid stream resource in -напротив строки- flock($f,LOCK_EX).
и так четыре раза напротив кажной строки.
Где ошибка?

16

Re: Как увеличить количество строк/знаков?

Victor2008

...<td>';
$f=fopen("stat.dat","a+");
flock($f,LOCK_EX);
$count=fread($f,100);
flock($f,LOCK_UN);
fclose($f);

print 'Количество кликов:'. $count;
print '<a...

17

Re: Как увеличить количество строк/знаков?

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

function podpiska_link()
         {
          $text_out = '<table border="0"><tr><td>';
                              $f=fopen("stat.dat","a+");
                              flock($f,LOCK_EX);
                              $count=fread($f,100);
                              flock($f,LOCK_UN);
                              fclose($f);
           
                              print 'Количество кликов:'. $count;
                              print '<a href="http://localhost/php13/?cnt=podpiska_page&yr%&mnt&day">
                                <img src="http://'.$_SERVER["HTTP_HOST"].'/php13/image/podpiska3.gif">
                                </a><!--podpiska5.png podpiska3.gif-->
           
                         </td></tr></table>';     
         return( $text_out );
        }
нужно чтобы количество нажатий писалось над кнопкой.

Спасибо за Вашу помощ.

18

Re: Как увеличить количество строк/знаков?

Victor2008
print - для формирования вывода, а вы смешали эту функцию со сборкой в переменную. Выберите что-то одно.

Здесь присутствует только часть читающая из файла, а должна быть еще и та, которая записывает в файл.

19

Re: Как увеличить количество строк/знаков?

Доброго времени суток!
С Новым годом!
Пусть в этом году посетитьелей форума будет больше чем в прошлом году.
Вы знаете к сожалению код который Вам представил попал мне наглаза именно в таком виде. Буду продолжать поиски.

Вы знаете по поводу RSS нашел PHP код и переделал под себя и он таки на localhost работает с базой вот код:
<?php
   
    echo '<?xml version="1.0" encoding="windows-1251"?>
          <rss version="2.0">
          <channel>
          <title>RSS-канал редакции газеты "Сдава Севастополя+"</title>
          <link><a href="www.slava.sebastopol.ua">www.slava.sebastopol.ua</a></link>
          <description>Описание канала (кратко)</description>';
         
     $hostname   = "localhost";
     $username   = "root";
     $password   = "password";
     $dbName     = "staty";
     $userstable = "article";
     
     @mysql_connect ( $hostname, $username, $password, $dbName );   
     @mysql_select_db("slava_sebastopol_ua")
     or die(mysql_error());
         
    $r= @mysql_query ("SELECT id, date, title, text, author FROM article ORDER BY date DESC LIMIT 10")
    or die(mysql_error());
    while ($row= mysql_fetch_array ($r))
   {
     $id=$row['id'];
     $date=$row['date'];
     $title=$row['title'];
     $text=$row['text'];     
     $author=$row['author'];
     echo '<table border="1" align="center"width="780" cellspacing="0" cellpadding="0"><tr><td align="">
          <item>
            <pubDate>'.$date.'</pubDate><br>
            <b><description>'.$title.'</description></b><br>           
            <description>'.$text.'</description><br>
            <author>'.$author.'</author><br>
            <link><a href ="http://localhost/">статья</a></link>
            <guid>читать полностью</guid>
          </item></td></tr></table>';
   }     
   echo '
         </channel>
         </rss>
        ';
?>
В браузере можно перейти на эту странице только по кнопке и эта страницйа не создается как отдельный xml файл. Как написать чтобы сиздавался отдельный xml файл и запись из базы автоматически попадала в xml файл. Знаю что нужно писать в php файле код типа
include_once( "./rss/rss.xml" ); но потом как писать переменную в самом rss.xml php код невоспринимается самим xml??

20

Re: Как увеличить количество строк/знаков?

Victor2008
Функция echo выводит данные, а вам надо собрать все в переменную и затем поместить в файл.
Первой строкой задаем пустую строковую переменную, например:
$to_file = '';
Затем меняем все echo на:
$to_file .= '... и т. д.
Обратите внимание на то, что перед знаком равно стоит точка (конкатенация).

Добавьте функцию записи в файл:

function WriteToFile($sFile, $str, $mode = 'w') {
    $bReturn = false;
    if (is_writable($sFile)) {
        if ($handle = fopen($sFile, $mode)) {
            if (fwrite($handle, $str) !== false) {
                $bReturn = true;
            }
            fclose($handle);
        }
    }
    return $bReturn;
}

И вызовите ее в самом конце:

WriteToFile($_SERVER['DOCUMENT_ROOT'] . '/rss/rss.xml', $to_file);

Если это Unix, то каталог rss должен иметь разрешение на запись.

21

Re: Как увеличить количество строк/знаков?

Доброго времени суток.
Спасибо большое за предоставленный код.
Мной были добавлены строки в файл и вот как выглядит теперь файл:
<?php     
    $to_file = '';
               
    $to_file .= '<?xml version="1.0" encoding="windows-1251"?>
                 <rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
                 <channel>
                 <title>RSS-канал редакции газеты "Сдава Севастополя+"</title>
                ';         
     $hostname   = "localhost";
     $username   = "root";
     $password   = "password";
     $dbName     = "staty";
     $userstable = "article";
     
     @mysql_connect ( $hostname, $username, $password, $dbName );   
     @mysql_select_db("slava_sebastopol_ua")
     or die(mysql_error());
         
    $r= @mysql_query ("SELECT id, date, title, text, author FROM article ORDER BY date DESC LIMIT 10")
    or die(mysql_error());
    while ($row= mysql_fetch_array ($r))
          {
          $id=$row['id'];     
          $date=$row['date'];               
          $title=$row['title'];
          $text=$row['text'];     
          $author=$row['author'];         
          $to_file .= '                 
                      <pubDate>'.$d.'</pubDate>           
                 <item>
                      <title>'.$title.'</title>
                      <link></link>
                      <description>'.$text.'</description>
                      <author>'.$author.'</author>
                      <link><a href ="#">статья</a></link>
                      <guid>http://'.$_SERVER["HTTP_HOST"].'/</guid>           
                </item>
                     ';
         }     
   $to_file .= '         
         </channel>
         </rss>
        ';
    function WriteToFile($sFile, $str, $mode = 'w')
                        {
                            $bReturn = false;
                            if (is_writable($sFile))
                               {
                                if ($handle = fopen($sFile, $mode))
                                   {
                                   if (fwrite($handle, $str) !== false)
                                      {
                                       $bReturn = true;
                                      }
                                   fclose($handle);
                                   }
                               }
                               return $bReturn;
                        }
   WriteToFile($_SERVER['DOCUMENT_ROOT'] . './rss/rss.xml', $to_file);
?>
Все работает кроме даты в базе дата DATETIME не пишется в формате GMT, а в RSS дата читается только с GMT?
Есть код:
$t="0000-00-00 00:00:00";
$y=substr($t,0,4);
$m=substr($t,5,2);
$d=substr($t,8,2);
$h=substr($t,11,2);
$mi=substr($t,14,2);
$s=substr($t,17,2);
$d=date("D, d M Y H:i:s",mktime($h, $mi, $s, $m, $d, $y));
Но он почему-то неработает?

Теперь такая штука весь код выполняется сервером посредством запуска одного файла, в котором и находтся, допустим http://localhost/article.php, а нужно чтобы код срабатывал автоматически вместе с загрузкой главного файла index.php! Как это зделать?
Третье, как вызвать ссылкой текст из базы целиком если на сайте три строки из текста?
Как сделать чтобы из полного текста в базе на сайте было бы видно только заголовок и три строки текста, а по ссылке в отдельном окне открывался бы весь текст?

Заранее благодарен за ответ.

22

Re: Как увеличить количество строк/знаков?

Victor2008
Формирование строки времени для rss из поля типа DATETIME.

$date = date('j M Y H:i:s O', strtotime($row['date']));
Victor2008 сказал:

Теперь такая штука весь код выполняется сервером посредством запуска одного файла, в котором и находтся, допустим http://localhost/article.php, а нужно чтобы код срабатывал автоматически вместе с загрузкой главного файла index.php! Как это зделать?

Через include в index.php.

Victor2008 сказал:

Третье, как вызвать ссылкой текст из базы целиком если на сайте три строки из текста?

Не понял вопрос.

Victor2008 сказал:

Как сделать чтобы из полного текста в базе на сайте было бы видно только заголовок и три строки текста, а по ссылке в отдельном окне открывался бы весь текст?

В PHP текст по количеству символов обрезается функцией substr(). Остальное вам надо самому делать.

23

Re: Как увеличить количество строк/знаков?

Доброго времени суток.
Большоен спасибо! Код работает.
Правда браузер(Mozilla, Opera, IE) теперь при загрузке страницы выдают ошибку:
Parse error: syntax error, unexpected T_STRING in c:\usr\home\slava.sebastopol.ua\www\rss\rss.xml on line 1
А в самом файле эта самая первая строка:
<?xml version="1.0" encoding="windows-1251"?>
Что случилось?

Спасибо что подсказали с функцией substr(), на глаза попал код:
$text = substr( '<p>'$r [ "vrez" ].'</p>'.$r [ "text" ], 0, 550 );
В таблицу поскольку это всетаки статья, то добавил vrez. Но хорошего описания для цифр , 0, 550(какими они могут быть пока не нашел). На другой странице при таком коде просто вообще пропадает текст. А мне нужно чтобы эта часть текста которыю выризает из базы функция substr() была бы ссылкой на старницу с полной версией статьи, которая находится в базе.

Сообщение добавлено Wed Jan 14 11:14:03 2009
Да и еще проблема с датой осталась. Дата видна в коде файла xml, а вот в окне браузера не отображается, почему7

24

Re: Как увеличить количество строк/знаков?

Здесь ошибка. Надо убрать точку перед /rss/rss.xml.

 WriteToFile($_SERVER['DOCUMENT_ROOT'] . './rss/rss.xml', $to_file);

Документация: substr

// Вводитм в переменную $text данные из поля text вырезая 550 символов от начала.
$text = substr($row['text'], 0, 550);

________________

Замените строку:
$date=$row['date'];
На:
$date = date('j M Y H:i:s O', strtotime($row['date']));

Замените строку:
<pubDate>'.$d.'</pubDate>
На:
<pubDate>'.$date.'</pubDate>

Делайте страницу с полной статьей и ставьте ссылку на нее. Здесь нет никаких проблем, вроде.

25

Re: Как увеличить количество строк/знаков?

Доброго времени суток!
Спасибо за очень детальный ответ.

Вы знаете в этом коде:
WriteToFile($_SERVER['DOCUMENT_ROOT'].'/rss/rss.xml', $to_file);
точку _._ перед /rss/rss.xml', $to_file); убрал, однако браузер продолжает выдавать ошибку:
Parse error: syntax error, unexpected T_STRING in c:\usr\home\slava.sebastopol.ua\www\rss\rss.xml on line 1

Еще такой момент: на хостинге стоит Unix, а там-то начинается с точки. Идем дальше на всякий случай версии браузеров: Opera 8.52, Mozilla 3.0.3, IE 6.0.2900, Netscape 7.2. Может все дело в версиях браузеров? Хотя посмотрел другие новостные сайты, там все чудестно. Или может просто там хостинг не Unix.
Да, еще такое Вам неприходилось сталкиваться с: Mandriva Linux 2008 . 1 Spring PowerPack ато я ищу статьи со скриншотами по установке?