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

Форум PHP

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

 

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

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

тема: Поиск в массиве и файловая база данных
 
 автор: Alex Kraft   (09.07.2006 в 00:15)   письмо автору
 
 

Здравствуйте!
Есть файл news.txt. Такого формата: n_id#title#img#address
Где n_id-цифра - например, как в mysql айдишник c auto increment и т.д, title - заголовок новости, img - картина (ее адрес), address - адрес файла с текстом новости.
В общем, файл, где # - разделитель...
Например, в файле news.txt такие строки:

1#Softtime Rules 1#img/st1.jpg#rus/st1.txt
2#Softtime Rules 2#img/st2.jpg#rus/st2.txt
3#Softtime Rules 3#img/st3.jpg#rus/st3.txt
4#Softtime Rules 4#img/st4.jpg#rus/st4.txt
5#Softtime Rules 5#img/st5.jpg#rus/st5.txt


Есть страница, например, news.php. Методом GET передается id. Если !isset($id), то выводятся заголовок и картинка новости. Иначе выводится сама новость, т.е. текст из файла, address которого есть в вышеупомянутой текстовой базе данных. Сам php файл идет в аттаче.
Реализовывая все это столкнулся с двумя проблемами.
1. в файле есть код, реализующий поиск в массиве. Может, есть более быстрый и удобный способ?
2. если не задан айдишник, то формируются ссылки такого типа: news.php?id=1. Когда я нажимаю на такую ссылку, php ругается: Warning: file_get_contents(rus/st1.txt ) [function.file-get-contents]: failed to open stream: Invalid argument in... Когда news.php?id=5 (id=последняя запись в news.php) все выводится...
Все файлы на своем месте, все адреса в текстово БД прописаны правильно. Помогите разобраться почему PHP ругается.

   
 
 автор: Alex Kraft   (09.07.2006 в 01:33)   письмо автору
 
   для: Alex Kraft   (09.07.2006 в 00:15)
 

Вот только что поэксперементировал с кодом. Если к каждой строке файла приписать в самом конце разделитель(#), то все выводится/читается нормально. Если можно, то объясните почему так получается... Я с файлами мало работал, все болье с MySQL...

1#Softtime Rules 1#img/st1.jpg#rus/st1.txt#
2#Softtime Rules 2#img/st2.jpg#rus/st2.txt#
3#Softtime Rules 3#img/st3.jpg#rus/st3.txt#
4#Softtime Rules 4#img/st4.jpg#rus/st4.txt#
5#Softtime Rules 5#img/st5.jpg#rus/st5.txt#

Файл на данный момент пишется в ручную.

   
 
 автор: cheops   (09.07.2006 в 11:04)   письмо автору
 
   для: Alex Kraft   (09.07.2006 в 01:33)
 

А у вас какой код извлекает строки из файла и разбивает их на элементы?

   
 
 автор: Alex Kraft   (09.07.2006 в 14:03)   письмо автору
 
   для: cheops   (09.07.2006 в 11:04)
 

Тот, который в аттаче:

$array = file('rus/news.txt');
$array = array_reverse($array);
foreach($array as $ar)
{
      if($exp = explode('#', $ar))
      {
    $nid = $exp[0];
    $title = $exp[1];
    $img = $exp[2];
    $link = $exp[3];
    echo '<b>['.$nid.']</b> '.$title.'<br> <a href="news.php?id='.$nid.'"><img src="'.$img.'"  width="300" height="300" /></a><br /><br />';
     }
}



Этот код выводит список новостей...

   
 
 автор: valenok   (09.07.2006 в 22:40)   письмо автору
 
   для: Alex Kraft   (09.07.2006 в 01:33)
 

Если нуменация в файле начинается с одного - можно намного упростить, точнее ускорить код.


<?
$array 
file();

if(!isset(
$_GET['id']) OR !ctype_digit($_GET['id']) OR $_GET['id']<1){

$array array_reverse($array);
foreach(
$array as $ar)
{
if(
$exp explode('#'$ar)){

    
$nid $exp[0]; 
    
$title $exp[1]; 
    
$img $exp[2]; 
    
$link $exp[3]; 
    echo 
'<b>['.$nid.']</b> '.$title.'<br> <a href="news.php?id='.$nid.'"><img src="'.$img.'"  width="300" height="300" /></a><br /><br />'

};        
// Explode     
};       // foreach
die();  // Stop script execution
}      // Isset $_GET['id']
else{ // Isset $_GET['id']


if($exp explode('#'$array[$_GET['id']-1])){
echo 
$exp[0].' - '.$exp[1].'<br>';
$content file_get_contents($exp[3]);
$content nl2br($content);
echo 
$content;}; // Explode

// Isset $_GET['id']

   
 
 автор: valenok   (09.07.2006 в 22:26)   письмо автору
 
   для: Alex Kraft   (09.07.2006 в 00:15)
 

В аттаче:

У вас:

if($did == $id)

Надо

if($nid == $id)

Название переменной указанно не верно

   
Rambler's Top100
вверх

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