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

  • Автор темы Автор темы shaelf
  • Дата начала Дата начала

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>";
}
?>
Вот он выводит список, который мне надо редактировать и удалять из него строки.
Я знаю, вопрос тупой и он не раз уже обсуждался на форуме, но я мало чего понял, если не сложно, то помогите.
 
shaelf
твоя задача состоит из нескольких.
1. вывести содержимое файла для редактирования.
2. передать отредактированные данные скрипту
3. записать отредактированные данные в файл.

с каким конкретно пунктом у тебя проблема?
если со всеми - начнем по порядку
 
окей.
для начала нам надо вывести запись для редактирования.
редактировать будем по одной.
для этого в скрипт вывода файла, который у тебя уже есть, добавим еще одну строчку - ссылку на файл edit.php которому передадим номер строки.
сделаешь?
 
Немного подправил:)
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">";
 
нет, так делать не надо.
много форма на страницу очень утомляет браузер и пользователя.
я просил тебя сделать ССЫЛКУ.
ты знаешь, что такое гиперссылка? Тег a href
вот НИЧЕГО НЕ МЕНЯЯ просто ДОБАВЬ к своему ПЕРВОМУ скрипту выврод еще одной строчки - ссылки на edit.php с параметром stroka, равным номеру выводимой из файла строки.
 
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>"
 
замечательно.
теперь в файле edit.php получаем номер строки
$i=$_GET['stroka'];
получаем твою строку из массива $f c индексом $i
и заполняем такую форму, как ты писал выше.
только не забудь закрыть тег form и сделать значениям htmlspecialchars
 
<?
$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" или нет, это админская.
 
shaelf
мы редактируем ОДНУ запись.
зачем мы выбирали конкретную строку, если опять выводим ВСЕ?
тебе не нужен цикл.
тебе нужно вывести одну запись.

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

-~{}~ 20.07.04 16:54:

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

Фанат
Как ни печально, но большинство приходят на форум за готовым рецептом, рабочим отлаженным кодом или детальным алгоритмом. Очень тяжело научить кого-то чему-то step-by-step.
 
Не, мне не надо готовых решений, я даже очень благодарен что со мной возяться, а в тег просто забыл, если посмотреть на верх, то можно это понять. Я новичок и не могу сразу всё ловить. Теперь, прежде чем написать я пытаюсь его отладить чтоб он работал!
 
Первый файл у меня такой...
<?

$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);
}
?>

Укажите мне на ошибки....
Кстати статья про дебаг - оч полезная :-)
 
<?
$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
говорили тебе - не слушай ламеров.
он неправильно делает.
Но, в отличие от тебя, не пришел на форум спросить.
Вот этим и отлчиается ламер от чайника - уровень знаний у них одинаковый, но ламер на 100% уверен, что он делает правильно.

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

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

тебе всего-то надо присвоить нужному элементу массива $file нужное значение, затем собрать весь массив в строку с помощью implode и эту одну строку записать в файл
 
Я всё понял, поробую родить как всё закончу, просто сайт надо сделать, а у меня с файломи проблема:(. Теперь потею над закачкой и выводом картинки. Надеюсь сделать сам:).

-~{}~ 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>";
?>
 
А чему учиться-то?
Статья про закачку есть в разделе "статьи".
про форму я тебе уже два раза сказал, как выводить.
читай третий - http://phpfaq.ru/slashes , в самом низу.
 
Сверху