Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Компьютеры + Интернет » Вебмастеру » Ошибка при работе скрипта

Ответить
Настройки темы
Ошибка при работе скрипта

Аватара для Rudy

Пользователь


Сообщения: 116
Благодарности: 1

Профиль | Отправить PM | Цитировать


Прикрутил скрипт новостей. Все работает. Но в начале выдает ошибку. *

Ошибка:
Цитата:
Warning: session_start(): Cannot send session cookie - headers already sent by (output started at /var/home/195.123.48.17/itc.org.ua/public_http/index.php:10) in /var/home/195.123.48.17/itc.org.ua/public_http/news.php on line 2
Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at /var/home/195.123.48.17/itc.org.ua/public_http/index.php:10) in /var/home/195.123.48.17/itc.org.ua/public_http/news.php on line 2
Скрипт (начало):
Код: Выделить весь код
<?
session_start();
include"params.php";
print"<link rel=\"stylesheet\" href=\"style.css\" type=\"text/css\"/>";
if($show=="")
{
if($page=="")
$page=1;
$file=file("base.dat");
$entries=count($file); 
. . .
Ошибка происходит на index.php *на скрипте меню

Код: Выделить весь код
<!-- menu building -->
<script type='text/javascript'>
function Go(){return}
</script>
<script type='text/javascript' src='exmplmenu_var.js'></script>
<script type='text/javascript' src='menu_com.js'></script>
<!-- end menu building -->
Это была страничка html я изменил расширение на php и прикручиваю скрипт из news.php вставляя код:
Код: Выделить весь код
<?include"news.php";?>

[s]Исправлено: Prisoner, 2:40 21-09-2004[/s]

Отправлено: 17:45, 20-09-2004

 

Аватара для Prisoner

Engrossed by the Void


Сообщения: 2229
Благодарности: 60

Профиль | Отправить PM | Цитировать


Есть маленькое уточнение - ограничивать новость посимвольно не есть хорошо - возможно отрезание на каком-либо слове, поэтому лучше резать по словам, выводя, скажем, лишь некоторое их количество. Это частая задача и ее может решить такая функция (писалась мной давно и при некоторых малых изменениях работает нормально):
Код: Выделить весь код
$Year = array('января', 'февраля', 'марта', 'апреля', 'мая', 'июня', 'июля', 'августа', 'сентября', 'октября', 'ноября', 'декабря');
function DrawTitleNews()
    {
     global $Year;

     $DBLink = db_connect(DBHost, DBName, DBLogin, DBPassword, true);
     $Query = 'SELECT
                 news.n_id,
                 news.n_cap,
                 news.n_full,
                 news.n_date
               FROM
                 news
               ORDER BY
                 news.n_date DESC
               LIMIT 3';
     //echo nl2br($Query);
     $Result = mysql_query($Query);
     //есть ли новости? Есть? Выводим.
     if (mysql_num_rows($Result) > 0)
       {
        echo '<tr height="14">
                <td align="center">
                  <table width="90%" cellpadding="0" cellspacing="0" border="0">
                    <tr>
                      <td colspan="2">
                        <table width="100%" cellspacing="0" cellpadding="0" border="0">
                          <tr>
                            <td class="newscap">Последние новости</td>
                            <td class="newsdate" nowrap>&nbsp;
                            </td>
                          </tr>
                        </table>
                      </td>
                     </tr>
                    <tr>
                      <td width="30"><img src="/img/1pxtr.gif" width="30" height="1" alt=""></td>
                      <td class="newsbody" width="100%">
                        <table width="100%" cellspacing="0" cellpadding="0" border="0">';
        while ($NewsInfo = mysql_fetch_array($Result, MYSQL_ASSOC))
          {
           //делим дату формата YYYY-mm-dd на составляющие
           $DT = explode('-', $NewsInfo['n_date']);
           //в $NewsBody теперь WordsPerNews слов
           $NewsBody = implode(' ', array_slice(explode(' ', $NewsInfo['n_full']), 0, WordsPerNews));
           //проверяем необходимость вывода новости в укороченном виде
           if (strlen($NewsBody) < strlen($NewsInfo['n_full']))
             {
              $NewsBody .= '<acronym class="redb" title="Это многоточие означает, что новость показана в укороченном виде. 
Ниже каждой такой новости есть ссылка для доступа к 
полному тексту новости.">...</acronym>';
              $FullLnk = '<tr><td colspan="2"><img src="/img/1pxtr.gif" width="1" height="1" alt=""></td></tr>
                          <td align="right" colspan="2"><a class="dblue" href="/news/'.$NewsInfo['n_id'].'"
 target="_blank" title="Перейти к просмотру полного текста новости в новом окне.">
полностью'.ImgBArrowRight.'</a></td>
                          <tr><td colspan="2"><img src="/img/1pxtr.gif" width="1" height="8" alt=""></td></tr>';
             }
           else
             $FullLnk = '<tr><td colspan="2"><img src="/img/1pxtr.gif" width="1" height="8" alt=""></td></tr>';
           echo '<tr height="14">
                <td align="center">
                  <table width="90%" cellpadding="0" cellspacing="0" border="0">
                    <tr>
                      <td colspan="2">
                        <table width="100%" cellspacing="0" cellpadding="0" border="0">
                          <tr>
                            <td class="dnewscap">
                               <h2>'.$NewsInfo['n_cap'].'</h2>
                             </td>
                            <td class="dnewsdate" nowrap>
                               '.($DT[2]+0).' '.$Year[$DT[1]-1].' '.$DT[0].'
                            </td>
                          </tr>
                        </table>
                      </td>
                     </tr>
                    <tr>
                      <td width="30"><img src="/img/1pxtr.gif" width="30" height="1" alt=""></td>
                      <td class="dnewsbody" width="100%"><p class="normal_padl20">'.$NewsBody.'</p></td>
                    </tr>
                    '.$FullLnk.'
                  </table>
                </td>
              </tr>';

          }
        echo '          </table>
                      </td>
                    </tr>
                    <tr><td colspan="2"><img src="/img/1pxtr.gif" width="1" height="1" alt=""></td></tr>
                    <tr><td colspan="2" align="right"><a class="dblue" href="/news/all">архив'.ImgBArrowRight.'</a></td></tr>
                    <tr><td colspan="2"><img src="/img/1pxtr.gif" width="1" height="8" alt=""></td></tr>
                  </table>
                </td>
              </tr>';
       }
    }
У меня новости берутся из БД, но в общем и целом не важно откуда происходят данные... только в коде разобраться надо . Как это выглядит при выводе можно поглядеть тут

-------
Не могу дать более дельный совет - не хватает системных ресурсов...


Отправлено: 02:48, 25-09-2004 | #11



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

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


Аватара для Rudy

Пользователь


Сообщения: 116
Благодарности: 1

Профиль | Отправить PM | Цитировать


Это слишком для моего простенького скрипта,
- проверяется необходимость вывода в сокращенном виде,
- используется SQL
- размер $NewsBody оговорен где-то ранее.

У меня вывод новости:
... <td width=\"99%\"><font size=2>$msg</font>
как бы ее тупо резануть после 200 символа или ограничить в рамках ячейки таблицы

Отправлено: 16:47, 25-09-2004 | #12


Аватара для Prisoner

Engrossed by the Void


Сообщения: 2229
Благодарности: 60

Профиль | Отправить PM | Цитировать


Лады... тупо режем (но по словам , скажем 50 слов):
Код: Выделить весь код
$msg = implode(' ', array_slice(explode(' ', $msg), 0, 50));
После этого кода от строки в $msg будет только 50 слов.

-------
Не могу дать более дельный совет - не хватает системных ресурсов...


Отправлено: 02:27, 26-09-2004 | #13


Аватара для Rudy

Пользователь


Сообщения: 116
Благодарности: 1

Профиль | Отправить PM | Цитировать


Сделал так

if(strlen($msg)>50)
$msg = implode(' ', array_slice(explode(' ', $msg), 0, 50));

Ок!

Отправлено: 12:50, 27-09-2004 | #14


Аватара для Prisoner

Engrossed by the Void


Сообщения: 2229
Благодарности: 60

Профиль | Отправить PM | Цитировать


Ок только на первый взгляд... strlen считает символы, а из-за применения explode(' ', $msg) мы оперируем словами. В результате переводя на человеческий язык ваш код получаем: если длина строки больше 50ти символов, то оставить в строке только 50 слов. А что если слова будут больше одного символа (такое ведь иногда встречается? ). В общем корректнее будет так:
Код: Выделить весь код
$msgwords = explode(' ', $msg);
if (sizeof($msgwords)>50)
  $msg = implode(' ', array_slice($msgwords, 0, 50));
Вот теперь новость с более чем 50тью словами будет усекаться корректно.

-------
Не могу дать более дельный совет - не хватает системных ресурсов...


Отправлено: 02:26, 28-09-2004 | #15


Аватара для Rudy

Пользователь


Сообщения: 116
Благодарности: 1

Профиль | Отправить PM | Цитировать


Как правильно сделать:
// если болше 50 слов, краткое содежание+ссылка

Код: Выделить весь код
$msgwords = explode(' ', $msg);
if (sizeof($msgwords)>50)
{
$msg = implode(' ', array_slice($msgwords, 0, 50));
print"
<table width=\"100%\" border=\"0\" cellpadding=\"0\" cellspacing=\"5\">
<tr valign=\"top\">
<td width=\"99%\><font size=0><p>$msg</font> <a href=http://msg.php</a></td>
</tr>
</table>

// если меньше 50 слов полное содержание

$msgwords = explode(' ', $msg);
if (sizeof($msgwords)<50)
{
$msg = implode(' ', array_slice($msgwords, 0, 50));
print"
<table width=\"100%\" border=\"0\" cellpadding=\"0\" cellspacing=\"5\">
<tr valign=\"top\">
<td width=\"99%\><font size=0><p>$msg</font></td>
</tr>
</table>
[s]Исправлено: Prisoner, 2:33 29-09-2004[/s]

Отправлено: 13:07, 28-09-2004 | #16


Аватара для Prisoner

Engrossed by the Void


Сообщения: 2229
Благодарности: 60

Профиль | Отправить PM | Цитировать


Код: Выделить весь код
$msgwords = explode(' ', $msg); 
if (sizeof($msgwords)>50) 
  {
   $msg = implode(' ', array_slice($msgwords, 0, 50)); 
   print"<table width=\"100%\" border=\"0\" cellpadding=\"0\" cellspacing=\"5\">
               <tr valign=\"top\"> 
                 <td width=\"99%\><font size=0><p>$msg</font> <a href=http://msg.php</a></td> 
               </tr>
            </table>";
  }
else
  print"<table width=\"100%\" border=\"0\" cellpadding=\"0\" cellspacing=\"5\">
               <tr valign=\"top\"> 
                 <td width=\"99%\><font size=0><p>$msg</font></td> 
               </tr>
            </table>";
То есть чтобы сделать правильно нужно читать мануал (любой) по структурам ветвления сиречь об условиях.

-------
Не могу дать более дельный совет - не хватает системных ресурсов...


Отправлено: 02:40, 29-09-2004 | #17


Аватара для Rudy

Пользователь


Сообщения: 116
Благодарности: 1

Профиль | Отправить PM | Цитировать


Новости выводятся на страницу с последней и вниз, а как вывести наоборот.

Цитата:
if($page!=""
{
$Tmp=$nums*$page;
$tmp=$nums;
$up=$Tmp-$tmp;

$down=$up+$nums;
print"
";
for ($i=$up; $i<$down; $i++)
{
$rev=@array_reverse($file);
if ($rev[$i]!=""
{
list($myid,$rand,$date,$name,$mail,$sitename,$url,$msg)=split("::",$rev[$i]);

$v=@file("votes/$rand.dat";
$s=@file("trans/$rand.dat";

$n=$i-$entries;
$n++;
$n=abs($n);
$k=$n+1;

Отправлено: 11:06, 12-10-2004 | #18


Аватара для Prisoner

Engrossed by the Void


Сообщения: 2229
Благодарности: 60

Профиль | Отправить PM | Цитировать


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

-------
Не могу дать более дельный совет - не хватает системных ресурсов...


Отправлено: 06:52, 13-10-2004 | #19



Компьютерный форум OSzone.net » Компьютеры + Интернет » Вебмастеру » Ошибка при работе скрипта

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Условие выхода при ошибке в работе скрипта ShadowMas AutoIt 6 31-05-2009 01:30
Ошибка - При работе в программе Allsubmitter выскакивает ошибка QUMATOZ Microsoft Windows 2000/XP 3 28-04-2009 16:50
Ошибка - [решено] Ошибка при работе в интернете cleric9 Microsoft Windows 2000/XP 4 01-05-2008 11:50
Ошибка при работе советника ksan Microsoft Windows Vista 4 26-05-2007 23:33
Ошибка при работе в сети AC Milan Сетевые технологии 1 02-12-2004 00:59




 
Переход