修改
这是localhost的问题,我认为使用htaccess文件。虽然我无法在localhost中创建它,但脚本在Web主机上运行正常。
我想使用codeigniter中的ajax将表单数据存储到数据库中。问题是一切都很好,除了我收到500服务器内部错误。
我的控制器:
public function order()
{
$order = $this->main_model->order($_POST);
if($order)
{
return true;
}
else
{
return false;
}
}
我的模特:
function order($options = array())
{
$options = array(
'client_Name' => $this->input->post('oName'),
'client_Phone' => $this->input->post('oPhone')
);
$this->db->insert('md_orders', $options);
return $this->db->insert_id();
}
当然我正在使用stepsForm脚本,这是我的js代码:
var theForm = document.getElementById( 'theForm' );
new stepsForm( theForm, {
onSubmit : function( form ) {
var form_data = {
oName: $('#oName').val(),
oPhone: $('#oPhone').val(),
};
$.ajax({
url: "<?php echo base_url() . 'main/order/'; ?>",
type: 'POST',
data: form_data,
success: function(msg) {
alert(msg);
}
});
}
} );
这是HTML代码:
<form id="theForm" class="simform" autocomplete="off">
<ol class="questions" id="questions">
<li>
<span><label for="oName">Your name:</label></span>
<input class="finput" id="oName" name="oName" type="text"/>
</li>
<li>
<span><label for="oPhone">Your Phone Number:</label></span>
<input class="finput ltr" data-validate="number" id="oPhone" name="oPhone" type="text"/>
</li>
</ol>
</form>
我得到的错误是:
POST http://localhost/123/main/order/ 500 (Internal Server Error)
Failed to load resource: the server responded with a status of 500 (Internal Server Error)
并且数据库中没有存储任何内容。我做错了什么?!
答案 0 :(得分:0)
在您看来,请将以下代码放在您的脚本中,请...
one_field = $('#one_field').val();
second_field = $('#second_field').val();
$.ajax({
type:"post",
data:{one_field:one_field, second_field:second_field},
url :'<?=base_url("directory/controller_name/your_method_name")?>',
success: function(data)
{
alert("success");
}
});
现在将以下内容放在您的控制器中。
function your_method_name()
{
$your_data = array(
"table_field_1" => $this->input->post('one_field'),
"table_field_2" => $this->input->post('second_field')
);
$last_id = $this->your_model->insert_data_function($your_data);
if(isset($last_id)
{
//your code
}
else
{
//your code
}
}
在您的模型中,放置以下内容。
public function insert_data_function($your_data)
{
$this->db->insert("your_table",$your_data);
return $this->db->insert_id(); //will return last id
}
答案 1 :(得分:-1)
您应该尝试使用site_url()
而不是在JS中使用base_url()您的CodeIgniter网站会运行index.php文件。
base_url()函数将URL返回到您的基目录。
site_url()会将URL返回到index.php文件。
您的表单在尝试“http://localhost/123/main/order”时尝试访问“http://localhost/123/index.php/main/order”
希望这有帮助。
修改强>
您还应该查看表单助手。
https://ellislab.com/codeIgniter/user-guide/helpers/form_helper.html
答案 2 :(得分:-1)
尝试在将控制器输入到模型之前检查控制器中的输入,尽管它不是强制性的。在您的模型中,您只需要输入数组。所以你可以设置参数名称。 你的模型是这样的:
public function order($options) {
$data = array();
$data['client_Name'] = $options['oName'];
$data['client_Phone'] = $options['oPhone'];
$this->db->insert('md_orders', $data);
if($this->db->affected_rows() > 0) {
return $this->db->insert_id();
else {
return false;
}
}
您的控制器是这样的:
public function order() {
$order = $this->main_model->order($this->input->post());
if( $order !== false ) {
echo "Inserted!";
} else {
echo "Not inserted!";//These are your ajax success function msg parameter
}
}
另外,我无法在onSubmit属性的form
中看到function( form )
参数的逻辑。也许你可以删除它?