使用codeigniter中的ajax在mysql数据库中存储表单数据

时间:2015-02-23 16:26:15

标签: php jquery mysql ajax codeigniter

修改

这是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)

并且数据库中没有存储任何内容。我做错了什么?!

3 个答案:

答案 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 )参数的逻辑。也许你可以删除它?