удаление несколькрих строк из файла по переденным checkboxам

удаление несколькрих строк из файла по переданным checkboxам

Пытался реализовать данное своими силами, но не получилось....
вот лежит код чего я пытался http://www.fairlove.net/1.html
что то урла не пашет кидаю код сюда:
PHP:
--------------delete.php-------------
<?
//-----------------------------------------
echo "<form action=delete.php method=get>";
$file="1.txt";
$strok=file($file);
$all=count($strok);
for($i=0;$i<=$all;$i++)
{$stro=$i+1;
print "строка <b>$stro</b> <input type=checkbox name=st[$i] value=$i><br>";}
echo "<input type=submit name=submit value=delete></form>";
//-----------------------------------------

//-----------------------------------------
if ($submit=="delete"){

$txt = file_get_contents("1.txt");
$id = explode("\n", $txt);
for($y=0;$y<=20;$y++){
if ($st[$y] != "") {
unset ($id[$st[$y]]);
}}

$end = array_pop($id);
$tofile = implode("\n", $id);
//-----------------------------------------


//-----------------------------------------
$file="1.txt";
$open=fopen($file,"w+");
fwrite($open,"$tofile");
fclose($open);
//-----------------------------------------
}
?>
-------------------------------------------
--------1.txt-----------------------------
1
2
3
4
5
6
7
8
9
10
------------------------------------------

вообщем я пытался вбить в массив все строки потом нужные елементы массива убить и все что осталось в массиве записать в файл подскажите как это реализовать чтобы корректно работало
спасибо.
 
Последнее редактирование:

IntenT

SkyDiver
register_globals = off
http://www.php.net/register_globals

Потом читать как массивы через HTTP передавать.
 

Фанат

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

Фанат

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

Итак.

почему у тебя в первом фрагменте
массив получается $strok=file($file); , а количество эдементов в нем - $all=count($strok);
а во втором - массив это
$txt = file_get_contents("1.txt");
$id = explode("\n", $txt);
а количество строк - 20?

дальше.
обязательно выведи на экран свой масив st
возможно, это наведет тебя на размышления.

$end = array_pop($id); - это зачем?
$tofile = implode("\n", $id); \н - ЛИШНЕЕ.

и фак по регистер_глобалс - [f]globals[/f]
Надеюсь, у тебя достаточно пищи для размышлений.
если будут вопросы - задавай.
 
to Фанат.
Все что тут я написал сам.
ПХП изучаю месяц... до этого никакие языки прогрм-ия не изучал... все чем пользуюсь это help скачанный с php.net
Я хочу научиться ! и только...


