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

lutskboy
На сайте с 22.11.2013
Offline
191
4151

Здравствуйте.

У меня есть файл, текстовый. В каждой новой строчки название товара. Я сделал скрипт который выводит все товары в столбик, и напротив каждого из товаров стоит checkbox. отмечаю нужный товар нажимаю кнопку и у меня удаляет из текстового файла нужные товары.

вот код который удаляет строки(товары) .

	
$list="file.txt";
$str=$_POST['delete'];
$file=file($list);
for ($i=0; $i < count($file); $i++) {
for ($j=0; $j < count($str); $j++) {
if ($i==$str[$j]) unset($file[$i]);
}
file_put_contents($list,implode("",$file),LOCK_EX);
}

$list="file.txt";

$str=$_POST['delete'];

$file=file($list);

for ($i=0; $i < count($file); $i++) {

for ($j=0; $j < count($str); $j++) {

if ($i==$str[$j]) unset($file[$i]);

}

file_put_contents($list,implode("",$file),LOCK_EX);

}

Где $_POST['delete'] ето массив строки которые нужно удалить. например

array([0]=>2, [1]=>5, [2]=>8);

Вопрос такой. Все работает отлично, но если выбрать любой товар и последний, то последний не удаляется, приходится удалять его отдельно. Просто отмечаю последний и он удаляется. Как поправить код, чтоб и последний удалялся?

И еще, если нажать быстро кнопку удалить, несколько раз, то удаляет и еще строки уже так сказать в том файле в котором они удалились. Например удаляю строки 2 , 4, 9, и нажмаю быстро кнопку удалить, то удаляет снова строки 2 , 4, 9. Хотелось бы етого избежать, НО КАК?

J
На сайте с 20.02.2014
Offline
120
jkm
#1

Дело в том, что значение выражения $i < count($file) заново вычисляется на каждой итерации цикла.

После очередного вызова unset, количество элементов будет меньше и счетчик до последнего элемента не дойдет.


$list="file.txt";
$str=$_POST['delete'];
$file=file($list);

foreach($str as $i) {
unset($file[$i]);
}
file_put_contents($list,implode("",$file),LOCK_EX);
lutskboy
На сайте с 22.11.2013
Offline
191
#2

Спасибо. Очень помогли.

Осталось решить второй вопрос. Запретить как то нажатие кнопки удалить больше одного раза. Тут наверно Jquery нужно

VulkanPartner
На сайте с 27.03.2014
Offline
91
#3
lutskboy:

Осталось решить второй вопрос. Запретить как то нажатие кнопки удалить больше одного раза.

Вот простое решение на JS есть неплохое!

https://perestroika.team/ru/ (https://perestroika.team/ru/) Perestroika Affiliates- ведущая гемблинг-партнерка. RevShare - до 60%. CPA - до 150$.
lutskboy
На сайте с 22.11.2013
Offline
191
#4

Действительно работает. Спасибо. По крайней мере на компютере работает. Не знаю как на планшетах, но и так устроит.

Всем спасибо. Очень помогли

VulkanPartner
На сайте с 27.03.2014
Offline
91
#5
lutskboy:
Не знаю как на планшетах, но и так устроит.

А в чем разница на планшете? Если в браузере JS не отключен (что бывает очень редко), то будет все работать точно так же!

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий