2016-01-09 4 views
0

У меня возникли проблемы с кодированием для редактирования/удаления вопроса в базе данных. Из моих вопросов викторины. Это моя модель. Я хотел бы отредактировать вопрос из представления через контроллер.codeigniter: редактирование и удаление из базы данных

Это мой текущий режим:

function getquestions($quizid) 
{ 
    // get data about the quiz - we need the quiz size 
    $quiz = $this->getquiz($quizid); 
    $qzsize = $quiz['quizsize']; 

    $this->db->select('id'); // we want just the id fields 
    $this->db->limit($qzsize); // how many questions to ask 

    // this next clause allows us to select random questions - a full discussion of how this works and its drawbacks is 

    // here https://www.warpconduit.net/2011/03/23/selecting-a-random-record-using-mysql-benchmark-results/ 

    $this->db->order_by('RAND()'); 
    $res = $this->db->get_where('questions',array('quizid' => $quizid)); 
    log_message('DEBUG',$this->db->last_query()); 
    if ($res->num_rows() == 0) { 

     // no questions found! 

     // returning false to controller tells it we have encountered an error 

     // leave controller to decide how to handle error 
     return false; 
    } 

    $questions = array(); 
    foreach ($res->result_array() as $row) { 
     $questions[] = $row['id']; 
    } 
    shuffle($questions); // provide questions in random order 
    $res->free_result(); 
    return $questions; 
} 
/** 
* get a question 

* @param int - question id 

* @return mixed false|array - question data + answers (array) 
*/ 
function getquestion($id) { 
    $this->db->where('id',$id); 
    $res = $this->db->get('questions'); 
    if ($res->num_rows() != 1) { 
     return false; 
    } 
    $question = $res->row_array(); // get first row as an array - this is the question data 

    // now get the answers for this question 

    $res = $this->db->get_where('answers',array('questionid' => $id)); 
    if ($res->num_rows() < 2) { 

     // must have at least two answers 
     return false; 
    } 
    $answers = array(); 
    // get each row as an array and push it onto the answers array 

    foreach ($res->result_array() as $row) { 
     $answers[] = $row; 
    } 
    shuffle($answers); 
    // now return all the data as one array, with keys to help access elements 

    return array('q' => $question,'a' => $answers); 
} 
+0

после просмотра и контроллер тоже. Только релевантные коды –

+0

Мне нужна помощь только с моделью. Представление было бы формой –

ответ

0

Где-то в вас контроллер необходимо обнаружить «удалить» действие. Это может быть через URL-адрес или через ввод формы. Я уверен, что вы можете сделать это.

Например, контроллер может быть его метод определен как

public function view($question_id=0, $action='') { 

Тогда вы могли бы иметь ссылку на вашу страницу, которая имеет часть действие определяется как «удалить». В вас контроллер вы бы иметь

if ($action == 'delete') { 

Чтобы удалить выбранный вопрос из базы данных вы будете использовать

$this-db-where('question_id', $question_id); 
$this->db->limit(1); 
$this->db->delete('my_table'); 

Который подробно описано здесь: http://www.codeigniter.com/userguide3/database/query_builder.html#deleting-data

редактировать данные, вы должны получить свой ввод формы таким образом:

http://www.codeigniter.com/userguide3/libraries/input.html

И используя введенные ошибки, введите новые данные в базу данных с помощью построителя запросов (связанного с ранее).

Что-то вроде

$data = array(
    'name' => $name, 
    'description' => $description; 
); 
$this-db-where('question_id', $question_id); 
$this->db->update('mytable', $data); 

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

удачи с вашим сайтом,

С наилучшими пожеланиями,

Пол

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