Что мешает вставить данные в CI? - PullRequest
1 голос
/ 16 мая 2019

Я установил инфраструктуру CI с подключением к базе данных, включил ее автозагрузку и создал форму, но в базу данных ничего не вставлено!

Я пытался использовать объекты (классы) и разные способы передачи информации в массиве

if (isset($_POST['register-submit'])) {

$this->load->model('Registermodel');
$this->load->library('form_validation');
$this->form_validation->set_rules('register-username', 'Username', 'required');
$this->form_validation->set_rules('register-password', 'Password', 'required|min_length[6]');
$this->form_validation->set_rules('register-password-repeat', 'confirm passphrase', 'required|min_length[6]|matches[register-password]');
$this->form_validation->set_rules('register-pin', 'pin', 'required|regex_match[/^[0-9]{6}$/]');

//If form validation was successful
if ($this->form_validation->run() == TRUE) {

  echo 'successfully registered!';

  //Add user to database
  $data = array(
    'ci_useruniqid'=> $_POST['register-uniqid'],
    'ci_userdate'=> $_POST['register-date'],
    'ci_useruid'=>  $_POST['register-username'],
    'ci_userpwd'=>  password_hash($_POST['register-password'], PASSWORD_DEFAULT),
    'ci_usermnemonic'=> $_POST['register-mnemonic'],
    'ci_usercurrentaddress'=> $_POST['register-address'],
    'ci_useraccount'=>  $_POST['register-account'],
    'ci_useraccountbalance'=> $_POST['register-account-balance'],
    'ci_userpin'=>  $_POST['register-pin'],
    'ci_userstatus'=> $_POST['register-status'],
    'ci_usertype'=> $_POST['register-type'],
    'ci_userinfo'=> $_POST['register-info'],
    'ci_userpgp'=>  $_POST['register-pgp'],
    'ci_usercurrency'=> $_POST['register-currency']
  );
  $this->RegisterModel->adduser($data);

  redirect("AuthController/loginview", "refresh");
}

Я ожидаю, что данные (как показано выше) будут вставлены в БД. Мой реальный результат - это не ответ, даже что-то столь же простое, как вывод чего-либо в выражении if.

Структура моей таблицы:

ci_userid   int(11)
ci_useruniqid   
ci_userdate date
ci_useruid  
ci_userpwd  
ci_usermnemonic 
ci_usercurrentaddress   
ci_useraccount  
ci_useraccountbalance   decimal(12,8)
ci_userpin  
ci_userstatus   
ci_usertype 
ci_userinfo 
ci_userpgp  
ci_usercurrency

Остальные текстовые, вот моя adduser модель:

  public function adduser($data) {



$insert = $this->db->insert('users', $data);

  }

1 Ответ

0 голосов
/ 17 мая 2019

Поскольку это было слишком долго для комментария, я представляю вам мой квази-ответ, который поможет вам отладить.

echo 'hello world <br><pre>';
        print_r($_POST);

        if (isset($_POST['register-submit'])) {

            $this->load->model('Registermodel');
            $this->load->library('form_validation');
            $this->form_validation->set_rules('register-username', 'Username', 'required');
            $this->form_validation->set_rules('register-password', 'Password', 'required|min_length[6]');
            $this->form_validation->set_rules('register-password-repeat', 'confirm passphrase', 'required|min_length[6]|matches[register-password]');
            $this->form_validation->set_rules('register-pin', 'pin', 'required|regex_match[/^[0-9]{6}$/]');

//If form validation was successful
            if ($this->form_validation->run() == TRUE) {

                echo 'successfully registered!';

//Add user to database
                $data = array(
                    'ci_useruniqid' => $_POST['register-uniqid'],
                    'ci_userdate' => $_POST['register-date'],
                    'ci_useruid' => $_POST['register-username'],
                    'ci_userpwd' => password_hash($_POST['register-password'], PASSWORD_DEFAULT),
                    'ci_usermnemonic' => $_POST['register-mnemonic'],
                    'ci_usercurrentaddress' => $_POST['register-address'],
                    'ci_useraccount' => $_POST['register-account'],
                    'ci_useraccountbalance' => $_POST['register-account-balance'],
                    'ci_userpin' => $_POST['register-pin'],
                    'ci_userstatus' => $_POST['register-status'],
                    'ci_usertype' => $_POST['register-type'],
                    'ci_userinfo' => $_POST['register-info'],
                    'ci_userpgp' => $_POST['register-pgp'],
                    'ci_usercurrency' => $_POST['register-currency']
                );
                $this->RegisterModel->adduser($data);
                echo 'success';
                //redirect("AuthController/loginview", "refresh");
            } else {
                echo validation_errors();
            }
        } else {
            echo 'register-submit... well... does not exist';
        }

Обратите внимание, используйте $this->input->post('somename'); для всех ваших $_POST вещей. например предположим, что register-uniqid не существует (проверка формы не поймает его, потому что это не требуется), вы получите неопределенную ошибку индекса; таким образом, вам придется сделать isset($_POST['register-uniqid']) ? $_POST['register-uniqid'] : null, тогда как $this->input->post() сделает эту логику за вас.

Теперь, даже если вы сделаете это исправление, если register-uniqid является абсолютно критическим (не может быть нулевым), убедитесь, что проверка формы покрывает его обязательным. Даже если у вас есть некоторые скрытые поля, это не означает, что пользователь не может удалить их, если он хочет, и опубликовать нулевое значение в этом столбце БД. Я бы предложил полностью скрыть скрытые поля и кодировать любой не связанный с пользователем вход в этот контроллер или модель.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...