Здесь есть ряд ошибок.
На сегодняшний день мы установили, что выполнение var_dumps в контроллере приводит к NULL для всех ваших значений "POST".
Я предположилдля простоты следующее.
Имя контроллера: Program.php (Приложение НЕ является допустимым именем контроллера, так как это имя-имя)
Название модели:Mdl_update.php
Представление: update_view.php
Проблема № 1: В вашей форме возникла проблема, когда вы используетеякорный тег, который является просто ссылкой.Он ничего не делает при отправке каких-либо данных из формы.
Поэтому мы должны удалить тег привязки и заменить его формой отправки.Вы должны отправить форму, чтобы получить шанс на отправку данных формы.
Для тестирования ваших GET и POST я добавил в две разные формы. In update_view.php
<!-- Set the Method to GET -->
<form action="program/update" method="get">
<input type="hidden" name="mar-id" value="<?php echo $row['id']; ?>">
<input type="hidden" name="mar-read" value="New-value">
<input type = "submit" name="update" value="Update with GET">
</form>
<!-- Set the Method to POST as this is what the Controller is Expecting -->
<form action="program/update" method="post">
<input type="hidden" name="mar-id" value="<?php echo $row['id']; ?>">
<input type="hidden" name="mar-read" value="New-value">
<input type = "submit" name="update" value="Update with POST">
</form>
То, что я использовал для отображения формы в контроллере, просто вызывая программу / индекс в контроллере программ.
public function index() {
$this->load->helper('url');
$data['row'] = array('id' => 2);
$data = $this->load->view('update_view', $data, TRUE);
echo $data;
}
Таким образом, ваш контроллер ищет POST, а не GET.Это можно доказать, немного изменив контроллер для отладки.
public function update() {
$this->load->helper('url');
$this->load->model('mdl_update');
$id = $this->input->post('mar-id');
$value = $this->input->post('mar-read');
echo '<h2>POST Values</h2>';
var_dump($id);
var_dump($value);
// ****************************
// These are added in for debugging/Demonstration to show values for the form using the GET method.
$id_get = $this->input->get('mar-id');
$value_get = $this->input->get('mar-read');
echo '<h2>GET Values</h2>';
var_dump($id_get);
var_dump($value_get);
// ****************************
exit('Stopped for Debugging: Method '. __METHOD__.' at Line: '.__LINE__); // Added for Debug
$mar = $this->mdl_update->Update($id, $value);
if ($mar == TRUE) {
redirect(base_url('program/otherpage'), 'refresh');
} else {
redirect(base_url('program/otherpage'));
}
}
Итак, вы ищете POST-данные, когда для вашего метода формы установлено значение GET.Пожалуйста, знайте, что вы устанавливаете.Они должны совпадать.
Если вы хотите использовать GET, вам нужно использовать $this->input->get()
Приведенный выше код позволит вам проверить оба.
Итак, теперь у вас есть POST и GET Form иКонтроллер настроен для демонстрации двух разных типов.Выберите либо ПОЛУЧИТЬ или ПОСТ!Это зависит от вас, какой из них вы выберете.
Проблема № 2: Ожидайте возвращаемое значение от вашей модели, когда вы ничего не возвращаете.
В вашем контроллереу вас есть строка ...
$mar = $this->mdl_update->Update($id, $value);
А в вашей модели у вас есть ...
public function update ($id,$value) {
$data = array(
'status' => $value
);
$this->db->where('id', $id);
$this->db->update('db_table', $data);
}
Ваш метод модели ничего не возвращает.Вы всегда должны искать, каковы ваши возвращаемые значения.Я ожидаю, что вы намеревались вернуть стоимость обновления.Просматривая сам код CI, кажется, что если что-то пойдет не так, он вернет FALSE (если отладка базы данных отключена - узнал что-то новое)
Я добавил некоторую отладку, чтобы помочь в просмотре происходящего.здесь.
public function update($id, $value) {
$data = array(
'status' => $value
);
$this->db->where('id', $id);
$update_result = $this->db->update('db_table', $data);
echo $this->db->last_query(); // Added for DEBUG
return $update_result;
}
Теперь я не могу получить ваш код для создания новых строк, как вы утверждаете. Невозможно, с помощью этого кода, добавлять новые строки. Так что это происходит из-за того, что вы нам не показали, но это не является важным и не важным здесь.
Если мы изменим контроллер для просмотра модели и т. Д. (Я только показываю изменения), мы изменим
exit('Stopped for Debugging: Method '. __METHOD__.' at Line: '.__LINE__);
$mar = $this->mdl_update->Update($id, $value);
На это
$mar = $this->mdl_update->Update($id, $value);
var_dump($mar);
exit('Stopped for Debugging: Method '. __METHOD__.' at Line: '.__LINE__);
Если вы запустите это и отправите либоGET (результаты NULL) или POST, обновление всегда будет возвращать TRUE.Таким образом, ваше перенаправление и т. Д. Нужно посмотреть на то, как вы выбираете тот или другой.
Я думаю, вы должны установить столбцы таблицы так, чтобы они не были пустыми, и добавить некоторую «валидацию» в вашем контроллере..
ВЫПУСК 3: Нет проверки формы CodeIgniter имеет класс проверки формы, который я предлагаю вам прочитать.Это становится слишком длинным, чтобы вдаваться в подробности ...
Так что, пройдя через это, вы можете добавить / удалить отладку, чтобы проверить, что происходит, и продвинуться по пути, как я надеюсь, показал.
если что-то неясно, просто спросите.Я уверен, что мог что-то пропустить.