2013-04-23 7 views
0

드롭 다운 메뉴에서 선택 항목으로 체크 박스를 선택하여 학생 클래스 목록을 업데이트하려고했습니다. 4 개의 체크 박스를 선택했습니다. 따라서 디버그 올바르게 248,268,244,1220 보여줍니다. 하지만 "classroom_id"로 인해 Warning (2): Illegal string offset 'id' [APP/controllers/customers_controller.php, line 728] 오류가 발생했습니다. 어쨌든 선택된 체크 박스의 목록 만 표시하고 있습니까?cakephp 1.2 드롭 다운 메뉴가있는 다중 업데이트 체크 박스

확인란을 선택하여 여러 레코드/행을 업데이트하려고합니다. 선택한 ID를 컨트롤러에 여러 개 보내려면 어떻게합니까?

도움이 될 것입니다.

<?php echo $form->input('classroom_id', array('type' => 'select','empty' => '-- Select --','label' => false,'style'=>'width:254px;', 'options' => $classesfiltered,'validate'=>'required:true','div'=>'formfield')); ?> 

<?php foreach ($students as $student) { ?> 
<?php echo $form->input('Customer.'.$student['Customer']['id'].'.id', array('type' => 'checkbox', 'id' => "admin_checkbox_".$student['Customer']['id'], 'label' => false)); ?> 
<?php } ?> 

CONTROLLER

foreach($this->data['Customer'] as $key => $item) { 
    if ($item['id']) { 
      Debugger::Dump($this->data['Customer'][$key]); 
    } 
} 

OUTPUT

Warning (2): Illegal string offset 'id' [APP/controllers/customers_controller.php, line 728] 

"classroom_id" 

248 

268 

244 

1220 

답변

1

대신 5의 값을 얻고있는 이유가 아닌 경우 4의 때문에 classroom_id 입력 :

<?php echo $this->Form->input('classroom_id', array('type' => 'select','empty' => '-- Select --','label' => false,'style'=>'width:254px;', 'options' => $classesfiltered,'validate'=>'required:true','div'=>'formfield')); ?> 

것은 당신이 입력의 이름으로 모델의 이름을 포함하지 않기 때문에 (예를 들어, Customer.classroom_id), 현재 모델에 포함시키고 싶다는 가정을합니다 (물론 폼 요소에서 모델을 수동으로 지정하지 않았다는 가정하에).

올바르게 5 개의 값을 반환합니다.

그러나 컨트롤러에서는 얻을 수있는 유일한 데이터는 선택 상자가 아니라 확인란입니다. 확인란뿐 아니라 모든 "고객"양식 데이터를 반복합니다.

우리는이 문제를 해결할 수있는 두 가지 방법이 있습니다 :

옵션 # 1 : 루프 업데이트 후

<?php 
echo $this->Form->input('Customer.classroom_id', array('type' => 'select','empty' => '-- Select --','label' => false,'style'=>'width:254px;', 'options' => $classesfiltered,'validate'=>'required:true','div'=>'formfield')); 

foreach ($students as $student) { 
    echo $this->Form->input('Customer.id.'.$student['Customer']['id'], array('type' => 'checkbox', 'id' => "admin_checkbox_".$student['Customer']['id'], 'label' => false)); 
} 
?> 

참고 양식 입력을 수정하고 (권장) : 나는에서 입력의 첫 번째 매개 변수를 전환 'Customer.'.$student['Customer']['id'].'.id' to 'Customer.id.'.$student['Customer']['id'] 이렇게하면 어레이의 POST 된 데이터에 액세스 할 수 있습니다. (<student id>은 실제 학생의 ID입니다) 결과 폼 입력은 다음과 같이 표시됩니다

<div class="input checkbox"> 
    <input type="hidden" name="data[Customer][id][<student id>]" id="admin_checkbox_<student id>_" value="0"> 
    <input type="checkbox" name="data[Customer][id][<student id>]" id="admin_checkbox_<student id>" value="1"> 
</div> 

할 수 있습니다 다음과 같이 보일 것입니다 컨트롤러에서 분리 된 각각의 체크 박스를 통해 루프 :

foreach ($this->data['Customer']['id'] as $id => $checked) { 
    if ($checked) { 
     Debugger::Dump($this->data['Customer'][$id]); 
    } 
} 

옵션 # 1은 데이터가 올바르게 분리되어 있기 때문에 권장됩니다. 그런 다음 필요한 데이터 만 루프 할 수 있습니다.

옵션 # 2 : 나는하지 않는 것이 좋습니다 다른 옵션은 모든 데이터를 통해 루프는 isset()를 사용하지만 당신이

foreach ($this->data['Customer'] as $key => $item) { 
    if (isset($item['id']) && $item['id']) { 
     Debugger::Dump($this->data['Customer'][$key]); 
    } 
} 
+0

당신은 스타입니다! – DANLEE

0

확실 경고가 중요한 용도 error_reporting(E_ERROR);

+0

원하는 데이터에 작용하지만, 그것은 단지 4를 반환해야 값. 현재 각 루프마다 classroom_id가있는 4 개의 확인 된 값이 반환되었습니다. – DANLEE

0
Instead of creating single single check boxes you should use proper format of cakephp. Please check below: 

echo $this->Form->input('Model.field', array(
    'type' => 'select', 
    'multiple' => 'checkbox', 
    'options' => $students 
    ) 
)); 

In above code $students is holding your check boxes values like [0]=male, [1]=female. 

In your controller, you will one value same like you get value of textbox. 
+0

안녕하세요, Adiya. 나는 여러 개의 확인란을 찾고 있지 않다. 확인란을 선택하여 여러 레코드/행을 업데이트하려고합니다. 감사. 컨트롤러에 여러 개의 선택된 ID를 어떻게 보내면됩니까? – DANLEE