Редактирование файла

shaelf

Guest
Редактирование файла

Есть скрипт который выводит файл что-то типа этого
PHP:
<?
$f=file("data.dat");
if($i=0:$i<count($f);$i++)
{ 
    list($img,$opis,$cena)=explode("||",$f[$i]);
    echo $img"<br>";
    echo $opis"<br>";
    echo $cena"<br>";
}
?>
Вот он выводит список, который мне надо редактировать и удалять из него строки.
Я знаю, вопрос тупой и он не раз уже обсуждался на форуме, но я мало чего понял, если не сложно, то помогите.
 

Фанат

oncle terrible
Команда форума
shaelf
твоя задача состоит из нескольких.
1. вывести содержимое файла для редактирования.
2. передать отредактированные данные скрипту
3. записать отредактированные данные в файл.

с каким конкретно пунктом у тебя проблема?
если со всеми - начнем по порядку
 

Фанат

oncle terrible
Команда форума
окей.
для начала нам надо вывести запись для редактирования.
редактировать будем по одной.
для этого в скрипт вывода файла, который у тебя уже есть, добавим еще одну строчку - ссылку на файл edit.php которому передадим номер строки.
сделаешь?
 

shaelf

Guest
Немного подправил:)
PHP:
<?
$f=file("data.dat");
for($i=0;$i<count($f);$i++)
{
       list($img,$opis,$cena)=explode("||","$f[$i]");
echo "<form action=\"red.php\">";
echo "<input type=text name=img value=".$img.">";
echo "<input type=text name=opis value=".$opis.">";
echo "<input type=text name=cena value=".$cena.">";
echo "<input type=submit name=submit><hr>";
}
?>
Так? Или нет? Ещё раз сорри за тупость:(.

-~{}~ 20.07.04 15:11:

сорри вместо echo "<form action=\"red.php\">"; читать
echo "<form action=\"edit.php\ method=post">";
 

Фанат

oncle terrible
Команда форума
нет, так делать не надо.
много форма на страницу очень утомляет браузер и пользователя.
я просил тебя сделать ССЫЛКУ.
ты знаешь, что такое гиперссылка? Тег a href
вот НИЧЕГО НЕ МЕНЯЯ просто ДОБАВЬ к своему ПЕРВОМУ скрипту выврод еще одной строчки - ссылки на edit.php с параметром stroka, равным номеру выводимой из файла строки.
 

shaelf

Guest
PHP:
<? 
$f=file("data.dat"); 
if($i=0:$i<count($f);$i++) 
{ 
    list($img,$opis,$cena)=explode("||",$f[$i]); 
    echo $img"<br>"; 
    echo $opis"<br>"; 
    echo $cena"<br>";
    echo "<a href=\"edit.php?stroka=$i\">Редактировать</a>"; 
} 
?>
Так или туплю?

-~{}~ 20.07.04 16:05:

Sorry
PHP:
echo "<a href=\"edit.php?stroka=".$i.">Редактировать</a>"
 

Фанат

oncle terrible
Команда форума
замечательно.
теперь в файле edit.php получаем номер строки
$i=$_GET['stroka'];
получаем твою строку из массива $f c индексом $i
и заполняем такую форму, как ты писал выше.
только не забудь закрыть тег form и сделать значениям htmlspecialchars
 

shaelf

Guest
<?
$i=$_GET['stroka'];
$f=file("data.dat");
for($i=0;$i<count($f);$i++)
{
list($img,$opis,$cena)=explode("||","$f[$i]");
echo "<form action=\"red.php\">";
echo "<input type=text name=img value=".$img.">";
echo "<input type=text name=opis value=".$opis.">";
echo "<input type=text name=cena value=".$cena.">";
echo "<input type=submit name=submit><hr>";
echo "</form>";
}
?>
Где то так?
ЗЫ. Только не знаю, надо ли "htmlspecialchars" или нет, это админская.
 

Фанат

oncle terrible
Команда форума
shaelf
мы редактируем ОДНУ запись.
зачем мы выбирали конкретную строку, если опять выводим ВСЕ?
тебе не нужен цикл.
тебе нужно вывести одну запись.

htmlspecialchars при ВЫВОДЕ ЗНАЧЕНИЯ ФОРМЫ надо делать ВСЕГДА. админ это делает или господь бог.

-~{}~ 20.07.04 16:54:

ты это... вообще запускаешь то, что пишешь?
а никакие мысли в голову при этом не приходят?
 

zahhar

двинутый новичок
shaelf
Рекомендую воспользоваться рекомендацией, которая написана рядом с формой ответа и заключать php-код в теги [ PHP ]php код[ /PHP ]

Фанат
Как ни печально, но большинство приходят на форум за готовым рецептом, рабочим отлаженным кодом или детальным алгоритмом. Очень тяжело научить кого-то чему-то step-by-step.
 

shaelf

Guest
Не, мне не надо готовых решений, я даже очень благодарен что со мной возяться, а в тег просто забыл, если посмотреть на верх, то можно это понять. Я новичок и не могу сразу всё ловить. Теперь, прежде чем написать я пытаюсь его отладить чтоб он работал!
 

Mozart

Новичок
Первый файл у меня такой...
<?

$base="base.dat";
$file = file($base);
for ($i = 0; $i <count($file); $i++)
{
$msg = explode("::",$file[$i]);


echo" <form action=edit.php method=\"post\" name=\"mozart\">
<textarea name=name >$msg[0]</textarea><br>
<textarea name=msg >$msg[1]</textarea><br>
<input type = submit name = submit value = &#209;&#238;&#245;&#240;&#224;&#237;&#232;&#242;&#252;!>
<input type = hidden name = line value = $i>
</form>";
}
?>

А второй я сделал так...
<?
$base="base.dat";
$file = file($base);


if(isset($submit))
{
$fp=fopen($base,"w");
for ($i = 0; $i <count($file); $i++)
{
if ($i!=$line)
{
fputs($fp,$file[$i]);
}
else
{
$string = "$name::$msg";
fputs($fp,$string);

}
}
fclose($fp);
}
?>

Укажите мне на ошибки....
Кстати статья про дебаг - оч полезная :)
 

