Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Выделенные чекбоксы


Автор: ego1977 7.5.2011, 12:57
Здравствуйте! Вот скрипт чекбоксов:

Код

<input type="checkbox" name="c[0]" value="value1" id="0">        
Åäèíîìûøëåííèê (ïîääåðæèâàåò èäåþ è ïîõîæå äóìàåò)
<input type="checkbox" name="c[1]" value="value2" id="1">
Àêòèâíûé ó÷àñòíèê (ïðèíèìàåò ïîñòîÿííîå àêòèâíîå ó÷àñòèå â äåÿòåëüíîñòè îðãàíèçàöèè)
<input type="checkbox" name="c[2]" value="value3" id="2">
Ïàññèâíûé ó÷àñòíèê (ïðèíèìàåò ìîðàëüíîå èëè èíôîðìàöèîííîå ó÷àñòèå â ïðîåêòå)
<input type="checkbox" name="c[3]" value="value4" id="3">


Вот обработка:

Код

$status = $_POST['c'];

$query2="INSERT INTO users (status)".
        "VALUES ('$status')";





В базу просто записывается слово Array. 
print_r($_POST); выводит Array ( [0] => on [1] => on ). Выделяла 1 и 3 чекбоксы.
Как записать выделенные чекбоксы?

Автор: ego1977 7.5.2011, 13:54
Помогите мне пожалуйста.

Автор: Sanchezzz 7.5.2011, 15:05
я бы записал в базу через "," 

То есть все значение чекбоксов "значение бокса 1, значение бокса 2 итд.

Вариант 1 
Код


$ch = '';
foreach($_POST['c'] as $item) {
    $ch = $ch = $item + ',';
}

print $ch;

//Преобразовать все обратно в массив 
$c = explode(',' , $ch);



Вариант 2
Код

// Получаем все данные в строку
  $ch = serialize($_POST['c']);
// получаем данные в массе обратно
 $c = unserialize($ch);


Если я не понял задачу опишите побольше, ответ будет другим = )

Добавлено через 1 минуту и 50 секунд
хм если это статусы то зачем выбирать много если отображать нужно 1 статус как правело или это другая задача ?

Автор: ego1977 7.5.2011, 15:39
Спасибо! Получилось, только у меня записывается последний отмеченный чекбокс.

Добавлено через 51 секунду
Тут статусов может быть несколько.

Автор: patap 7.5.2011, 15:54
что это за несколько статусов? 

если сущность, которой назначаются эти статусы, может в один момент времени иметь набор из нескольких значений, описываемых этими статусами, то думаю целесообразней под каждый такой статус отвести отдельную колонку в таблице.

Автор: ego1977 7.5.2011, 16:45
Зачем отдельную? Человек может быть в нескольких статусах: например единомышленником и добровольцем или исполнителем. Я хочуу чтоб в одной колонке через запятую записывалось. Но сначала надо, чтобы как-то записывались все отмеченные.

Автор: Sanchezzz 7.5.2011, 18:18
попробуйте name="c[]" у всех чекбоксов сделать и то что я вам дал до этого

Автор: patap 7.5.2011, 18:39
Цитата(ego1977 @  7.5.2011,  15:45 Найти цитируемый пост)
Я хочуу чтоб в одной колонке через запятую записывалось


с такой структурой неудобно (накладно) потом работать

Автор: ego1977 7.5.2011, 18:41
Ничего не получается.

Автор: Sanchezzz 7.5.2011, 19:13
Код

<form action<?=$_SERVER['PHP_SELF']?>" method="post">
<input type="checkbox" name="c[]" value="value1" id="0">        
�������������� (������������ ���� � ������ ������)
<input type="checkbox" name="c[]" value="value2" id="1">
�������� �������� (��������� ���������� �������� ������� � ������������ �����������)
<input type="checkbox" name="c[]" value="value3" id="2">
��������� �������� (��������� ��������� ��� �������������� ������� � �������)
<input type="checkbox" name="c[]" value="value4" id="3">

<input type="submit" name="submit">
</form>

<?
$chs = '';
if(!empty($_POST['c']))
foreach($_POST['c'] as $value) {
    $chs.=  $value . ',';
}
print $chs;
?>



Извени что первый пример с + когда сидишь долго на javascript вспоминаешь что сложение строк в php через "."

Автор: ego1977 7.5.2011, 20:24
Спасибо! Получилось!

Автор: capitan 10.5.2011, 10:46
При таком переборе, в строке появляется лишняя запятая в конце.
Я бы использовал join
Код

$status = '';
if(!empty($_POST['c'])){
    $status = join(', ', $_POST['c']);
}

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)