Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Ошибка замены текста
 
 автор: Football   (07.09.2005 в 14:47)   письмо автору
 
 

Возникла небольшая проблема. Есть файл (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 передаётся из формы.
Как я уже сказал, вся проблема в том, что если я удаляю последний раздел, то удаляется только название раздела, а ссылка остаётся.
Уже много чего перепробовал, результат ноль. Помогите плиз.

   
 
 автор: Гость   (07.09.2005 в 15:00)   письмо автору
 
   для: 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);
?>

   
 
 автор: cheops   (08.09.2005 в 02:05)   письмо автору
 
   для: Гость   (07.09.2005 в 15:00)
 

А не могли бы вы выложить также и реальный файл navigation_one.txt, чтобы можно было воспроизвести ситуацию?

   
 
 автор: Football   (08.09.2005 в 13:40)   письмо автору
 
   для: cheops   (08.09.2005 в 02:05)
 

Вот он

   
 
 автор: cheops   (08.09.2005 в 17:23)   письмо автору
 
   для: Гость   (07.09.2005 в 15:00)
 

Хм... а скрипт выдаёт ошибку
Parse error: syntax error, unexpected $end in d:\main\get2.php on line 47

   
 
 автор: Seo   (08.09.2005 в 17:50)   письмо автору
 
   для: cheops   (08.09.2005 в 17:23)
 

Там скобочка была не закрыта.
А поправленный программный текст:

<?php

$file_nav 
"../navigation_one.txt"// файл
$file_fopen_nav fopen ($file_nav"r+"); // читаем его
$buff fread ($file_fopen_nav1000); // заносим в переменную
$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";

?>

   
 
 автор: cheops   (08.09.2005 в 18:10)   письмо автору
 
   для: Seo   (08.09.2005 в 17:50)
 

Так а переменная $name откуда берётся и какое значение имеет? Без неё скрипт сообщает, что раздел не существует.

   
 
 автор: Football   (08.09.2005 в 18:26)   письмо автору
 
   для: cheops   (08.09.2005 в 18:10)
 

Переменная берёться из предыдущий страницы, там форма. Переменная передаётся! Проблема только при удалении ссылки, которая является последней. С остальными всё нормально

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования