Я пытаюсь настроить редактирование свойства standardId базы данных. На данный момент я вручную ввожу значение идентификатора в поле ввода для стандартного идентификатора, но в идеале в конечном итоге свойство будет невидимым.
При попытке изменить существующие свойства в БД я получаю следующую ошибку:
Тип: Ошибка подсчета аргументов
Сообщение: Слишком мало аргументов для функции Standards::edit(), 0 передано в D:\xamp\htdocs\myisogo\system\core\CodeIgniter.php в строке 532 и ровно 1 ожидается
Имя файла: D:\xamp\htdocs\myisogo\application\controllers\Standards.php
Номер строки: 39
Модель:
public function edit_standard()
{
$this->load->helper('url');
$data = array(
'standardid' => $this->input->post('standardId'),
'standardcode' => $this->input->post('standardCode'),
'standardname' => $this->input->post('standardName')
);
return $this->db->insert('isostandard', $data);
}
Контроллер:
$this->load->helper('form');
$this->load->library('form_validation');
$data['standard'] = $this->standard_model->get_standard_byId($standard_id);
$this->form_validation->set_rules('standardId', 'standardid', 'required');
$this->form_validation->set_rules('standardCode', 'standardcode', 'required');
$this->form_validation->set_rules('standardName', 'standardname', 'required');
if ($this->form_validation->run() === FALSE)
{
$this->load->view('templates/header');
$this->load->view('templates/navbar');
$this->load->view('standards/edit', $data);
$this->load->view('templates/footer');
}
else
{
$this->standard_model->edit_standard();
$this->load->view('standards/success');
}
Вид:
<?php echo form_open('standards/edit'); ?>
<h1>Amend Existing standard </h1>
<h2><?php echo $standard['standardId']; ?></h2>
<label for = "title"> Standard ID </label>
<input type = "input" name = "standardId"/><br />
<label for = "title">Standard Code</label>
<input type = "input" name = "standardCode" /><br />
<label for = "text">Standard Title</label>
<textarea name = "standardName"></textarea><br />
<input type = "submit" name = "submit" value = "Create new standard" />
</form>
Да, это правильно
Смотрите мой ответ..






Я предполагаю, что ваш метод из Standards::edit:
public function edit($standard_id)
$this->load->helper('form');
$this->load->library('form_validation');
$data['standard'] = $this->standard_model->get_standard_byId($standard_id);
$this->form_validation->set_rules('standardId', 'standardid', 'required');
$this->form_validation->set_rules('standardCode', 'standardcode', 'required');
$this->form_validation->set_rules('standardName', 'standardname', 'required');
if ($this->form_validation->run() === FALSE)
{
$this->load->view('templates/header');
$this->load->view('templates/navbar');
$this->load->view('standards/edit', $data);
$this->load->view('templates/footer');
}
else
{
$this->standard_model->edit_standard();
$this->load->view('standards/success');
}
}
В этом случае всегда требуется $standard_id. Верно?
Но проблема в вашем form_open. Вы передаете URL-адрес без идентификатора.
<?php echo form_open('standards/edit'); ?>
При этом, когда вы отправляете форму, вы отправляете ее на //localhost/standards/edit, но COdeIgniter принимает только //localhost/standards/edit/<some_id_here>.
У вас есть два варианта
Не передавайте URL-адрес form_open, так как вы не отправляете сообщения в другую конечную точку.
<?php echo form_open(); ?>
Отредактируйте свою форму form_open и соедините идентификатор
<?php echo form_open("standards/edit/{$standard['standardId']}"); ?>
Я придерживаюсь первого.
Если вы хотите сделать параметр необязательным, вам нужно присвоить значение по умолчанию public function edit($standard_id=null)
Большое спасибо. Это, наконец, щелкнуло. По сути, я не передавал требуемый аргумент в метод, и это было причиной ошибки. Отмечен как лучший ответ.
`$standard_id` – это параметр вашего метода редактирования?