2016-11-07 4 views
-1

У меня есть форма HTML, который отображает содержимое таблицы MYSQL называется баннером, с указанным нескольких элементов баннеров, которые появляются как:Отправка несколько значений флажка в HTML форме

Im использование PHP CodeIgniter. Я хочу, чтобы пользователи могли обновлять флажок дисплея и отправлять, сохраняя значения 1 и 0 в базе данных для проверки/отсутствия.

FormView

<td> 
    <input type="checkbox" name="bdisplay[]" value="<?php $bannerId?>" <?php if ($displaycheck==1): ?> checked <?php endif;?>> 
    <?php echo $banner->bdisplay; ?> 
</td> 

Функция для отправки формы. Он создает новый ассоциативный массив, если флажок отмечен id => 1 или id => 0.

public function do_updatedisp() 
{ 
    $results = array(); 
    foreach($_POST['bdisplay'] as $onedisplay) 
    { 
     if(!empty($onedisplay)) 
     { 
      array_push($results, $results[$onedisplay]=1); 
     } 
     else 
     { 
      array_push($results, $results[$onedisplay]=0); 
     } 

     $this->bannerM->form_update($results); 

    } 
}  

Баннер Модель:

function form_update($results) 
{ 
    foreach($results as $result=>$value) 
    { 
     $this->db->set('bdisplay', $value); 
     $this->db->where('banner_id', $result); 
     $this->db->insert('banner'); 
    } 
} 

Это ошибка, я получаю: Невозможно добавить или обновить дочернюю строку: ограничение внешнего ключа не удается (vigilantxbanner, скованность FK__usarios FOREIGN KEY (user_id.) СПИСОК ЛИТЕРАТУРЫ usarios (user_id))

Я знаю, что с внешним ключом нет ничего плохого, есть ошибка в другом месте bu t Я застрял на этом слишком долго! Любая помощь ценится!

ответ

1

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

попробовать это вместо

function form_update($results) 
{ 
    foreach($results as $result=>$value) 
    { 
     $this->db->set('bdisplay', $value); 
     $this->db->where('banner_id', $result); 
     $this->db->update('banner'); 
    } 
} 
0

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

 
    display banner 

когда форма представлена ​​независимо от какого-либо метода HTTP используется на стороне сервера только заданные значения передаются поэтому на PHP стороне, если флажок не установлен, то он не будет отображаться во время выполнения PHP, поэтому если вы просто проверите.

<?php 
// using HTTP get method 
// default value for banner display is zero 
$banner_display = 0; 
if(isset($_GET['bdisplay']) 
    $banner_display = 1; 
// further write code to do whatever processing you would like to do 
?> 

Приведенный выше код работает в случае, если вы просто один флажок, который является обязательным для пользователя, кроме того, используя только если оператор является оптимальным способом написания кода, который помогает в создании дополнительных разветвлений инструкции

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