DB 삽입을 위해 CodeIgniter에 양식 (양식이 jQuery를 통해 추가 된 동적 양식)을 제출하려고합니다. 그것의 부분은 작동하고 다른 부분은 작동하지 않습니다. 여기 jQuery AJAX 및 CodeIgniter에서 500 내부 서버 오류 발생
는 jQuery의 :
function submitForm() {
$.ajax({
type: 'POST',
url: '/raffle/save/',
data: $('#raffle').serialize(),
success: function (response) {
alert(response);
},
error: function() {
alert('Failed'); // This is what I get unless I comment out the entry insert
}
});
}
CI를 컨트롤러 :
class Raffle extends CI_Controller {
public function __construct() {
parent::__construct();
$this->load->model('raffle_model');
$this->load->library('form_validation');
}
public function index() {
$data['title'] = 'Create a Raffle';
$this->load->view('header', $data);
$this->load->view('raffles/create_view', $data);
$this->load->view('raffles/bottombar_view', $data);
$this->load->view('footer', $data);
}
public function save() {
foreach($_POST as $k => $v) {
if($k == 'entrant' || $k == 'tickets') {
foreach ($v as $i => $vector) {
$this->form_validation->set_rules('entrant[' . $i . ']', 'Entrant name', 'trim|required|min_length[1]|max_length[100]|xss_clean');
$this->form_validation->set_rules('tickets[' . $i . ']', 'Number of tickets', 'trim|required|max_length[2]|is_natural_no_zero|xss_clean');
}
} else {
$this->form_validation->set_rules('raffle-name', 'Raffle name', 'trim|required|min_length[4]|max_length[100]|xss_clean');
$this->form_validation->set_rules('winners', 'Number of winners', 'trim|required|max_length[2]|is_natural_no_zero|xss_clean');
}
}
if($this->form_validation->run() == FALSE) {
echo 'Validation failure!';
} else {
if($this->raffle_model->add_raffle()) { // It does pass validation and goes to the model
echo 'Data added successfully!';
}
}
}
}
그리고 CI 모델 :
class Raffle_model extends CI_Model {
public function __construct() {
parent::__construct();
}
public function add_raffle() {
// This works
$meta = array(
'user_id' => $this->session->userdata('user_id'),
'name' => $this->input->post('raffle-name'),
'winners' => $this->input->post('winners'),
'created_ip' => $_SERVER['REMOTE_ADDR']
);
// This works and is a multidimensional array for insert_batch()
$entrants = array(
array(
'date' => date(DATE_ATOM),
'raffle_id' => '1'
)
);
foreach($_POST['entrant'] as $name => $n) {
array_push($entrants,
array(
'name' => $n,
'tickets' => $_POST['tickets'][$name]
)
);
}
$this->db->insert('raffle', $meta);
$this->db->insert_batch('entry', $entrants); // This one returns error 500
return true;
}
}
여기에 문제가 있습니다 : 양식을 제출하면 meta
부분이 raffle
테이블에 저장되지만 entrants
부분은 entry
테이블에 저장되지 않습니다. 간단한 더미 배열 (샘플 데이터, 포스트 데이터, 루프 없음)을 사용하여 작동하는지 확인하려고 시도했지만 여전히 그렇지 않습니다. 콘솔 로그는 POST http://rafflegrab.dev/raffle/save/ 500 (Internal Server Error)
입니다.
CSRF는 CI 구성에서 해제되어 있습니다.
다음과 같이 테이블이 설정:
- 테이블 이름 출품
- 이노
- ID - BIGINT (12) - UNSIGNED - NOT_NULL - AUTO_INCREMENT - PRIMARY
- USER_ID - INT (10) - UNSIGNED
- 이름 - VARCHAR (100)
- 티켓 - SMALLINT (5) - UNSIGNED
- 날짜 - 날짜
- raffle_id - INT (10) - UNSIGNED는
감사합니다! PHP.ini는'error_reporting = E_ALL'과'display_errors = On'으로 설정됩니다. 오류 로그 파일이 저장되어 있고 오류가 없습니다 (이전에 여러 개의 오래된 파일을 삭제 했으므로 작동합니다). 내가 수집 한 것으로부터 CI가 오류를 반환하면 CI는 500 오류를 반환합니다. 문제는 의심 스럽지만 이유는 확실하지 않습니다. POST 데이터가 없으며'insert_batch'를'insert'로 변경하는 insert 문에 대해 더미 배열을 만들려고했는데 그 결과는 같습니다. – Clowerweb
CI의 데이터베이스 설정 파일에서 디버그가 'True'로 설정되어 있는지 확인하십시오. (사실, 제 설정은'(ENVIRONMENT == 'Development')') 그러나 요점은 – Basic
입니다. – Clowerweb