Запрос к базе данных PHP — не работает с первого раза (CodeIgniter)

#php #mysql #codeigniter

#php #mysql #CodeIgniter

Вопрос:

Здесь кошмар, и я не могу понять, что не так. В принципе, у меня есть настройка codeigniter, которая выполняет пару запросов к базе данных, но по какой-то причине она, похоже, не работает в первый раз после обновления.

Итак, это то, что происходит в данный момент: я отправляю форму, и данные формы поступают в базу данных правильно, однако $property_id заканчивается пустым в функции createInitialTenancy(), а $ tenancy_id заканчивается пустым в функции insertBasicInfo() .

Если я затем снова отправлю форму (либо отправив без обновления, либо обновив), то оба эти значения будут заполнены.

Кто-нибудь может объяснить причину этого?

Контроллер:

 public function new($property_id) {
  // Check for a property ID. Redirect to dashboard if none present.
  if(!$property_id) {
    redirect(base_url());
  }

  // Check for the form having been submitted
  if ($this->input->post()) {

    // Strip form data for XSS
    $form_data =  $this->security->xss_clean($this->input->post());

    // Create the initial tenancy entry in the database
    $tenancy_data['property_id'] = $property_id;
    $tenancy_id = $this->tenancy_model->createInitialTenancy($tenancy_data);

    // Empty tenant array. We've dealt with this elsewhere
    unset($form_data['tenant']);

    // Insert the data to the tenancy.basic_info database
    $form_data['lead_tenant_id'] = $_SESSION["tenant_id"];
    $form_data['property_id'] = $property_id;
    $form_data['tenancy_id'] = $tenancy_id;

    $this->tenancy_model->insertBasicInfo($form_data);
  }

  // Security token required for the form
  $csrf = array(
    'name' => $this->security->get_csrf_token_name(),
    'hash' => $this->security->get_csrf_hash()
  );

  $this->load->view('header-signin');
  $this->load->view('tenant/tenancy/new', $csrf);
  $this->load->view('footer-signin');
}
  

Модель:

 class Tenancy_model extends CI_Model {

  function __construct() {
    $this->load->database();
    parent::__construct();
  }

  public function insertBasicInfo($form_data) {
    $this->db->insert('tenancy_basic_info', $form_data);
  }

  public function createInitialTenancy($data) {
    $this->db->insert('tenancy_tenancy', $data);
    return $this->db->insert_id();
  }

  public function getTenancyByPropertyID($property_id) {
    $this->db->select('id');
    $this->db->from('tenancy_tenancy');
    $this->db->where('property_id', $property_id);
    $tenancy = $this->db->get()->result();
    return $tenancy;
  }
} 
  

Таблица tenancy_tenancy:

 CREATE TABLE `tenancy_tenancy` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `property_id` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=59 DEFAULT CHARSET=utf8;
  

Таблица tenancy_basic_info:

 CREATE TABLE `tenancy_basic_info` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `tenancy_id` int(11) DEFAULT NULL,
  `lead_tenant_id` int(11) NOT NULL,
  `property_id` int(11) NOT NULL,
  `more-tenants` int(11) NOT NULL,
  `pets` int(11) NOT NULL,
  `pets_info` text,
  `cars` int(11) NOT NULL,
  `number_of_cars` int(11) NOT NULL,
  `information` text,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=43 DEFAULT CHARSET=utf8;
  

Комментарии:

1. Может быть или не быть проблемой, но new это ключевое слово PHP, и поэтому его не следует использовать в качестве имени функции. Документация

2. @DFriend не исправил это: (

3. Слишком много вопросов относительно того, чего вы пытаетесь достичь здесь … поэтому для начала я предлагаю вам сначала изучить формы Codeigniters и проверку формы в руководстве пользователя. т.е. Вы не выполняете никакой проверки.

4. @TimBrownlaw Я думаю, что я только что обнаружил, что это проблема Sequel Pro. Я думаю, что данные на самом деле там просто не отображаются по какой-то причине!

5. Итак, этот метод является действием вашей формы?