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

Форум PHP

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

 

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

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

тема: Опять не определяется переменная
 
 автор: bax   (30.12.2007 в 00:24)   письмо автору
 
 

Всем привет!
Очень требуется помощь.
Скрипт "постраничная навигация" из книги "PHP5" Кузнецова М. и Симдянова И.
Подскажите тупому, почему не определяется "$temp"?
Как начинающий пользуюсь Денвером (все по умолчанию), может в нем проблема?
Только, пожалуйста, не посылайте меня куда нибудь еще, а просто скажите где ошибка.
Заранее благодарен.
------------------------------------------------------------------------

<?php
  
// Имя файла
  
$filename "text.txt";
  
// Число позиций на странице
  
$pnumber 3;
  
// Открываем файл для чтения
  
$bufer file_get_contents($filename);

  
// Находим все строки при помощи регулярного выражения
  
preg_match_all("#([\d]+) ([^\n]+)(\n|$)#U",
                 
$bufer
                 
$out,
                 
PREG_PATTERN_ORDER);
  
// Формируем промежуточный массив
  
for($i 0$i count($out[1]); $i++)
  {
    
$temp[] = trim($out[2][$i]);
  }

  
// Проверяем передан ли номер текущей страницы
  
if(isset($_GET['page'])) $page $_GET['page'];
  else 
$page 1;
  
// Число страниц
  
$total count($temp);
  
$number = (int)($total/$pnumber);
  if((float)(
$total/$pnumber) - $number != 0$number++;

  
$start = (($page 1)*$pnumber 1);
  
$end $page*$pnumber 1;
  if(
$end $total$end $total;

  
// Выводим содержимое страниц
  
for($i $start$i $end$i++)
  {
    echo 
$temp[$i]."<br>";
  }

  
// Постраничная навигация
  
for($i 1$i <= $number$i++)
  {
    
// Если это произвольная страница
    
if($i != $number)
    {
      if(
$page == $i)
      {
        echo 
"[".(($i 1)*$pnumber 1)."-".$i*$pnumber."]&nbsp;";
      }
      else
      {
        echo 
"<a href=$_SERVER[PHP_SELF]?page=".$i.">[".
             ((
$i 1)*$pnumber 1)."-".$i*$pnumber."]</a>&nbsp;";
      }
    }
    
// Если это последняя страница заменяем последнюю цифру 
    // максимальным числом позиций в массиве $temp
    
else
    {
      if(
$page == $i)
      {
        echo 
"[".(($i 1)*$pnumber 1)."-".($total 1)."]&nbsp;";
      }
      else
      {
        echo 
"<a href=$_SERVER[PHP_SELF]?page=".$i.">[".
             ((
$i 1)*$pnumber 1)."-".($total 1)."]</a>&nbsp;";
      }
    }
  }
?>
         ----------содержимое файла"text.txt"------------

програмирование
програмирование на PHP
програмирование на JavaScript
програмирование на ASP.NET
програмирование на Java 
програмирование на Perl
програмирование на C++
програмирование на Pascal
програмирование на Fortran
програмирование на Assembler

   
 
 автор: Джэф   (30.12.2007 в 01:38)   письмо автору
 
   для: bax   (30.12.2007 в 00:24)
 


<?
preg_match_all
("|(.*)\n|"$bufer,  $outPREG_PATTERN_ORDER);
// Формируем промежуточный массив
 
for($i 0$i count($out[1]); $i++)
 {
  
$temp[] = trim($out[1][$i]);
}
?>

   
 
 автор: Faraon   (30.12.2007 в 02:28)   письмо автору
 
   для: Джэф   (30.12.2007 в 01:38)
 

На каком основании вы так решили ошибку?

   
 
 автор: sim5   (30.12.2007 в 08:27)   письмо автору
 
   для: bax   (30.12.2007 в 00:24)
 

Вот это тот случай когда блокирование вывода предупреждений (по этой переменной) не страшно. Просто происходит заполнение массива, до его объявления:

<?
//ели бы он был объявлен заранее
$temp = array();
// Формируем промежуточный массив 
  
for($i 0$i count($out[1]); $i++) { 
   
//то здесь ругаться уже будет 
   
$temp[] = trim($out[2][$i]); 
  }
?>

   
 
 автор: kasmanaft   (30.12.2007 в 08:55)   письмо автору
 
   для: bax   (30.12.2007 в 00:24)
 

  // Находим все строки при помощи регулярного выражения 
  preg_match_all("#([\d]+) ([^\n]+)(\n|$)#U", 
                 $bufer,  
                 $out, 
                 PREG_PATTERN_ORDER);

Это выражение не соответствует тексту, содержащемуся в файле..
Попробуйте исправить текст в файле на
1 програмирование 
2 програмирование на PHP 
3 програмирование на JavaScript 
4 програмирование на ASP.NET 
* * * * * * * * * *

Либо выражение на
"#([\d]+)?\s*([^\n]+)(\n|$)#U"

   
 
 автор: sim5   (30.12.2007 в 09:06)   письмо автору
 
   для: kasmanaft   (30.12.2007 в 08:55)
 

А еще лучше выкинуть это:) file, explode - наверное быстрее будет и без проблем.

   
 
 автор: bax   (30.12.2007 в 22:42)   письмо автору
 
   для: sim5   (30.12.2007 в 09:06)
 

Спасибо.
Щас буду пробовать

   
Rambler's Top100
вверх

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