【问题标题】:How to make if some condition, checkbox to be checked如果某些条件,如何使复选框被选中
【发布时间】:2015-06-18 16:40:54
【问题描述】:

我必须向学生展示复选框,如果有明确的老师教这些学生,他们必须被检查。如果这些学生不是他的学生,那就不用查了。我有两个查询来计算 2 个值,但在我的情况下,当它们相等时,不会在 ckechboxes 中检查学生,而是写成:checked="checked" > >。以及如何关闭我的复选框,在学生姓名前显示> > >

我的看法是:

<?php
foreach($select_students as $student) 
{
 
?>
  
    <tr><td class='col-md-2'>

    <input type="checkbox" name="student[]"  value="<?php echo $student->user_id; ?>"  
    <?php  foreach($select_teachers_students as $select) {
      echo $student->user_id == $select->student_id ?  'checked="checked"' : ''
      ; ?> >
    

  <?php } 

    echo $student->username; ?>
  
    </td><td>

我的模型是:

public function select_students() {
  
        $this->db->select('users.user_id, users.username, users.school_id, users.class, users.division, users.role_id, schools.school_name, schools.region,class_divisions.division');
        $this->db->from('users');
        $this->db->join('class_divisions','class_divisions.id=users.division','left');
        $this->db->join('schools','schools.school_id=users.school_id','left');
        $this->db->where('(users.deactivated_at = "0000-00-00 00:00:00" OR users.deactivated_at IS NULL) AND users.role_id = 1 ');
        $this->db->where('users.school_id',$this->uri->segment(4) );
        $result=$this->db->get();
            return $result->result();
 }


public function edit_students() {
     
        $submit=$this->input->post('change');
        $date = new DateTime("now"); 
        if(isset($submit)&&($submit=='Промени ученици')) {
          if($this->input->post('student')) {
          foreach($this->input->post('student') AS $student) {
          $data = array(         
            'student_id' => $student,
            // 'teacher_id' => $this->uri->segment(3),
             'created_at' => $date->format('Y-m-d H:i:s')         
          );
          $this->db->where('teacher_id',$this->uri->segment(3));
          $this->db->update('teacher_student_conn', $data);    
      
            if($this->db->affected_rows() > 0)
            {   
                return true;
            } 

              return false;
            }
          }
      }

    }

我的控制器是:

  public function edit_students()
    {
        if($this->admin_model->edit_students()) {
            echo "Tou changed teacher successfully!";
            $teacher_id = $this->uri->segment(3);
			$school_id = $this->uri->segment(4);
            header('Refresh: 2; url=/survey/index.php/admin/edit_students/'.$teacher_id .'/' .$school_id);
        }
        else
        { 
           
            $data['dynamic_view'] = 'edit_students'; 
            $data['select_students']=$this->admin_model->select_students();
            $data['select_teachers_students']=$this->admin_model->select_teachers_students();
            $data['teacher_name']=$this->admin_model->teacher_name();
            $data['menu']=$this->menu_model->get_menu();
            $this->load->view('templates/main',$data);
        }
    }
现在我编辑了我的模型,它是:
public function select_teachers_students() {
      $this->db->select('*');
      $this->db->from('teacher_student_conn');
      $this->db->where('teacher_student_conn.teacher_id',$this->uri->segment(3) );
      $result=$this->db->get();
            return $result->result();
 }
public function edit_students() {
     
        $submit=$this->input->post('change');
        $date = new DateTime("now"); 
        if(isset($submit)&&($submit=='Промени ученици')) {
          if($this->input->post('student')) {
           foreach($this->input->post('student') AS $student) {
            if($this->input->post('student')==$this->select_teachers_students()) {
             
          $data = array(         
            'student_id' => $student,
            
             'created_at' => $date->format('Y-m-d H:i:s')         
          );
          $this->db->where('teacher_id',$this->uri->segment(3));
          $this->db->update('teacher_student_conn', $data);    
      
    }
      else if($this->input->post('student')!=$this->select_teachers_students()) {
        
         $data = array(         
            'student_id' => $student,
             'teacher_id' => $this->uri->segment(3),
             'created_at' => $date->format('Y-m-d H:i:s')         
          );
         $this->db->insert('teacher_student_conn', $data);   
      }
      }
            if($this->db->affected_rows() > 0)
            {   
                return true;
            } 

              return false;
            }
          }
      

    }

但插入我已经拥有的行。我尝试使用函数 select_teachers_students() 进行检查,如果它们在那里,我不想再次插入 - 我想更新它们。以及如何在选中复选框时设置复选框的值,插入value="&lt;?php echo $student-&gt;user_id; ?&gt;" 但是,当未选中复选框并且我按下提交按钮时,插入Value='0'。如果它们不存在,我想插入。

【问题讨论】:

  • 我改变了展示方式。这种方式更复杂。 :)

