обновление поля в таблице БД с использованием Codeigniter - PullRequest
2 голосов
/ 20 августа 2011

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

Я хочу обновить поле status_status_id (изначально оно имеет значение 0) таблицы ученика, используя входные данные из этого раскрывающегося списка. И для обновления мне также нужен идентификатор конкретного студента. Проблема в том, что поле status_status_id не обновляется. Следующая ошибка показывает-

       A Database Error Occurred

        Error Number: 1054

      Unknown column 'Array' in 'where clause'

        UPDATE `student` SET `0` = '' WHERE `id` = Array

       Filename: Z:\www\CI\system\database\DB_driver.php

     Line Number: 330

мой контроллер

 function update(){
 $id=$this->input->post('id');
 $data=array(
 'status_status_id'=>$this->input->post('status_status_id'),
 );
 $this->status_model->update($data, $id);
 }
}

моя модель

function update($data,$id){

 $this->db->where('id', $id);
 $this->db->update('student', $data);
}
        }

Просмотр для добавления статуса

   <?php echo form_open('status_controller/update'); 
    $r=$info[0]->id;
  $data=array (
  'id'=>$r,
 'status_status_id'=>set_value('status_status_id')
           );
          ?>
          <p><?php echo form_input($data); ?>
        <p><select name ='status_status_id'>
       <?php echo form_error('status_status_id'); ?>
        <br /><?php
    $getType = mysql_query("SELECT status_id, status FROM status ORDER BY status_id");
      while($type = mysql_fetch_object($getType)){
    echo "<option value=\"{$type->status_id}\">{$type->status} </option>",set_value('status_status_id');
} ?></p><p><?php echo form_submit( 'submit', 'Update Status'); ?></p><?php echo form_close(); ?>

1 Ответ

3 голосов
/ 21 августа 2011

Я вижу, что в представлении есть несколько ошибок.Я просто перепишу его с комментариями, тогда он должен работать.

Обратите внимание, что вы должны переместить все запросы к базе данных за пределы представления и, конечно, добавить проверку.Я не уверен, является ли ID целым числом.

// I suppose this gives us a single ID, not an array of IDs or something else
$r = $info[0]->id;

// put the ID in a hidden field, so POST sends an "id" variable
$hidden_fields = array('id' => $r);

// add the hidden fields directly in form_open()
echo form_open('status_controller/update', '', $hidden_fields); 

// making $getType = mysql_query("SELECT status_id, status FROM status ORDER BY status_id"); in an active record way
$this->db->select('status_id, status');
$this->db->order_by('status_id', 'asc');
$query = $this->db->get('status');

// loop to make an array of the statuses to insert in form_dropdown() array('value' => 'display')
$statuses = array();
foreach ($query->result() as $row)
{
    $statuses[$row->status_id] = $row->status;
}

// you would probably be able to get the current status_status_id
// I will suppose that $info[0]->status_status_id holds that data
echo form_dropdown('status_status_id', $statuses, set_value('status_status_id', $info[0]->status_status_id));
echo form_error('status_status_id');
echo form_submit( 'submit', 'Update Status');
echo form_close();

Контроллер:

function update(){
    // again, this is suspicious from your example, check if it's not an Array
    $id = $this->input->post('id');
    $data = array(
        'status_status_id' => $this->input->post('status_status_id'),
    );

    $this->status_model->update($data, $id);
}

Модель:

function update($data, $id){
    $this->db->where('id', $id);
    $this->db->update('student', $data);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...