Мулти лайн изтриване

SayliS

Registered
Здравейте, явно днес ми е ден да задавам много въпроси и се надявам да неставам досаден :? .
Пиша една система за лични съобщения (PM) и целта ми е когато имам избрани с chackbox няколко съобщения да ги изтривам всичките. Как да завъртя, така че да изтривам всичктие избрани с chackbox съобщения?

п.с ако има урок, който може да ми помогне даите линк (аз поне ненамерих)

Ако несте ме разбрали ето снимка
helprj9.jpg
 
Здравей!

Не казваш какви са ти стойностите за чекбокса и къде се съдържа информацията: в БД или файл(ове).

Ако имаш таблица в БД може да стане така (примера е от код за галерия, който все се каня да пусна :( ):

БД, таблицата се казва "picture", ид - уникален номер, ключ към реда.
Тук и долу съм пропуснал връзката към БД, добави си я.
Листването:

<FORM METHOD="POST" ENCTYPE="multipart/form-data" ACTION="skript2" NAME="">

<?
$query="SELECT * FROM picture WHERE img_dir='$dir'" .
$result=mysql_query($query)
or die ("Zaqwkata ne mozhe da se izpylni!");

while ($row = mysql_fetch_array($result))
{
$id=$row["id"];
$img_name=$row["img_name"];
$thumb_name="thumbs/thumb_".$img_name;

$pic= "<IMG SRC='$thumb_name' border=0>";
$chek="<INPUT TYPE='checkbox' NAME='files[]' VALUE='$id'>";

echo "$pic $chek";
}
?>

<INPUT TYPE="submit" NAME="dell" VALUE="Изтрий!">
</FORM>



При листването вземаш ид-то на реда, в който е съобщението и го слагаш за стойност на чекбокса. Особеното е в NAME-а на полето (променливата, к ще се създаде от формата) и която ще съхранява стойността, към него има добавен знак за масив. Ако обърнеш внимание на цикъла, с който обхождаме резултата от БД, ще видиш, че всички чекбоксове ще имат едно и също име в NAME, но различна стойност - тяхното ид. Така, всички избрани чекбоксове ще се съдържат в масива files[] (името е произволно, задължителни са само [] ), а съответните ид-та ще са негови елементи.

Втория скрипт - същинското изтриване:

<?
$files[]=$_POST['files'];

$kolko=count($files);

for($i=0; $i<$kolko; $i++){
$id=$files[$i];

$query ="DELETE FROM picture WHERE id='$id' LIMIT 1 ";
mysql_query($query)
or die ("Zaqvkta ne mozhe da se izpylni!");
}
?>



Тук приемаме стойностите на масива files[], изпратен ни от формата, обхождаме го като в заявката към БД сме задали да изтрива според съответното ид на реда. Заявката е във фор-цикъла, така че ще се повтори необходимия брой пъти докато обхождаш масива.
Има и други начини, но аз използвах този...

Ако имаш други въпроси, пиши!

Дано съм ти помогнал!
Успех!

ПП: зачиствах кода от излишен хтмл, огледай го за изпуснати знаци и си смени имената на таблиците, променливите и пр.
 
Добър ден. Сложих кода с промените по ДБ, но неги трие. Решик да видя какво става в самия код, когато избера от 2/3 полета.

Вади ми следните резултати:
1
Array Array ( [pm] => Array ( [0] => 4 [1] => 2 [2] => 3 ) [Submit] => Изтрии избраните )

Интересното тука е, че '1' е $kolko=count($pm); а съм избрал 3 полета

и още едно нещо неми стана ясно как кода различава кога е checked и кога не е .

п.с може и аз да греша някаде но за 1ви път ми се налага да правя подобно нещо :roll:
 
Ето го и решението:

Код:
	<?php	
	if(isset($_POST['Submit']) && $_POST['Submit'] == "Изтрии избраните") {
	   if(!empty($_POST['pm'])) {
	   	$sequreArray = create_function('$val','return (int)$val;');
      $pm = isset($_POST['pm']) ? array_map($sequreArray,(array)$_POST['pm']) : array();
      if(count($pm)) {
		$query = "DELETE FROM pmessages WHERE id IN(".implode(",",$pm).") AND touser = '" . $_SESSION['user_logged'] . "'";
            mysql_query($query) or die (mysql_error());
		print_r($query);
		}
		}
		}
	}
	?>

п.с С 'малко' помощ го натъкмих 10х на loosingman той ми помогна с кода.

@sizif 10х и за теб :)
 

Back
Горе