сохранение активной записи php не работает в codeigniter

#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 …