shaelf

Guest
<?
$i=$_POST['line'];
$base="data.dat";
$file = file($base);
if(isset($submit))
{
$fp=fopen($base,"w");
if ($i!=$line)
{
fputs($fp,$file[$i]);
}
else
{
$string = "$name||$msg";
fputs($fp,$string);
}
fclose($fp);
}
?>
а это вторая:)!!!!!

-~{}~ 20.07.04 21:15:

Пасиб, народ, респект!!!!

-~{}~ 20.07.04 21:19:

впринц я во всё втыкал, только про hiden мало знал, т.к. в голом HTML он не нужен:). РНР начал изучать не давно. Меня мучал вопрос только, как мне указать на ту строчку которую я хочу редактировать:).
 

shaelf

Guest
Автор оригинала: Фанат
shaelf
говорили тебе - не слушай ламеров.
он неправильно делает.
Но, в отличие от тебя, не пришел на форум спросить.
Вот этим и отлчиается ламер от чайника - уровень знаний у них одинаковый, но ламер на 100% уверен, что он делает правильно.

при редактировании файла, его надо стирать и перезаписывать ЦЕЛИКОМ
Я конечно попробую другие методы, но в чём разница?
Просто то, что я вывел(с вашей помощью) это работает
и почему нельзя перезаписовать только одну строчку?
ЗЫ я хочу учиться делать сам, а не пользоваться готовым!!!
 

Фанат

oncle terrible
Команда форума
нельзя потому, что в файле нет никаких строчек.
если ты хочешь иметь произвольный доступ к каждой отдельной строке файла, то тебе нужна база данных - именно для этого она и придумана.
А файл - это монолит, и нету в нем никаких строчек. на строчки ты делишь уже сам, после того, как прочиталй файл.
просто виртуально разделяешь файл на части, используя, как разделитель символ перевода строки.

Я, кстати, неправильно понял этот код.
он тоже перезаписывает весь файл.
в принципе, правильно, но очень длинно и неудобно.

тебе всего-то надо присвоить нужному элементу массива $file нужное значение, затем собрать весь массив в строку с помощью implode и эту одну строку записать в файл
 

shaelf

Guest
Я всё понял, поробую родить как всё закончу, просто сайт надо сделать, а у меня с файломи проблема:(. Теперь потею над закачкой и выводом картинки. Надеюсь сделать сам:).

-~{}~ 22.07.04 09:00:

2Фанат А можно продолжить дальше?
Я хочу научиться делать правильно. Дык моё домашнее задание:)
<?
$i=$_GET['stroka'];
$f=file("data.dat");
list($img,$opis,$cena)=explode("||","$f[$i]");
echo "<form action=\"red.php\">";
echo "<input type=text name=img value=".$img.">";
echo "<input type=text name=opis value=".$opis.">";
echo "<input type=text name=cena value=".$cena.">";
echo "<input type=submit name=submit><hr>";
echo "</form>";
?>
 

Фанат

oncle terrible
Команда форума
А чему учиться-то?
Статья про закачку есть в разделе "статьи".
про форму я тебе уже два раза сказал, как выводить.
читай третий - http://phpfaq.ru/slashes , в самом низу.
 
Сверху