为什么我仍然在Codeigniter中收到500内部服务器错误?

时间:2014-08-01 08:27:53

标签: php ajax codeigniter

在尝试投票之前请先阅读此问题。这个问题有很多重复,不幸的是,没有一个能为我工作。

我正在使用 CodeIgniter_2.1.4 版本。

我有一个简单的注册表单,我需要通过Ajax请求将其数据插入到数据库中。如果表单中没有错误:

POST path/index.php/controller/method 500 (Internal Server Error)

我尝试过以下解决方案,但我仍然收到错误:

  1. 我已在config.php文件中启用了CSFR保护:$config['csrf_protection'] = TRUE;
  2. 我正在使用form_open()form_close()标记,因为CI文档说如果使用form_open(),它会自动在表单中插入隐藏的csrf字段。
  3. 的Javascript

    $("#sign-up").submit(function(e){
        e.preventDefault();                  
    
    
        alert($(this).serialize());
        $.ajax({
            method:"POST",
            data:$(this).serialize(),
            url:"<?php echo site_url('viewer/signup_process')?>",
            success:function(data){
                $("#update").html(data);
            }
        }) ;
    });
    

    PHP代码

    public function signup_process()
    {
        $this->form_validation->set_rules("firstname","Firstname","required");
        $this->form_validation->set_rules("lastname","Lastname","required");
        $this->form_validation->set_rules("username","Username","required|max-length[10]");
        $this->form_validation->set_rules("password","Password","required|min-length[5]");
        $this->form_validation->set_rules("telephone","Telephone","required");
        $this->form_validation->set_rules("email","email","required|valid_email");
        $this->form_validation->set_rules("terms","Terms & Conditions","callback_agree_to_terms");
    
        if(!$this->form_validation->run()){
            //There are errors
            $data["title"]="Errors";
            $data["errors"]=  validation_errors();            
            $this->load->view("public/errors",$data);
        } else {
            $viewer=array(
                "firstname"=>  $this->input->post("firstname"),
                "lastname"=>  $this->input->post("lastname"),
                "username"=>  $this->input->post("username"),
                "password"=> $this->encrypt->sha1($this->input->post("password")),
                "telephone"=>  $this->input->post("telephone"),
                "email"=>  $this->input->post("email")
            );
            $create_result=  $this->Viewer_model->create_viewer($viewer);
    
            if($create_result){
                $data["message"]="Registration successful..Please sing in";
                $this->load->view("public/success",$data);
            }
        }
    }
    

    这可能是什么原因?

3 个答案:

答案 0 :(得分:2)

尝试更改

method:"POST",

type:"POST",

答案 1 :(得分:1)

回答我自己的问题

我可以通过使用htaccess重写索引文件来解决问题。

步骤

1)创建一个.htaccess文件并将其保存在 root 目录中

这是.htaccess文件

RewriteEngine on
RewriteCond $1 !^(index\.php|assets|css|js|img|robots\.txt) 
RewriteRule ^(.*)$ /project_name/index.php/$1 [L]

注释 - 您的css,js,img文件夹可能有不同的名称。您可能有多个文件夹。相应地调整它。

2)转到application-&gt; config-&gt; config.php并生成

$config['index_page'] = ''; 

就是这样。

希望这将有助于未来的读者

答案 2 :(得分:0)

您是否已将表单验证模块包含在autoload文件中?

否则,您需要在函数的第一行执行此操作:

$this->load->library('form_validation');