|
|
|
| Если чекбокс отмечен, у меня поле в таблице обновляется.
$one.mod_id - id модуля
<input type="checkbox" value="{$one.mod_id}" name="modules" {if $one.visib == 1} checked {/if}>
|
И обновление таблицы:
$sql = "UPDATE modules SET visib = 1 WHERE mod_id = " . $_POST['modules'];
$res = mysql_query($sql);
if(!$res) exit("Error in $sql: ". mysql_error());
|
А как сделать наоборот: снимаем чекбокс - таблица еще раз обновляется, только теперь уже visib = 0. Как передать значение, что чекбокс в этот раз не отмечен? | |
|
|
|
|
|
|
|
для: Лена
(20.09.2009 в 23:34)
| | Чекбокс один или их целая группа и она формируется в цикле? В любом случае нужно искать параметр modules - если он не обнаружен - сбрасывать значение visib в 0. | |
|
|
|
|
|
|
|
для: cheops
(20.09.2009 в 23:48)
| | Чекбоксы выводятся в цикле(привожу нужный кусок кода):
$mod - ассоциативный массив, данные из базы
<?php
{foreach from=$mod item=one key=keys}
<tr>
<td>{$keys}</td>
<td>{$one.mod_name}</td>
<td>
<input type="checkbox" value="{$one.mod_id}" name="modules"
{if $one.visib == 1} checked
{/if}>
</td>
</tr>
{/foreach}
?>
|
И потом по пришествии данных, меняю данные в базе:
<?php
if(isset($_POST['send'])){
//обновляем данные про видимость модулей в таблице модулей
// Защита
if (!get_magic_quotes_gpc()){
$_POST['modules'] = mysql_escape_string($_POST['modules']);
}
if($_POST['modules']){
$sql = "UPDATE modules SET visib = 1 WHERE mod_id = " . $_POST['modules'];
$res = mysql_query($sql);
if(!$res) exit("Error in $sql: ". mysql_error());
}else{
//вот здесь нужно поставить условие, если чекбокс не отмечен...
$sql = "UPDATE modules SET visib = 0 WHERE mod_id = " . $_POST['modules'];
$res = mysql_query($sql);
if(!$res) exit("Error in $sql: ". mysql_error());
}
//выводим список всех модулей сайта(и подключенных, и неподключенных)
}
?>
|
| |
|
|
|
|
|
|
|
для: Лена
(21.09.2009 в 11:01)
| | Хм... вот что не понятно: т.е. у вас несколько чекбоксов? И все называются modules? А как вы отличаете их друг от друга? | |
|
|
|
|
|
|
|
для: cheops
(21.09.2009 в 12:06)
| | Несколько у меня чекбоксов. Ошиблась.
Сделала уже.
<?php
if(isset($_POST['send'])){
//обновляем данные про видимость модулей в таблице модулей
// Защита от SQL-инъекции
if (!get_magic_quotes_gpc()){
$_POST['modules'] = mysql_escape_string($_POST['modules']);
}
//обнулить все записи в базе
//в противном случае $_POST-массив содержит только отмеченные чекбоксы
$q = "UPDATE modules SET visib = 0";
$result = mysql_query($q);
if(!$result) exit("Error in $sql: ". mysql_error());
//а потом присвоить значения выбранных
foreach ($_POST['modules'] as $item=>$value) {
$sql = "UPDATE modules SET visib = $value WHERE mod_id =" . $item . " LIMIT 1";
echo $sql.'<br>';
$res = mysql_query($sql);
if(!$res) exit("Error in $sql: ". mysql_error());
}
?>
|
И шаблон Смарти, если кому-то надо:
<?php
{foreach from=$mod item=one key=keys}
<tr>
<td>{$keys}</td>
<td>{$one.mod_name}</td>
<td>
<input type="checkbox" name="modules[{$one.mod_id}]" value="1" {if $one.visib}checked{/if}>
</td>
</tr>
{/foreach}
?>
|
| |
|
|
|
|
|
|
|
для: Лена
(21.09.2009 в 11:01)
| |
<input type="checkbox" value="{$one.mod_id}" name="modules"
{if $one.visib == 1} checked
{/if}>
|
Такие поля приводят к множественным присваиваниям значений одному и тому же элементу массива $_POST.
На php разобрать такой запрос хоть и можно, но затруднительно.
Обычно имя чекбокса указывают элементом массива.
Либо с явным индексом
name="modules[{$one.mod_id}]"
| , при этом значение может быть практически любым.
Либо с подразумеваемым , передавая при этом ключевую информацию в значении элемента (как у Вас). | |
|
|
|
|
|
|
|
для: Trianon
(21.09.2009 в 12:27)
| | Спасибо. Я просто с самого начала думала, что если чекбокс в цикле выводится - это как один элемент мыслится. Ошибалась. | |
|
|
|
|
|
|
|
для: Лена
(20.09.2009 в 23:34)
| | $sql = "UPDATE modules SET visib = 0 WHERE mod_id = " . $_POST['modules'];
вот только это неприкрытая ничем SQL-инъекция. | |
|
|
|