[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Помогите найти ошибку в небольшом коде.
arhitec
Здравствуйте! Я начинающий и прошу не судить меня строго.
Код написал самостоятельно, изучая всяческую документацию в интернете.
И так. Суть кода в том, что бы выводить статьи на гоавной странице сайта.

Привожу пример кода:
---------------------------------------------------------------------------------
<?
// Читаем из файла содержимое в массив
$mas_1 = file("bloks/blog/base.txt");

// выделяем текст до запятой и вносим его в новый массив
foreach ($mas_1 as $index){
$mas_2 = explode(",", $index);


// Выводим заголовок статьи
echo "
<table width=720 border=0 cellspacing=0 cellpadding=0>
<tr><td class='text-001'>"
;
echo $mas_2[2];
echo"</td></tr></table>";

// Выводим дату публикации
echo "
<table width=720 border=0 cellspacing=0 cellpadding=0>
<tr><td width=100 class='text-006'>дата публикации:</td>
<td width=620 class='text-004'>"
;
echo $mas_2[0];
echo"</td>
</tr></table><table width=100 border=0 cellpadding=0 cellspacing=0><tr><td height=10></td></tr></table>"
;

// Выводим текст статьи
include "records/$mas_2[4].php";
echo"<table width=100 border=0 cellpadding=0 cellspacing=0><tr><td height=100></td></tr></table>";
}; ?>


А вот скриншот того, что получается:
---------------------------------------------------------------------------------
http://temp.malyshenko.ru/php.jpg

на всякий случай ссылка на место происходящего:
---------------------------------------------------------------------------------
http://www.temp.malyshenko.ru

попробую объяснить что происходит в коде:
Есть некий файл base.txt в котором хранятся строки типа:
091206,01,Здравствуйте я Ваша тетя.,02,091206-01-rec-short
5 декабря 2009 года,01,Интерьер как произведение искусств.,01,091205-01-rec-short

Скрипт считывает каждую строку и делит на фразу с разделителем "," (запятая)
Все бы хорошо, если бы не одна статья печаталась а вторая нет, а вместо нее выдает ошибку, которую видно на скриншоте.
Помогите, пожалуйста, найдите ошибку в коде. За ранее спасибо!



Спустя 31 минута, 16 секунд (6.12.2009 - 02:44) John_761 написал(а):
Для работы с текстовым файлом его сперва нужно открыть, указав режим, и в конце работы обязательно закрыть. То что первым бросилось в глаза.
И оформляй код в специальные теги [php] etc перед отправкой

Спустя 9 минут, 55 секунд (6.12.2009 - 02:54) dr_Lev написал(а):
Замени
// Выводим текст статьи
include "records/$mas_2[4].php";

на
// Выводим текст статьи
include "records/".str_replace("\n","",$mas_2[4]).".php";


-----------------

Можно красивее и правильнее сделать...

Замени
// выделяем текст до запятой и вносим его в новый массив
foreach ($mas_1 as $index){
$mas_2 = explode(",", $index);

на
// выделяем текст до запятой и вносим его в новый массив
foreach ($mas_1 as $index){
$mas_2 = explode(",", rtrim($index));

Спустя 5 минут, 24 секунды (6.12.2009 - 02:59) dr_Lev написал(а):
John_761
Ничего открывать и закрывать не нужно...
Функция file() сама все это делает и возвращает все содержимое файла в массиве.
http://docs.php.net/manual/ru/function.file.php

Спустя 11 часов, 1 минута, 46 секунд (6.12.2009 - 14:01) arhitec написал(а):
Цитата (dr_Lev @ 5.12.2009 - 23:54)
Замени
// Выводим текст статьи
include "records/$mas_2[4].php";

на
// Выводим текст статьи
include "records/".str_replace("\n","",$mas_2[4]).".php";

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

Спустя 8 часов, 16 минут, 8 секунд (6.12.2009 - 22:17) dr_Lev написал(а):
Цитата (arhitec @ 6.12.2009 - 11:01)
Цитата (dr_Lev @ 5.12.2009 - 23:54)
Замени
// Выводим текст статьи
include "records/$mas_2[4].php";

на
// Выводим текст статьи
include "records/".str_replace("\n","",$mas_2[4]).".php";

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

Когда ты при помощи file() считываешь инфу с файла, то в массиве срок, которые ты получаешь, в каждой строке остается последний символ переноса строки (почитай документацию по функции), но в последней строке такого символа нет, именно поэтому у тебя выводится одна новость, но не вторая, а последняя, (попробуй добавь в base.txt еще несколько записей)

А при помощи функции str_replace(), этот последний символ переноса строки ("\n") заменяется на пустой символ ("") т.е. просто удаляется.

P.S. Как я в пред. посте писал, для удаления последнего символа переноса строки, лучше использовать функцию rtrim(). Кстати в мануале по функции file() тоже рекомендуют использовать rtrim(). (Маниуал для file())

Спустя 7 дней, 5 часов, 18 минут, 18 секунд (14.12.2009 - 03:36) arhitec написал(а):
Спасибо большое - очень помогло!
Приятно чувствовать себя увереннее в знаниях smile.gif
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.