![]() |
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]() ![]() ![]() |
|
GC |
|
|||
Unregistered |
Помогите люди добрые!
Я пишу новостной скрипт. Добовление новостей работает, а вот как заставить его изменять новость нинаю ![]() помогите пожалуйста! заранее спасибо. |
|||
|
||||
acp |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 389 Регистрация: 4.2.2003 Где: Владимир Репутация: нет Всего: 2 |
Система основана на файлах?
Тогда: 1. Можно сделать для каждой новости твоей отдельный файл. При изменении новости считавать этот файл и перезаписывать его 2. А можно всё в один файл запихать. Новости разделять какими-нибудь символами типа "---". При изменении новости опять же перезаписывать весь файл. PS: не совсем пойму в чём проблема... |
|||
|
||||
GC |
|
|||
Unregistered |
Да, acp система основана на файлах, новости храняться в одном .тхт файле.
проблема в том что когда перезаписываеться весь фаил то новости или удаляються или на все строки пишеться одна (та которая была изсменена). дата:строка первая дата:строка вторая дата:строка третья после редактирования допустем второй строки получаеться дата:строка вторая дата:строка вторая дата:строка вторая ![]() |
|||
|
||||
acp |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 389 Регистрация: 4.2.2003 Где: Владимир Репутация: нет Всего: 2 |
Ну приведи кусок кода, который это реализует. Если он не большой. Неправильно просто у тебя что-то и всё...
|
|||
|
||||
Devorior |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 559 Регистрация: 1.8.2002 Где: Обнинск Репутация: 1 Всего: 3 |
действительно, код напиши...у тебя наверное запись в файл неправильно идет
|
|||
|
||||
GC |
|
|||
Unregistered |
<form method="POST" action="1.php">
<? $fp = file("news.dat"); for ($i = 0; $i <= count($fp); $i++) { list($d_date,$n_news) = explode(":",$fp[$i]); if(strlen($d_date) > 0) { $n_news = ereg_replace("<br>","\r\n",$n_news); print "<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" width=\"400\"> <tr> <td colspan=\"2\"><input name=\"date\" type=\"text\" value=\"$d_date\" style=\"width: 300\"> номер: $i</td> </tr> <tr> <td colspan=\"2\" align=\"center\"><textarea name=\"news\" rows=10 cols=20 style=\"width: 400\">$n_news</textarea></td> </tr> <tr> <td colspan=\"2\" align=\"center\"> </td> </tr> <tr> <td width=\"200\" align=\"center\"><input type=\"submit\" value=\"изменить\" style=\"width: 100\" name=\"B\"></td> <td width=\"200\" align=\"center\"><input type=\"submit\" value=\"удалить\" style=\"width: 100\" name=\"b\"></td> </tr> </table><br><br>\n"; } } if ($B == "изменить") { $editfile = fopen ("news.dat","w"); $news = ereg_replace("\r\n","<br>",$news); fputs($editfile,"$date:$news\n"); fclose($editfile); print "<script LANGUAGE=\"javascript\">window.location.href = \"1.php\"</SCRIPT>"; } ?> </form> формат записи в фаил такой: date:news |
|||
|
||||
IZ@TOP |
|
|||
![]() Панда-бир! ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 4795 Регистрация: 3.2.2003 Где: Бамбуковый лес Репутация: 44 Всего: 73 |
А че страдать то ? Я тож делаю новостную ленту на файлах, проще и удобней записывать - один файл одна новость, а название файла есть дата, там вроде 17.03.03 ... а изменять это проще простого ! Просто читаешь его весь и выводишь в форму, со всеми вытикающими от сюдого ...редактируешь, ну и отправляешь потом на сервер и файл перезаписывается !
-------------------- Один из розовых плюшевых-всадников апокалипсиса... очень злой... Семь кругов ада для новых элементов языка Мои разрозненные мысли |
|||
|
||||
Devorior |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 559 Регистрация: 1.8.2002 Где: Обнинск Репутация: 1 Всего: 3 |
делай как Iz@top, потом легче будет
|
|||
|
||||
IZ@TOP |
|
|||
![]() Панда-бир! ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 4795 Регистрация: 3.2.2003 Где: Бамбуковый лес Репутация: 44 Всего: 73 |
Devorior Спасиб
![]() -------------------- Один из розовых плюшевых-всадников апокалипсиса... очень злой... Семь кругов ада для новых элементов языка Мои разрозненные мысли |
|||
|
||||
y.s.grin |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 35 Регистрация: 5.3.2003 Репутация: нет Всего: нет |
А я вот сделал так.
В одном файле тело новостное в виде двумерного массива. Там сколько хочешь можно характеристик сделать для новости(сама новость, дата, название новости, сопутствующая ссылка и так далее...) А другой файл это всё дело просматривает |
|||
|
||||
y.s.grin |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 35 Регистрация: 5.3.2003 Репутация: нет Всего: нет |
И тело новостное изменяй хоть до посинения
|
|||
|
||||
Devorior |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 559 Регистрация: 1.8.2002 Где: Обнинск Репутация: 1 Всего: 3 |
y.s.grin, а с базой еще круче можно сделать
![]() |
|||
|
||||
y.s.grin |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 35 Регистрация: 5.3.2003 Репутация: нет Всего: нет |
2Devorior
ты прав. ![]() |
|||
|
||||
Foxx |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 178 Регистрация: 19.3.2003 Где: Новосибирск Репутация: нет Всего: нет |
if ($B == "изменить") { $news = ereg_replace("\r\n","<br>",$news); $editfile = fopen ("news.dat","a+"); fputs($editfile,"$date:$news\n"); fclose($editfile); } Файл открывается в режиме записи и чтения, указатель устанавливается на последний байт, содержимое не уничтожается! Этот режим полезен если НУЖНО ЧТО_ЛИБО ДОПИСАТЬ В ФАЙЛ Небольшое замечание. В качестве разделителя лучше не использовать двоеточие. Я обычно пользуюсь "|" или "::". Таких символов точно нет в сообщении ![]() Это сообщение отредактировал(а) Foxx - 19.3.2003, 00:40 |
|||
|
||||
IZ@TOP |
|
|||
![]() Панда-бир! ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 4795 Регистрация: 3.2.2003 Где: Бамбуковый лес Репутация: 44 Всего: 73 |
Foxx А как дописать в начало файла ? я пробовал с r+ но вот беда верхнея строчка убивалась ...
-------------------- Один из розовых плюшевых-всадников апокалипсиса... очень злой... Семь кругов ада для новых элементов языка Мои разрозненные мысли |
|||
|
||||
Foxx |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 178 Регистрация: 19.3.2003 Где: Новосибирск Репутация: нет Всего: нет |
r - файл открывается только для чтения. Если файл не существует - ошибка. После удачного открытия указатель устанавливается на первый байт, то есть на начало.
r+ - файл открывается одновременно на чтение и запись. Указатель текущей позиции устанавливается на первый байт. Если файл несуществует, фозвращается false. Если в момент записи указатель установлен где-то в середине файла, то данные записываются поверх существующих, а не раздвигают их. w - cсоздаетс новый пустой файл. Если такой файл был - он уничтожается. w+ - аналогичегн w. Но если файл не существовал, он создается. Можно работать в режиме чтение/запись. Изначальное содержимое удалаяется. а - открывает файл в режиме записи. Указатель на последний байт. Содержимое не уничтожается. Если файла не существовало, он создается. а+ - аналогичен а. Содержимое остается. режим чтения/запись. Если файла не существовало, он создается. if ($B == "изменить") { $news = ereg_replace("\r\n","<br>",$news); $data=file("news.dat"); // просто создаем массив с содержимым $editfile = fopen ("news.dat","w+"); fputs($editfile,"$date:$news\n"); for($i=0; $i< sizeof($data); $i++) { fputs($editfile,"$data[$i]\n"); } fclose($editfile); } кажется так. попробуй. если не получиться - скажи. |
|||
|
||||
IZ@TOP |
|
|||
![]() Панда-бир! ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 4795 Регистрация: 3.2.2003 Где: Бамбуковый лес Репутация: 44 Всего: 73 |
... совсем за дураков держишь !!! :-( -------------------- Один из розовых плюшевых-всадников апокалипсиса... очень злой... Семь кругов ада для новых элементов языка Мои разрозненные мысли |
|||
|
||||
Foxx |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 178 Регистрация: 19.3.2003 Где: Новосибирск Репутация: нет Всего: нет |
то бишь ?
чем не нравится ? |
|||
|
||||
Foxx |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 178 Регистрация: 19.3.2003 Где: Новосибирск Репутация: нет Всего: нет |
Команды я привел на всякий случай, вдруг понядобятся.
А пример с записью в начало я переделал из прошлого примера. Что-то не работает? |
|||
|
||||
IZ@TOP |
|
||||
![]() Панда-бир! ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 4795 Регистрация: 3.2.2003 Где: Бамбуковый лес Репутация: 44 Всего: 73 |
Ну вообще это мне кажется все знают ... во всяком случае все это основы ... ну ты конечно все прямо как по книге зарубил, у меня кажись дома книга лежит одна по РНР, так там все точка в точку ! ![]()
Работает или нет я не проверял, да и за чем ... я терь такие дела с БД делаю ... А вот подскажи, мне интересно - вот если указатель на начало устанавливается на первый байт, однако все равно первая строка перезаписывается ... что мне каждый раз \n в начале записи вводить .. -------------------- Один из розовых плюшевых-всадников апокалипсиса... очень злой... Семь кругов ада для новых элементов языка Мои разрозненные мысли |
||||
|
|||||
GodCries |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 19.3.2003 Репутация: нет Всего: нет |
спасибо
Это сообщение отредактировал(а) GodCries - 19.3.2003, 02:44 |
|||
|
||||
GodCries |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 19.3.2003 Репутация: нет Всего: нет |
Fox...
твоя подсказка: if ($b == "изменить") { $news = ereg_replace("\r\n","<br>",$news); $file=file("news.dat"); $editfile = fopen ("news.dat","w"); fputs($editfile,"$date:$news\n"); for($i=0; $i< sizeof($file); $i++) { fputs($editfile,$file[$i]); } fclose($editfile); } делает следующее: строка 1 строка 2 строка 3 изменяю строка 3 на строка 33 получаеться: строка 33 строка 1 строка 2 строка 3 он как бы добавляет Это сообщение отредактировал(а) GodCries - 19.3.2003, 03:03 |
|||
|
||||
Foxx |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 178 Регистрация: 19.3.2003 Где: Новосибирск Репутация: нет Всего: нет |
ГЫ.... я иногда забываю ![]() Ну да. только лучше не \n, а \r\n - как в *них системах. |
|||
|
||||
Foxx |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 178 Регистрация: 19.3.2003 Где: Новосибирск Репутация: нет Всего: нет |
Я это и делал. Чтобы изменить строчку нужно знать ее номер - передавая например через скрытое поле. Что-то типа того: if ($b == "изменить") { $news = ereg_replace("\r\n","<br>",$news); $file=file("news.dat"); $editfile = fopen ("news.dat","w"); for($i=0; $i< sizeof($file); $i++) { if($i!=$number) { fputs($editfile,$file[$i]); } if($i==$number) { fputs($editfile,"$date:$news\n"); } } fclose($editfile); } $number - это номер перезаписываемой строки. По крайней мере я у себя сделал так. ![]() Это сообщение отредактировал(а) Foxx - 19.3.2003, 13:17 |
|||
|
||||
IZ@TOP |
|
|||
![]() Панда-бир! ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 4795 Регистрация: 3.2.2003 Где: Бамбуковый лес Репутация: 44 Всего: 73 |
Это у меня тож гдето в книжке есть ... ![]() -------------------- Один из розовых плюшевых-всадников апокалипсиса... очень злой... Семь кругов ада для новых элементов языка Мои разрозненные мысли |
|||
|
||||
Foxx |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 178 Регистрация: 19.3.2003 Где: Новосибирск Репутация: нет Всего: нет |
А я не знаю есть или нет. У меня инет на работе а книжка дома. Так что пишу по памяти и по поиску, по форумам..... что задерживается в голове то и выводиться ![]() А код то работает? Его я со своей гостевухи снял, так что проблем не должно быть. |
|||
|
||||
IZ@TOP |
|
||||
![]() Панда-бир! ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 4795 Регистрация: 3.2.2003 Где: Бамбуковый лес Репутация: 44 Всего: 73 |
Думаю что работает (я не проверял, кстати я это давно тож для гуесты хотел использовать)
У меня кстати тоже книжка дома а в нет я на работе вылазю ... так что я не мухлюю и в книги не заглядываю (иначеб меня на работе начальство с потрохами сожрало !)!!! -------------------- Один из розовых плюшевых-всадников апокалипсиса... очень злой... Семь кругов ада для новых элементов языка Мои разрозненные мысли |
||||
|
|||||
Foxx |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 178 Регистрация: 19.3.2003 Где: Новосибирск Репутация: нет Всего: нет |
пользуйся, мне не жалко
![]() у меня с работой полегче, халявный инет и уйма времени.... токо желания иногда не хватает ![]() |
|||
|
||||
IZ@TOP |
|
|||
![]() Панда-бир! ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 4795 Регистрация: 3.2.2003 Где: Бамбуковый лес Репутация: 44 Всего: 73 |
Везет ... а у меня идей пруд пруди а времени тока по выходным и вечером после работы, и то, в выходные куданить друзья утаскивают а вечером хочется ото всего отдохнуть ... -------------------- Один из розовых плюшевых-всадников апокалипсиса... очень злой... Семь кругов ада для новых элементов языка Мои разрозненные мысли |
|||
|
||||
Foxx |
|
||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 178 Регистрация: 19.3.2003 Где: Новосибирск Репутация: нет Всего: нет |
Поделишься? МОжет я даже чем-т осмогу помочь ? ![]()
у меня выходные пропадают ![]() |
||||
|
|||||
arial |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 772 Регистрация: 11.3.2003 Где: Архангельская обл . Репутация: 6 Всего: 7 |
Во-первых (Если файл читается в массив):
Записываем новости в конец файла, читаем файл в массив, а затем (перед отображением) массив переворачиваем задом на перед (array_reverse(array)). Получается, что было последним - станет первым. Или в цикле делать так: for($i=count($array); $i>=0; $i--) { echo $array[$i]; } Во-вторых (если require(news.txt);): Для записи новости в верх файла: Читаем файл в переменную $старость. Записываем в начало этого файла новость: $editfile = fopen ("news.txt","w"); fputs($editfile,"$новость\n"); fclose($editfile); А уже после этого дописываем в конец файла старые новости (старости): $editfile = fopen ("news.txt","r"); fputs($editfile,"$старость"); fclose($editfile); Но, со вторым способом была у меня проблема: Старости считались в переменную, файл открыт для записи в начало, но новость еще не записалась, произошел какой-то сбой и у меня остался пустой файл... Так что после этого я использую только первый способ. ![]() -------------------- Есть люди, в которых живет Бог. Есть люди, в которых живет дьявол. А есть люди, в которых живут только глисты. (Ф. Раневская) |
|||
|
||||
arial |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 772 Регистрация: 11.3.2003 Где: Архангельская обл . Репутация: 6 Всего: 7 |
Извините, там не "r" а "a" надо писать. Заклинило... ![]() -------------------- Есть люди, в которых живет Бог. Есть люди, в которых живет дьявол. А есть люди, в которых живут только глисты. (Ф. Раневская) |
|||
|
||||
![]() ![]() ![]() |
Правила форума "PHP" | |
|
Новичкам:
Важно:
Внимание:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | PHP: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |