Изменение записи по ID-номеру в определенной строке.

Yuriy_S

-=PHP-Club=-
Изменение записи по ID-номеру в определенной строке.

У меня есть следующее:
PHP:
<?
$file="news.txt";
$data=file($file);
for($i=0;$i<=count($data);$i++){ 
list($id,$name,$eml,$text,$rep)=explode("|",$data[$i]); 
$p_id = 1;
if($p_id==$id){ 
echo"<form action='test.php' method='post'><input type='text' name='name1' value='$name'><input type='submit' value='edit'>$eml $text $rep</form>";
print $name;
}
}
?>
Строка, состоящая из id-номера, и прочей инфы.
Как мне сделать, что бы при изменении в форме выведенной записи с файла, она как бы записывалась и мемнялась в файле? То есть редактирование, проще сказать.
Напишите плиз, я что то совсем не понимаю...:(((
 

Demiurg

Guest
1. в файле test.php точно так же читаешь файл
2. потом заменяешь нужный элемент в массиве
3. записываешь обратно в файл.
 

Yuriy_S

-=PHP-Club=-
А можно поподробнее, как его заменить и записатьт обратно в файл, именно тот элемент и в ту строку ?
 

Demiurg

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

Yuriy_S

-=PHP-Club=-
хм... а долго он пеереписывается?
И вопрос ещё такой, например знаменитая гостевая книга, Manlix - тоже весь файл переписывает?
ТОгда опишите пожалуйсто поподробнее весь этот процесс перезаписи файла. Напишите плиз пример.



p.s - как сделаю гостевую нормально все, то приглашу посмотреть :))
 

Demiurg

Guest
>хм... а долго он пеереписывается?
да, для этого и придумали базы данных
>И вопрос ещё такой, например знаменитая гостевая книга, Manlix - тоже весь файл переписывает?
никогда не видел такой, да и других тоже :) но может она все сообщения по разным файлам хранит?
>ТОгда опишите пожалуйсто поподробнее весь этот процесс перезаписи файла. Напишите плиз пример.
PHP:
$arr = file('myfile.txt');
$arr[5] = "newline\n";
$f=fopen('myfile.txt' , 'w);
fwrite($f, implode('',$arr));
fclose($f);
 

ForJest

- свежая кровь
Yury S
Берешь и изобретаешь dbf заново.
Выделяешь для каждой записи данных фиксированный кусок места.
с помощью fseek находишь нужную запись и перезаписываешь её.
Для удаления будешь использовать специальный флаг в записи - запись помечена как удаленная...
В общем берешь и ищешь готовую либу которая работает с DBF и не паришь себе мозги.
 

Yuriy_S

-=PHP-Club=-
Demiurg!
PHP:
$arr = file('myfile.txt'); 
$arr[5] = "newline\n"; 
$f=fopen('myfile.txt' , 'w); 
fwrite($f, implode('',$arr)); 
fclose($f);
что такое newline?
У меня же формы, и есть вот что $name|$email|$messg|\n -это и есть тоже самое что и newline? то есть только подставить?
 

Yuriy_S

-=PHP-Club=-
а послледнее ,это как бы мой ответ, ставиться в дргуом скрипте, ну как бы тут необязательно переменнею писать, можно просто | и все :)
Кстати!!! А будет перезаписываться весь файл? или тоолько редактированная мной форма? а все остальное удаляться?
 

Yuriy_S

-=PHP-Club=-
Demiurg!
PHP:
$arr = file('myfile.txt');  
$arr[5] = "newline\n";  
$f=fopen('myfile.txt' , 'w); 
fwrite($f, implode('',$arr)); 
fclose($f);
Он работает и перезаписывает только ты форму, в которой я редактирую, а осстальные все удаляет!!
А как сделать то, что бы я редактировал одну запись к примеру и все остальные, которые выводятся у меня в форме так же перезаписывались вместе с редактируемой ?
 

Demiurg

Guest
То есть остается только одна запись ?
Покажи код, только не весь а то, что относится к делу.
 

Yuriy_S

-=PHP-Club=-
PHP:
<?
INCLUDE("conf.inc.php");
print $style;
print "<title>$title</title>";
print $ip;
$file="news.txt";
$data=file($file);
for($i=0;$i<=count($data);$i++){ 
list($id,$name_r,$email_r,$messg_r,$remess_r)=explode("|", $data[$i]);
echo"<body topmargin=0 leftmargin=0>.......//дальше тут идут формы с выведенными сообщениями.";
//после форм :
fclose($data);
$messg=eregi_replace("\n","<br>",$messg);
$preid=count(file($filename));
$newid=$preid + 1;
$arr = file('news.txt'); 
$arr[i] = "$newid|$name|$email|$messg|$remess\n"; 
$f=fopen('news.txt', 'w'); 
if ($name != "") :
fwrite($f, implode('',$arr)); 
fclose($f);
endif;
if ($ok == true){
}
}
?>
Вот так.
 

Yuriy_S

-=PHP-Club=-
ммм, тут я с ошибочкой напписал : $arr //$i или число, но тоже не пашет, только одно собщ. записывает.

= "$newid|$name|$email|$messg|$remess\n";
 

breake

Guest
Чего-то я не пойму, что такое: в одном случае используется переменная $file, в другом $filename ($preid=count(file($filename)). Наверное, все-таки используйте везде переменную $file :)
Да, и зачем у Вас код, предложенный Demiurg'om запихан в в цикл for?
 

Yuriy_S

-=PHP-Club=-
так вы не спрашивайте меня :))) Вы гворите чтоо сделать что бы оно работало то все! :) Пожалуйсто.
 

Yuriy_S

-=PHP-Club=-
блин, ну я же чайник, я Sql не наю, так знаком немного, но! :(
Лучше помогите мне, и я сделаю свою гостевую, а потом уже буду изучать БД!
 

breake

Guest
И, вообще, Вы уверены, что Вы делаете правильную проверку:
if ($name!="")? Исходя из Вашего первого сообщения, с формы Вашему скрипту никакая переменная $name не передается (там у Вас стоит $name1).
 
Сверху