标签: php codeigniter if-statement checkbox checked


【解决方案1】:

你们之间似乎多了一个>

?> >      

  <?php

标签。由于这是在 foreach 循环中,因此它将被执行多次。

更严肃的一点是,您的视图逻辑需要改头换面。使用 Smarty 之类的模板引擎。

【讨论】:

    【解决方案2】:

    用于输出复选框的代码似乎不正确。请尝试以下操作:

    <td class='col-md-2'>
        <input type="checkbox" name="student[]"  value="<?php echo $student->user_id; ?>"
        <?php foreach($select_teachers_students as $select) { ?>
              <?php echo $student->user_id == $select->student_id ? 'checked="checked"' : ''; ?>            
        <?php } ?>  
        />
        <?php echo $student->username; ?>
    </td>
    

    这应该可行。在您的情况下,循环设置不正确...

    【讨论】:

    • 谢谢,现在可以使用了! :) 我不知道该使用什么 - 在我的查询中更新或插入。如果这位老师教他们而不是如果他不教他们,有些学生会被检查。我想更改学生 - 如果您选中学生的其他复选框,请插入该老师的表 teacher_student_conn 中。但是如果它们被选中并且它们已经被插入并且我不想再次插入。
    【解决方案3】:

    而不是使用:

    <?php  foreach($select_teachers_students as $select) {
          echo $student->user_id == $select->student_id ?  'checked="checked"' : ''
          ; ?> >
    

    您应该使用 in_array 函数来检查老师是否教过任何学生。 示例:

    select_teachers_students=array(12, 34, 25);// Student ids array 
    if(in_array($student,select_teachers_students){
         echo "checked='checked'";
    }
    

    因为错误,最后加了一个>。

    【讨论】:

      【解决方案4】:

      每个input 元素只需要一个checked="checked"。然后,首先计算是否检查了学生,然后(何时构建输出)使用它。

      <?php
      foreach ( $select_students as $student ) {
          $checked = false;
          foreach ( $select_teachers_students as $select ) {
              if ( $student->user_id == $select->student_id ) {
                  $checked = true;
                  break;
              }
          }
          printf( '<tr><td class="col-md-2">'
                  . '<input type="checkbox" name="student[]" value="%s" %s />'
                  . '</td><td>%s</td></tr>',
                  $student->user_id,
                  $checked ? 'checked="checked"' : '',
                  $student->username );
      }
      ?>
      

      【讨论】:

      • 我的问题是当你打开这个页面时,会检查你教的学生。如何在数据库中更新或插入此查询?如果我添加更多学生并在模型中的查询中使用“插入”,我将再次插入已经插入的学生。如果我使用更新,我将为该教师更改学生,但我不会向该教师添加新学生。
      • 没有一个查询同时满足两者。首先,确定那些已经存在的。不存在的第二个聚合。最后去掉剩菜。 a) $oldIds = 一些选择id的查询 b) $newIds = html表单的请求 1) foreach ( $oldIds as $id ) { if isset( $newIds[$id] ) unset( $newIds[$id] ); unset( $oldIds[$id] ); } 2) foreach ( $newIds as $id ) { 查询到插入 ` }` 3) foreach ( $oldIds as $id ) { 查询删除 ` }`
      • 我编辑了我的问题。如果你有足够的时间去看它。 :) :)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-25
      • 1970-01-01
      • 1970-01-01
      • 2022-07-21
      • 2011-01-16
      • 1970-01-01
      相关资源
      最近更新 更多