|
|
|
| Возникла небольшая проблема. Есть файл (navigation_one.txt), где выкладываются название раздела и ссылки, разделённые знаком "|". Например: ГЛАВНАЯ|index.php|DOWNLOAD|download.php|Статьи|statie.php
Стал писать админ панель, что бы вводился раздел (то есть, тот же самый раздел "ГЛАВНАЯ") и после этого из файла удалялся и название раздела и ссылка на него. Всё отлично, если только ссылка не стоит последней в ряду, тогда ссылка не удаляется.
Вот этот скрипт:
[code]
$msg=""; // сообщение
$error=false; // проверяем на ошибки
$file_nav="../navigation_one.txt"; // файл
$file_fopen_nav=fopen($file_nav,"r"); // читаем его
$buff=fread($file_fopen_nav,1000); // заносим в переменную
$exp_nav=explode("|",$buff); // затем в массив
$count_nav=count($exp_nav); // определяем кол-во элементов
for ($i=0;$i<$count_nav;$i++) { // делаем, пока все не перечислим
if ($exp_nav[$i]==$name) { // если раздел и введённая информация совпадает то:
$s++; // прибавляем к счётчику 1
$i1=$i; // заносим первый элемент в переменную $i1
$i2=$i1+1; // заносим следующий элемент в переменную $i1
}
$i++; // перепрыгиваем через один, так как потом идёт ссылка
}
if ($s>0) { // проверяем кол-во совпадений
$msg="Раздел удачно удалён!";
$error=false; // устанавливаем, что ошибок нет
} else {
$msg="Данного раздела не существует!";
$error=true; // устанавливаем, что есть ошибки
}
if (!$error) { // если нет ошибок
$razdel_str=$exp_nav[$i1]."|"; // заносим раздел в переменную
// если вторая переменная $i2 равна кол-ву элементов то значит она последная
// соответственно тогда не надо вписывать в переменную знак "|"
if ($i2==$count_nav) {
$url_str=$exp_nav[$i2];
} else {
$url_str=$exp_nav[$i2]."|";
}
// заменяем
$buff=str_replace($razdel_str,"",$buff);
$buff=str_replace($url_str,"",$buff);
// записываем
$file_new=fopen($file_nav,"w");
fputs($file_new,$buff);
fclose($file_new);
[code]
Ну вот вроде и нужная часть кода. Писал комментарии, что бы было лучше ясно, что делаю. Переменная $name передаётся из формы.
Как я уже сказал, вся проблема в том, что если я удаляю последний раздел, то удаляется только название раздела, а ссылка остаётся.
Уже много чего перепробовал, результат ноль. Помогите плиз. | |
|
|
|
|
|
|
|
для: Football
(07.09.2005 в 14:47)
| | Никто не против если я продублирую? а то не читаемо...
<?
$msg=""; // сообщение
$error=false; // проверяем на ошибки
$file_nav="../navigation_one.txt"; // файл
$file_fopen_nav=fopen($file_nav,"r"); // читаем его
$buff=fread($file_fopen_nav,1000); // заносим в переменную
$exp_nav=explode("|",$buff); // затем в массив
$count_nav=count($exp_nav); // определяем кол-во элементов
for ($i=0;$i<$count_nav;$i++) { // делаем, пока все не перечислим
if ($exp_nav[$i]==$name) { // если раздел и введённая информация совпадает то:
$s++; // прибавляем к счётчику 1
$i1=$i; // заносим первый элемент в переменную $i1
$i2=$i1+1; // заносим следующий элемент в переменную $i1
}
$i++; // перепрыгиваем через один, так как потом идёт ссылка
}
if ($s>0) { // проверяем кол-во совпадений
$msg="Раздел удачно удалён!";
$error=false; // устанавливаем, что ошибок нет
} else {
$msg="Данного раздела не существует!";
$error=true; // устанавливаем, что есть ошибки
}
if (!$error) { // если нет ошибок
$razdel_str=$exp_nav[$i1]."|"; // заносим раздел в переменную
// если вторая переменная $i2 равна кол-ву элементов то значит она последная
// соответственно тогда не надо вписывать в переменную знак "|"
if ($i2==$count_nav) {
$url_str=$exp_nav[$i2];
} else {
$url_str=$exp_nav[$i2]."|";
}
// заменяем
$buff=str_replace($razdel_str,"",$buff);
$buff=str_replace($url_str,"",$buff);
// записываем
$file_new=fopen($file_nav,"w");
fputs($file_new,$buff);
fclose($file_new);
?>
|
| |
|
|
|
|
|
|
|
для: Гость
(07.09.2005 в 15:00)
| | А не могли бы вы выложить также и реальный файл navigation_one.txt, чтобы можно было воспроизвести ситуацию? | |
|
|
|
|
|
|
|
для: cheops
(08.09.2005 в 02:05)
| | Вот он | |
|
|
|
|
|
|
|
для: Гость
(07.09.2005 в 15:00)
| | Хм... а скрипт выдаёт ошибку
Parse error: syntax error, unexpected $end in d:\main\get2.php on line 47
|
| |
|
|
|
|
|
|
|
для: cheops
(08.09.2005 в 17:23)
| | Там скобочка была не закрыта.
А поправленный программный текст:
<?php
$file_nav = "../navigation_one.txt"; // файл
$file_fopen_nav = fopen ($file_nav, "r+"); // читаем его
$buff = fread ($file_fopen_nav, 1000); // заносим в переменную
$exp_nav = explode ("|", $buff); // затем в массив
fclose ($file_fopen_nav);
$count_nav = count($exp_nav) - 1; // определяем кол-во элементов
for ($i = 0; $i < $count_nav; $i++)
{
// делаем, пока все не перечислим
if ($exp_nav[$i] == $name)
{
// если раздел и введённая информация совпадает то:
$i1 = $i; // заносим первый элемент в переменную $i1
$i2 = $i1 + 1; // заносим следующий элемент в переменную $i2
}
$i++; // перепрыгиваем через один, так как потом идёт ссылка
}
if ($i1 or $i2) // проверяем кол-во совпадений
{
$msg = "Раздел удачно удалён!";
// заносим раздел в переменную
// если вторая переменная $i2 равна кол-ву элементов то значит она последная
// соответственно тогда не надо вписывать в переменную знак "|"
if ($i1 == $count_nav)
{
$razdel_str = $exp_nav[$i1];
}
else
{
$razdel_str = $exp_nav[$i1]."|";
}
if ($i2 == $count_nav)
{
$url_str = $exp_nav[$i2];
}
else
{
$url_str = $exp_nav[$i2]."|";
}
echo "$razdel_str - $i1 and $url_str - $i2";
// заменяем
$buff = str_replace($razdel_str, "", $buff);
$buff = str_replace($url_str, "", $buff);
// записываем
$file_new = fopen($file_nav, "w+");
fputs ($file_new, $buff);
fclose ($file_new);
}
else
{
$msg = "Данного раздела не существует!";
}
echo "$msg";
?>
|
| |
|
|
|
|
|
|
|
для: Seo
(08.09.2005 в 17:50)
| | Так а переменная $name откуда берётся и какое значение имеет? Без неё скрипт сообщает, что раздел не существует. | |
|
|
|
|
|
|
|
для: cheops
(08.09.2005 в 18:10)
| | Переменная берёться из предыдущий страницы, там форма. Переменная передаётся! Проблема только при удалении ссылки, которая является последней. С остальными всё нормально | |
|
|
|