#php #codeigniter #activerecord #save
#php #codeigniter #activerecord #Сохранить
Вопрос:
Я использую последнюю версию code igniter (2.0.3) и php-active 0.0.1.
Все работает нормально, кроме save()
;
Код:
if($_POST)
{
$entry= Customers::find_by_routeid('4');
$entry->routeid=5;
$entry->save();
}
Вот моя проблема: по какой-то причине, которую я не могу понять, приведенный выше код не работает, но если я извлеку код из if ($_POST)
, он работает нормально.
Что я делаю не так?
Редактировать:
Спасибо Дэмиену Пирси $this->input->post()
, это помогает, но когда я раскомментирую комментарии в коде, проблемы возвращаются.
Код теперь:
if($this->input->post())
{
$id = $this->input->post('id');
$oldRoute = $this->input->post('oldRoute');
$newRoute = $this->input->post('newRoute');
$entry= Customers::find_by_routeid($this->input->post('oldRoute'));
$entry->routeid=$this->input->post('newRoute');
$entry->save();
/*
if($oldRoute<$newRoute)
{
for ($i=$newRoute; $i>$oldRoute; $i--)
{
$element = Customers::find_by_routeid($i);
echo $element->routeid -= 1;
$element->save();
}
}
*/
}
Новые идентификаторы элементов ( $element->routeid -= 1;
) echo
указаны правильно, но у меня та же проблема, что и в начале, и ни одно из двух сохранений не работает.
Ответ №1:
Вы не предоставили много подробностей или отладочной информации, поэтому я просто предположу: попробуйте вместо этого использовать собственный обработчик post CI. Вы должны были var_dump()
отредактировать $_POST
массив, также посмотреть, isset() или нет, поскольку вы используете его в качестве условия
if($this->input->post())
{
//...
}
Обновить:
Поскольку мы говорим о переменных Post, не думайте, что они именно такие, как вы хотите. Имейте в виду, что это $this->input->post('field')
возвращает FALSE, когда индекс отсутствует; это вполне может привести к сбою вашего условия if. Предполагая, что для этого вам нужны числа, вы можете выполнить проверку, подобную
if($this->input->post('newRoute') AND is_numeric($this->input->post('newRoute'))
{
$newRoute = $this->input->post('newRoute');
}
else
{
// give it a default value, or raise an error, for example. If you need this
// variables, and need them to be numbers, you cannot go on in case these
// conditions are not met, right?
}
И то же самое для $oldRoute.
И да, хорошо, возможно, вы можете написать более чистый код, чем мой, но вы понимаете картину 😉
Комментарии:
1. Вы могли бы сказать это раньше… Пожалуйста, будьте более подробны, чтобы люди могли вам лучше помочь!
2. $ _POST наверняка не пуст… Я добавил echo after, и оно повторяется…
3. Извините, я думаю, это было очевидно, но дайте мне минуту, чтобы this-> input-> post, похоже, сработал
4. Приведенный выше код (раздел РЕДАКТИРОВАНИЯ), который я опубликовал при сохранении, работает нормально, но строки, обновляющие запись, должны располагаться после for …