Удаление елементов масива chekbox

  • Автор темы Epicentr
  • Дата начала

Epicentr

Guest
Удаление елементов масива chekbox

Есть такая ситуевина... допетрить сам не могу к сожалению и прошу помощь зала:

Есть формочка

PHP:
<?
$n=0;
foreach($name as $idx_name => $id_name){
$n+=1;
?>
<form action="change.php">
<tr>
<td width='30' align='center' class='td'><font color=#000000 size=2><b><?echo $n?></b></font></td>
<td align='left' class='td'><font color=#000000 size=2><?echo $id_name; ?></font></td>
<td width='70' align='center' class='td'><font color=#000000 size=2><b><input type='text' size='5' name="count[]" value="<?echo $colvo[$idx_name];?>"></b></font></td>
<td width='100' align='right' class='td'><font color=#000000 size=2><?echo $price[$idx_name]; ?> руб.</font></td>
<td width='50' align='center' class='td'><font color=#000000 size=2><b><input type='checkbox' name=del[] value='<?echo $idx_name;?>'></b></font></td>
</tr>
PHP:
<?
}
?>
<input type='submit' value='пересчитать' name='sub_re_sum'></form>
</table>

проблемма заключается (ну во первых в моем ДНК это точно) в том что удаление из массива елементов делается по checkbox-сам.. фалику change.php

вот в нем то все и происходит

PHP:
if(!isset($del)){
	$colvo=$count;
	$_SESSION["colvo"]=$colvo;
}
else{	
		foreach($del as $idx_del => $id_del){
				unset($Id_kod[$id_del]);
				unset($name[$id_del]);
				unset($price[$id_del]);
				unset($colvo[$id_del]);				
			}
	}
Так вот по выделению одного елемента все прохидит гладко т.е. из масива удачно убирается те элементы которые содержатся в $del но стоит выбрать побольше элементов т.е.
например $del=2, $del=3 , в тоге возвращает 0,1,4 без смещения...
 

Кром

Новичок
>в тоге возвращает 0,1,4 без смещения...

Что за смещение? Зачем оно тебе?
У тебя есть некий $id_name, вот его и передавай в массиве del как идентификатор удаляемого значения

Кстати, у тебя открывающий тег формы попадает в цикл.
 

Epicentr

Guest
Ну вобщем так и есть

$id_name => de[]

только при unset($name[$id_del]);
($id_name=4-м елементам)
где выбраны допустим 2,3! он их грохает хорошо только вот ключи потом возращает 0,4
а не 0,1 как хотелось... :-(
 

Кром

Новичок
>вот ключи потом возращает 0,4 а не 0,1 как хотелось... :-(

Разницы никакой, по большому счету. Перекинь значения в новый массив (через foreach), если так нравиться, будут тогда ключи снова по порядку идти.
 

CCCP_MOCKBA

Новичок
array_multisort -- Сортировать несколько массивов или многомерные массивы
 

Lamer_Scorp

Guest
можно сделать так, чекбоксы пишешь с именем, как и делал, del[] в качестве индекса пишешь, какое-то уникальное значение удаляемого элемента. Не нада ему вообще никакого value присваивать, елси галочка есть, то передастся on.
Потом в цикле удаляешь.

Вот пример:

Чекбокс в форме
<input type="checkbox" name="del[".$news_data[id]."]">

Скрипт проверяющий елси есть галочка, удалять
if (count($del) > 0){
$index = key($del);
$value = current($del);

while (list($index,$value) = each($del)){
if($value == "on"){
$delete_news="DELETE FROM sn_news WHERE id='$index'";
mysql_query ($delete_news);
}
}
}
 

Epicentr

Guest
Решил вот так:
PHP:
foreach($del as $idx_del => $id_del){
				unset($Id_kod[$id_del]);
				unset($name[$id_del]);
				unset($price[$id_del]);
				unset($colvo[$id_del]);				
			}
// Времянка для массивов
		foreach($Id_kod as $idx_Id_kod => $id_Id_kod){
		 		$temp_Id_kod[]=$id_Id_kod;
		}
		foreach($name as $idx_name => $id_name){
		 		$temp_name[]=$id_name;
		}
		foreach($price as $idx_price => $id_price){
		 		$temp_price[]=$id_price;
		}
		foreach($colvo as $idx_colvo => $id_colvo){
		 		$temp_colvo[]=$id_colvo;
		}
// Массив умер и ссессия тоже

		unset($Id_kod);unset($_SESSION["Id_kod"]);
		unset($name);unset($_SESSION["name"]);
		unset($price);unset($_SESSION["price"]);
		unset($colvo);unset($_SESSION["colvo"]);

// Воскрешение массива

		foreach($temp_Id_kod as $idx_temp_Id_kod => $id_temp_Id_kod){
			$Id_kod[$idx_temp_Id_kod]=$id_temp_Id_kod;
		}
		foreach($temp_name as $idx_temp_name => $id_temp_name){
			$name[$idx_temp_name]=$id_temp_name;
		}
		foreach($temp_price as $idx_temp_price => $id_temp_price){
			$price[$idx_temp_price]=$id_temp_price;
		}
		foreach($temp_colvo as $idx_temp_colvo => $id_temp_colvo){
			$colvo[$idx_temp_colvo]=$id_temp_colvo;
		}
// Да воскреснет сессия

		$_SESSION["Id_kod"]=$Id_kod;
		$_SESSION["name"]=$name;
		$_SESSION["price"]=$price;
		$_SESSION["colvo"]=$colvo;
}
 
Сверху