почему у тебя в первом фрагменте
массив получается $strok=file($file); , а количество эдементов в нем - $all=count($strok);
а во втором - массив это
$txt = file_get_contents("1.txt");
$id = explode("\n", $txt);
а количество строк - 20?
первый фрагмен я взял из своего старого скрипта и просто забыл подровнять...
for($y=0;$y<=20;$y++){
вместо 20 правильнее было бы подставить наибольшее значение массива st...

значит насчет передаваемых данных.. за это не волнуйтесь данные передаются... я этот код пускаю через phpdebugger...
$end = array_pop($id); - это зачем?
у меня в массыв id постоянно последний елемент был пуст поэтому я его убрал в end из id
globalsами все нормально... в самой программе нелады...
пишет в конце файла пустую строку...

to IntenT
как передать массывы через http я знаю спасибо...
я много иного не знаю....
 
вот как я себе это представлял ... скажите где я ошибаюсь и что надо сделать не так и почему....
данному коду были переданныйе следущие данные
$st[0]=0;
$st[1]=1;
----------------------------------------------
// прочитали файл и занесли все строки в одну
$txt = file_get_contents("1.txt");
// занесли в массив id все строки разделители \n тоесь перевод но новую строку.
$id = explode("\n", $txt);

// дальше смотрим переданные переменные...
// вместо 20 нужно поставить наибольшее значение в массиве id.
for($y=0;$y<=20;$y++){

if ($st[$y] != "") {
unset ($id[$st[$y]]);
// тут удалили те елементы которые были переданы нам через st
}}

$end = array_pop($id);
// в массиве id последний елемент ничему не равен... переносим его в end

$tofile = implode("\n", $id);
// в tofile пишем все оставшиеся елементы массива разделитель перевод строки



$file="1.txt";
$open=fopen($file,"w+");
fwrite($open,"$tofile");
fclose($open);
// удаляем все содержимое файла и пишем в него tofile
// в нем пишет все что надо только добаляет лишнюю пустую строку....
 

Altex

Новичок
nofx
// прочитали файл и занесли все строки в одну
$txt = file_get_contents("1.txt");
// занесли в массив id все строки разделители \n тоесь перевод но новую строку.
$id = explode("\n", $txt);
Прикольно, я думал что можно обойтись строкой
PHP:
$id = file('1.txt');
 

Фанат

oncle terrible
Команда форума
первый фрагмент, на самом деле, более правильный.
тебе надо из файла массив получить?
ну так он это и делает.
сделай так же во втором.
вместо 20 правильнее было бы подставить наибольшее значение массива st...
нет.
АБСОЛЮТНО неправильно.
во-первых, почему ты уверен, что значения в жтом массиве различаются?
Лично у меня все значения одинаковые.

// в массиве id последний елемент ничему не равен... переносим его в end
у тебя плохо с ассоциативным мышлением.
если тебе надо удалить элемент массива, ты почему-то используешь сначала unset, а потом - аррай_поп.
Это непоследовательно.

К тому же, ничего удалять не надо.
Ели у тебя пустой элемент, то не господь бог его делает, а ты сам.
и проще тогда не заносить, чем заносить, а потом удалять.

Дальше.
Тебе надо освоить самое главное понятие програмирования - отладка.
Открою тебе очень важный секрнет.
Если бы люди писали программы так, как это делаешь ты - написать, запустить, ничего не вышло, сидим, думаем, почему - то мы бы до сих пор считали на счетах.

надо самому себе выводить ИНФОРМАЦИЮ что делает скрипт.
Зачем ты пишеншь в файл, сам не зная, что?

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

Altex

Новичок
nofx
// дальше смотрим переданные переменные...
// вместо 20 нужно поставить наибольшее значение в массиве id.
for($y=0;$y<=20;$y++){

if ($st[$y] != "") {
unset ($id[$st[$y]]);
// тут удалили те елементы которые были переданы нам через st
}}
Очень весело, я лично думал что проще сделать так, чем каждый раз вручную писать количество строк в 1.txt -
PHP:
for($y=0, $max_id = count($id);$y<$max_id;$y++){
if ($st[$y] != "") {
unset ($id[$st[$y]]);
}}
 

Фанат

oncle terrible
Команда форума
Altex, ничего веселого тут нет.
Весело - это когда ты или я глупости пишем.
Или если бы он это выдавал в виде совета.
А он учится.
И учится вполне нормально.
Думает, пробует.
 
у тебя плохо с ассоциативным мышлением.
если тебе надо удалить элемент массива, ты почему-то используешь сначала unset, а потом - аррай_поп.
да с мешлением проблеммы...
я удаляю элементы массива по ключу...
а ключ для удаления передает st[]
вот...
аррей_поп как я понял вытесняет только последний елемент массива... и толи в массив вбиваеться пустая строка толи еще чего... вообщем я таким образом убиваю именно последний елемент массива

Это непоследовательно.
Дальше.
Тебе надо освоить самое главное понятие програмирования - отладка.
Открою тебе очень важный секрнет.
Если бы люди писали программы так....
походу я скрипт писал через php expert editor там есть debugger....
php скрипт выполняеться по шагу и говориться какие переменные на данном шаге чему равны... тоесть
на экран что либо выводить смысла нет.

надо самому себе выводить ИНФОРМАЦИЮ что делает скрипт.
Зачем ты пишеншь в файл, сам не зная, что?
вот именно я вижу,что пишется в файл.. но не могу понять почему пишеться в конец файла пустая строка...
спасибо.. за помощь и советы...
реально трудновато изучать что-либо, когда нет человека у который может посоветовать
 

Alexandre

PHPПенсионер
реально трудновато изучать что-либо, когда нет человека у который может посоветовать
заходи чаще на Форум, сдесь тебе насоветуют, только на выпадки Фаната внимания не обращай :)
 
я сегодня еще раз попробую задуманное реализовать...
пересмотрю код... покажу что я наклацал...
и спрошу почему что и как ....
ок?
 

Фанат

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

Фанат

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

далее.
увидел у тебя еще один косяк.
у тебя строк из файла выводится на одну больше, чем там есть.
for($i=0;$i<=$all;$i++)
<= надо заменить на <


И по поводу удаления.
смотри внимательно:
PHP:
if ($submit=="delete") { 
  $delete=array_keys($_GET['st']);
  $del_count=count($delete);
  for($i=0;$i<$del_count;$i++) unset($strok[$delete[$i]]); 
  $open=fopen($file,"w+"); 
  fwrite($open,implode("", $strok)); 
  fclose($open); 
}
ВСЕ!
остальное, что ты понаписал - лишнее.
 
Сверху