Запрос CodeIgniter не вставляется в базу данных - PullRequest
2 голосов
/ 14 января 2011

Вот моя функция:

function create_member()
    {

        $new_member_insert_data = array(
            'first' => $this->input->post('first_name'),
            'last' => $this->input->post('last_name'),
            'email' => $this->input->post('email_address'),         
            'username' => $this->input->post('username'),
            'password' => $this->input->post('password')                        
        );

        $insert = $this->db->insert('members', $new_member_insert_data);
        return $insert;
    }

Моя таблица называется «члены», и я могу подключиться к своей базе данных, чтобы извлечь данные, которые я в нее ввожу вручную.Любые мысли о том, почему это не вставить мои данные?Все имена полей верны, а данные находятся в POST.Я повторил это, чтобы проверить обе эти вещи.Вот моя форма:

echo form_open('engineering-resources/login/create');

echo form_input('first_name', set_value('first_name', 'First Name'));
echo form_input('last_name', set_value('last_name', 'Last Name'));
echo form_input('email_address', set_value('email_address', 'Email Address'));
?>
</fieldset>

<fieldset>
<legend>Login Info</legend>
<?php
echo form_input('username', set_value('username', 'Username'));
echo form_input('password', set_value('password', 'Password'));
echo form_input('password2', 'Password Confirm');

echo form_submit('submit', 'Create Acccount');
?>

Существует маршрут для действия формы: $route['engineering-resources/login/create'] = "resources/login/create_member";

Вот мой контроллер:

function create_member()
    {
        $this->load->library('form_validation');
        echo 'hello';
        // field name, error message, validation rules
        $this->form_validation->set_rules('first_name', 'Name', 'trim|required');
        $this->form_validation->set_rules('last_name', 'Last Name', 'trim|required');
        $this->form_validation->set_rules('email_address', 'Email Address', 'trim|required|valid_email');
        $this->form_validation->set_rules('username', 'Username', 'trim|required|min_length[4]');
        $this->form_validation->set_rules('password', 'Password', 'trim|required|min_length[4]|max_length[32]');
        $this->form_validation->set_rules('password2', 'Password Confirmation', 'trim|required|matches[password]');


        if($this->form_validation->run() == FALSE)
        {
            $data['title'] = 'Please Resubmit Your Information';
            $data['main_content'] = 'resources/signup_form';
            $this->load->view('templates/main.php', $data);
        }

        else
        {           
            $this->load->model('login/membership_model');
            echo $this->db->last_query();

            if($query = $this->membership_model->create_member())
            {
                $data['title'] = 'User Area';
                $data['main_content'] = 'resources/logged_in_area';
                $this->load->view('templates/main', $data);
            }
            else
            {
                $this->load->view('resources/signup_form');         
            }
        }

    }

Ответы [ 3 ]

2 голосов
/ 14 января 2011

Вы можете включить профилирование с помощью следующей директивы:

$this->output->enable_profiler(TRUE);

Тогда вы сможете увидеть, выполнен ли ваш запрос и верен ли он.

0 голосов
/ 15 января 2011

Может быть, я сам собираюсь здесь кое-что узнать, но вы используете синтаксис, с которым я не знаком ни в одном из ваших if() утверждений, поэтому я собираюсь рассказать об этом, чтобы посмотреть, поможет ли это. Не стесняйтесь обучать меня, если я ошибаюсь.

Я предполагаю, что ваша первая create_member() функция находится в вашем membership_model, и что функция контроллера, которую вы демонстрируете, является той, к которой вы перенаправили: 'resources / login / create_member'.

В вашем контроллере вы используете:

if($query = $this->membership_model->create_member())

и я не вижу $query определенного где-либо, поэтому я ожидаю, что php будет сравнивать возвращенное логическое значение из функции create_member() с неопределенной переменной: $query. Может быть, это обычный способ присвоения переменной и одновременного запуска функции (с которой я не знаком), но для устранения неполадок пытались ли вы вызвать create_member() без этого «расширенного» синтаксиса?

$query = $this->membership_model->create_member();
if($query)
        {
            $data['title'] = 'User Area';
            $data['main_content'] = 'resources/logged_in_area';
            $this->load->view('templates/main', $data);
        }

Я также согласен с ifaour ... вы технически не пропускаете ничего для вставки в membership_model/create_member(), поэтому вы можете попытаться получить это в функции контроллера в соответствии с его примером. Я не уверен, что массив POST, который передается из формы в ваш контроллер, автоматически передается в модель.

Эти два шага могут вам помочь. Напомним: упростите ваш вызов на $this->membership_model->create_member($data); и поместите массив POST в массив ($data) вашего контроллера.

0 голосов
/ 14 января 2011

Хммм, попробуйте подготовить свой массив в контроллере:

$this->load->model('login/membership_model');
$new_member_insert_data = array(
    'first' => $this->input->post('first_name'),
    'last' => $this->input->post('last_name'),
    'email' => $this->input->post('email_address'),         
    'username' => $this->input->post('username'),
    'password' => $this->input->post('password')                        
);
if($query = $this->membership_model->create_member($new_member_insert_data))

И вашу модель:

function create_member($data_arr)
{
    $insert = $this->db->insert('members', $data_arr);
    return $insert;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...