По какой-то причине невозможно сохранить значения флажков в массиве в базе данных! - PullRequest
0 голосов
/ 13 июля 2010

Привет, у меня невероятно тяжелое время с простой проблемой.

Начиная с CodeIgniter 1.7, '$ this-> input-> post ();'поддерживаемые массивы, но я не могу получить значения в массив по какой-то причине.У меня есть 7 флажков, которые хранятся в массиве 'services []', как вы можете видеть из этого примера:

<?php $servicesdata = array (
         'name' => 'services[]',
         'value' => 'in_home_care',
         );
echo form_checkbox($servicesdata, set_checkbox('services[]', 'in_home_care', FALSE)); ?>

Я совершенно уверен, что это правильный способ, потому что формы действительно проверяются, есличто-то идет не так.Теперь у меня начинаются проблемы при хранении значений.У меня есть 7 столбцов, которые должны иметь какое-то значение ... на данный момент мне все равно, но в идеале это будет логическое значение (двоичный файл тоже будет работать нормально).Вот что у меня есть в моем контроллере, так что все утверждают, что должно работать, но просто не работает:

$c = new Client($servicesdata);
$c->first_name = $this->input->post('first_name', TRUE);
$c->in_home_care = $this->input->post('services[in_home_care]');

Вы можете увидеть строку, которую я положил для примера, который отлично работает и вставляется в тип VARCHAR, в то время какмассив не попадет в базу данных вообще.Мне кажется, что я что-то здесь упускаю, а именно «значение» в массиве, но я просто не уверен, куда идти дальше.Любая помощь будет высоко ценится, потому что единственный метод, который я могу получить, жертвует моей проверкой флажка!(

Ответы [ 3 ]

1 голос
/ 13 июля 2010

Если ваш флажок не установлен, значение флажка не будет введено в массив $ _POST.Это, вероятно, где у вас проблемы.

Есть два способа обойти это.Либо установите один флажок по умолчанию, либо используйте HTML, как показано ниже (что может или не может быть наилучшей практикой / действительным, но сработало для меня в прошлом).Если флажок не установлен, значение «foo» для имени «services» будет передано в массив $ _POST.

0 голосов
/ 13 июля 2010

Способ сохранить эти варианты в БД - создать из них строку и сохранить ее.

$ this-> input-> post ('colors')?$ colors = implode ('-', $ this-> input-> post ('colors')): $ colors = '';

Это проверяет, проверено ли что-либо на самом деле вмассив цветов.Если это так, создайте строку из значений массива, разделенных тире.В противном случае присвойте цветам пустое значение.

Затем после прочтения строки БД:

$ profile_data ['colors'] = explode ('-', $ row-> colors);

Затем вы можете передать эти значения обратно во входные данные формы.

0 голосов
/ 13 июля 2010

Прежде всего, в вашей форме есть некоторая избыточность (я думаю).Вы можете установить атрибуты вашего флажка в массиве, включая то, установлен он или нет:

$servicesdata = array (
         'name'    =>  'services[]',
         'value'   =>  'in_home_care',
         'checked' =>  FALSE,
         );
echo form_checkbox($servicesdata);

во-вторых, поскольку вы называете его в массиве, объект должен быть доступен после назначенияв другую переменную:

$checkbox_array = $this->input->post('services');
$service_type=$checkbox_array[0];//will give you 'in_home_care', [1] would be next in array and so on
...