Codeigniter и AJAX MySQL Обработка ошибок - PullRequest
0 голосов
/ 29 января 2019

Я (новичок в) использую CI3 и создал простую форму, которая вставит одно значение (age) в таблицу базы данных MySQL (test).У меня нет внешнего интерфейса в форме, я экспериментирую с проверкой на стороне сервера.

Столбец age содержит следующие атрибуты в базе данных:

  • имя: возраст
  • тип данных: int
  • разрешить не ноль: нет
  • по умолчанию: нет по умолчанию

Всякий раз, когда я ввожу не числовое значение вФорма ввода age (например, «Джон»), форма успешно отправляется, но база данных сохраняет это значение как 0. Это ожидаемое поведение?

Кажется, я могу ввести не целое число в базу данных, хотя он настроен как тип данных int.

Я бы ожидалследующая ошибка, которая будет брошена;

/ * Ошибка SQL (1054): неизвестный столбец 'john' в 'предложении where' * /

Эта ошибка (как и ожидалось) появляется всякий раз, когда я пытаюсь вручнуювставить не int значение (через heidisql / phpmyadmin).

Итак, как я могу проверить эту ошибку в моем приложении и принять соответствующие меры?

Мой код указан ниже;

Модель

public function insert_form_data(){
    $data = array(
        'age'  => $this->input->post('age')
    );
    $result = $this->db->insert('test', $data);
    if ($this->db->affected_rows() > 0) {
        return TRUE;
    }
    else {
        return $this->db->error(); 
    }
}

Контроллер

public function insert_form_data(){
    $data = $this->Form_model->insert_form_data();
    echo json_encode($data);
}

Вид

<form name="myform" id="myform">
    <input name="age" type="text">
    <button type="submit" id="submit">Submit</button>
</form>
<p id="message"></p>


$(document).ready(function() {
    $('#submit').on('click', function(event) {
        event.preventDefault();
        $.ajax({
            url: "form/insert_form_data",
            method: "post",
            data: $("#myform").serialize(),
            dataType: 'json',
            success: function(response) {
                if (response == true) {
                    $('#message').text('Form submitted!');
                }
            },
            error: function(response) {}
        });
        return false;
    });
});

1 Ответ

0 голосов
/ 30 января 2019

Я не уверен, почему вы хотите зависеть от ошибок SQL, в то время как у вас есть все, что вам может понадобиться в библиотеке валидации codeigniter для проверки перед вставкой, например:

public function insert_form_data()
{
    $this->load->library('form_validation');
    $this->form_validation->set_rules('age', 'Age', 'required|integer');
    if ($this->form_validation->run() == FALSE)
    {
        $data['validation'] = validation_errors();
    }
    else
    {
        $data['validation'] = "Success";
    }
    $data["result"] = $this->Form_model->insert_form_data();
    echo json_encode($data);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...