2012-03-24 4 views
4

У меня есть список флажков, когда я установил флажок, он должен вставить значение в базу данных. когда я снял флажок, он должен удалить данные из базы данных.как снять флажок с флажка?

Если я устанавливаю значение в флажке, тогда я могу получить только установленное значение флажка. , если я использую скрытое поле, тогда я могу получить все значение флажка, но тогда я не знаю, что 1 проверяет и который 1 снимает.

Любой может помочь?

$num="3"; 
    for($i=1;$i<10;$i++){ 
    ?> 
    <form name="form1" method="post" action="testcheckbox.php"> 
     <input type="hidden" name="task" value="validatesn"> 
     <input type="hidden" name="validate[]" value="<?php echo $i;?>"> 
     <input type="checkbox" name="validate[]" <?php if($num==$i){ echo "checked=checked";} ?> />Serialno<?php echo $i."<br/>"; ?> 
    <?php 
     $i++; 
    } 
    ?> 
     <input type="submit" name="submit" value="Validate" /> 
    </form> 

    <?php 
    if($_REQUEST['task'] == 'validatesn'){ 
     $valid=$_POST['validate']; 
     foreach($valid as $v){ 
      echo $v; //show all checkbox values 
      //if checkbox= checked then insert value into database 
      //if untick the checked checkbox then delete data from database 
    } 
    } 
?> 
+0

Вы действительно должны писать в db каждый раз, когда кто-то нажимает на флажок ?! – Castilho

+0

@Castilho Это не так; запрос выполняется только после отправки формы. – octern

ответ

6

Разметка для флажка выглядит так:

<input type="checkbox" value="myvalue" name="validate[]"> 

Когда вы POST формы, вы увидите массив называется validate в $_POST.

Если этот массив пуст, флажок не установлен. Если этот массив содержит «myvalue», то флажок был установлен.

Если вы имеете дело с несколькими флажками, как это:

<input type="checkbox" value="myvalue1" name="validate[]"> 
<input type="checkbox" value="myvalue2" name="validate[]"> 

Ваш скрипт должен будет знать, что validate массив в $_POST может содержать значения myvalue1 и myvalue2. Затем вы можете посмотреть в $_POST['validate'], и если это значение существует в массиве, то этот флажок установлен. Вы можете использовать array_diff(), чтобы легко это сделать без написания каких-либо циклов.

2

Я нашел это (не смысловая, но работает) решение в blog, заключающийся в введении первого скрытого ввода с тем же именем и значением, которое вы хотите отправить, когда флажок снят:

<input type="hidden" name="box1" value="0" /> 
<input type="checkbox" name="box1" value="1" /> 

У этого есть некоторые недостатки, особенно если вы отправляете несколько флажков в виде массива, но делает трюк для обычных сценариев.

1
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> 
<title>Untitled Document</title> 
</head> 

<body> 
<form name="chk" action="" method="post"> 
<?php $num=2; 
for($q=0; $num>$q; $q++) 
{ 
?> 
<input type="text" name="fruits[<?php echo $q; ?>][a]" > 
<input type="text" name="fruits[<?php echo $q; ?>][b]"> 
<input type="text" name="fruits[<?php echo $q; ?>][c]"> 
<input type="hidden" name="fruits[<?php echo $q; ?>][d]" value="0" /> 
<input type="checkbox" name="fruits[<?php echo $q; ?>][d]" value="1" /> 
<input type="hidden" name="fruits[<?php echo $q; ?>][e]" value="0" /> 
<input type="checkbox" name="fruits[<?php echo $q; ?>][e]" value="1" /> 
<br /> 
<?php 
} 
?> 
<input type="submit" name="ok" value="ok" /> 
</form> 
<?php 


if(isset($_POST['ok'])) 
{ 

foreach($_POST['fruits'] as $company=>$row){ 

    foreach($row as $fruit){ 

       echo $fruit; 

    } 
} 
} 
?> 
</body> 
</html> 
+0

s.Gnanasekar vilangulathur – user1900387

Смежные вопросы