Codeigniter не добавляет пользователя в базу данных

0

Я попытался добавить пользователя в мою базу данных только с first_name, last_name, username, email и password и он работает.

Однако, когда я пытаюсь добавить пользователя с другими значениями, такими как $IP и прочее, это не сработает. Это просто говорит

"Ошибка базы данных Произошла"

Мой код в model_user.php

public function insert_user() {

    $first_name = $this->input->post('first_name');
    $last_name = $this->input->post('last_name');
    $username = $this->input->post('username');
    $email = $this->input->post('email');
    $password = $this->input->post('password');
    $IP = "2";
    $total_entry = 1;
    $average_entry = 1;
    $date_of_registration = date("Y-m-d H:i:s");
    $lastactive = date("Y-m-d H:i:s");
    $user_level = 2;
    $account_state = "Active";

//insert data into database. SQL Injection bypass
     $sql = "INSERT INTO users (first_name, last_name, username, email, password, IP, total_entry, average_entry, date_of_registration, lastactive, user_level, account_state )
    VALUES (" . $this->db->escape($first_name) . ",
             " . $this->db->escape($last_name) . ",
             " . $this->db->escape($username) . ",
             '" . $email . "',
             '" . $password . "'
             '" . $IP . "'
             '" . $total_entry . "'
             '" . $average_entry . "'
             '" . $date_of_registration . "'
             '" . $lastactive . "'
             '" . $user_level . "'
             '" . $account_state . "')"; 



$result = $this->db->query($sql);

Приведенный выше код не работает вообще. Однако, когда я прокомментирую несколько вещей, это работает. Этот код работает после комментирования нескольких вещей:

//insert data into database. SQL Injection bypass
     $sql = "INSERT INTO users (first_name, last_name, username, email, password)
    VALUES (" . $this->db->escape($first_name) . ",
             " . $this->db->escape($last_name) . ",
             " . $this->db->escape($username) . ",
             '" . $email . "',
             '" . $password . "')"; 

        /*   '" . $IP . "'
             '" . $total_entry . "'
             '" . $average_entry . "'
             '" . $date_of_registration . "'
             '" . $lastactive . "'
             '" . $user_level . "'
             '" . $account_state . "')";  */

С помощью приведенного выше кода пользователь успешно зарегистрирован. Я не знаю, что я делаю неправильно.

  • 3
    Некоторые запятые отсутствуют после значений.
  • 0
    в вашей базе данных, как определяется IP? какой тип? TEXT , VARCHAR ...?
Теги:
database
codeigniter

2 ответа

1

Эта ошибка может возникнуть из-за отсутствия запятой после атрибутов "пароль", "IP", "total_entry" и т.д. Это объясняет, почему код работает, когда вы комментируете эти атрибуты.

1

Почему вы не используете активную запись? Вы резко уменьшите риск ошибки.

$data = array(
      'first_name' => $first_name ,
      'last_name' => $last_name ,
      'username' => $username,
      'email' => $email,
      'password' => $password,
      'IP' => $IP,
      'total_entry' => $total_entry,
      'average_entry' => $average_entry,
      'date_of_registration' => $date_of_registration,
      'lastactive' => $lastactive,
      'user_level' => $user_level,
      'account_state' => $account_state
);
 $this->db->insert('tablename', $data);

С другой стороны, вы должны отделить вызовы базы данных в моделях и процесс после отправки

контроллер:

$data = array(
      'first_name' => $this->input->post('first_name'),
        /*other fields here */
);

$this->my_model->insert_user($data);

Модель:

function insert_user($data) 
{
     $this->db->insert("table", $data);
}

Подробнее здесь: http://www.codeigniter.com/user_guide/database/active_record.html#insert

  • 1
    @TaylorSwift Я согласен с AdrienXL. Это огромное преимущество того, почему мы используем фреймворки, такие как Codeigniter. Вы должны использовать это.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню