Удаление строки из файла

Mozart

Новичок
Удаление строки из файла

Вот какой вопрос!
у меня в гостевой рядом с каждой ссылкой выводится ссылка на удаление с номером етой строки в базе...
вида index.php?del=$K(номер строки)

А удаление произвожу так:
$line="$k"; # строка, которую нужно удалить(она передается в сылке)

$file=file("my_file.txt");
$open=fopen("my_file.txt","w");

for($i=0;$i<count($file);$i++)
{
if(($i+1)!=$line){fwrite($open,$file[$i]);}
}

fclose($open);

почему при нажатии на любую ссылку удалить удаляется последняя строка в файле?
 

Фанат

oncle terrible
Команда форума
никаких циклов здесь не нужно вообще.
для удаления элемента массива служит команда unset
а записывать файл обратно надо целиком, а не по кусочку,
собрав массив в строку функцией implode.


А почему удаляется не то, что надо, у меня даже сил нет говорить. Жуткая невнимательность.
Смотри что передаешь.
 

Mozart

Новичок
Допустим я ничего не пойму...
Передаю номер строки которую нужно удалить...
будь так любезен объсни как правильно сделать..
 

Фанат

oncle terrible
Команда форума
$file=file("my_file.txt");
unset($file[$del]);
$open=fopen("my_file.txt","w");
fwrite($open,implode("",$file);
fclose($open);
 

Mozart

Новичок
ща проверим!Спасиб!
И что-то у вас форум глючит - я две одинаковые темы не создавал....
 

Mozart

Новичок
Вообщем скрипт все равно удаляет строки в произвольном порядке....может где-то еще ошибка код у меня такой...
<?
$base="base.dat";
$file=file($base);
$count=count($file);
for ($i = 0; $i < $count; $i++)
{

$msg = explode("::",$file[$i]);
?>
<center> <table>
<tr><font color=red><? echo "$msg[0]"; ?></font></tr>
<tr><center><? echo "$msg[1]"; ?></tr>
<tr><center><? echo "$msg[2]"; ?></tr>
<tr><a href="admin.php?del=<?echo "$i";?>">удалить</a></tr>
</table>
<?
}
$file=file($base);
unset($file[$del]);
$open=fopen($base,"w");
fwrite($open,implode("",$file));
fclose($open);
?>
 

Mozart

Новичок
в чем?Ну разъясни мне - а я на строку выше в своем рейтинге поднимусь:):):)
Где я космачу?
 

Фанат

oncle terrible
Команда форума
как твой скрипт определяет, когда надо что-то удалять из файла, а когда - нет? Телепатически?
 

Mozart

Новичок
по идее когда на ссылку нажимаешь передается переменная
$del - которая обозначает какую строку надо удалить ...ну ето я так думаю - скорее всего неправильно....
Подскажи как правильно...чтоб я на всю жизнь запомнил:)
 

Фанат

oncle terrible
Команда форума
ну ты писал скрипт.
сюда его написал.
и даже никакой идеи в голове не зародилось - а правильно ли?!
 

lucas

Guest
Mozart

Я сегодня добрый -- каникулы начались. ;) ;)
Лови готовый код.

PHP:
$file_name = "1.dat" ;

$lines = file($file_name) ;

if (isSet($_GET["line"]) == true && isSet($lines[(integer) $_GET["line"]]) == true)
{	unset($lines[(integer) $_GET["line"]]) ;
	$file = fopen($file_name,"a+") ;
	flock($file,LOCK_EX) ;
	ftruncate($file,0) ;
	fwrite($file,implode("",$lines)) ;
	flock($file,LOCK_UN) ;
	fclose($file) ;
	header("Location: index.php") ;
}

$count = sizeof($lines) ; for ($a = 0 ; $a < $count ; ++$a)
{	echo "<p><a href='index.php?line=" . $a . "'>" . $lines[$a] . "</a></p>" ;
}
 

lucas

Guest
Теперь ты видишь, как определять, что требуется удалить строку из файла?
 

Фанат

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

lucas

Guest
Фанат

Потому что я не уточнил, что копировать этот код нужно в index.php? Или я еще чего-то недопонимаю?
 

Фанат

oncle terrible
Команда форума
па ты посмотри внимательно на его самый первый код.
какую переменную он в скрипт передает, и к какой после этого обращается.
Зря, зря ты переменную $line назвал :)
 

pauk

Новичок
Автор оригинала: Фанат
большие в меня закрадываются сомнения, что этот код у него не будет работать.
Или будет работать не так.
Первую строку удалить захочет, а удалиться вторая:)
 
Сверху