【问题标题】:Getting Internal Server Error (500) - CodeIgniter获取内部服务器错误 (500) - CodeIgniter
【发布时间】:2018-07-31 09:43:32
【问题描述】:

在我的 CodeIgniter 项目中,我需要将数据插入到 db 表中,我有

内部服务器错误 (500)

使用 Ajax 将数据添加到数据库的问题。

我的 Ajax 代码如下,

$("#rsvp_form").validate({
    rules: {
        uname: {
            required: true,
            minlength: 8
        },
        uemail: "required",
        umessage: {
            required: true,
            maxlength: 100
        }
    },
    messages: {
        uname: {
            required: "Please enter your name",
            minlength: jQuery.validator.format("At least 8 characters required!")
        },
        uemail: "Please enter your email",
        umessage: {
            maxlength: jQuery.validator.format("Please enter no more than 100 characters!")
        },
    },
    // ajax request
    submitHandler: function (form) {

        var formData = {
            'user_name': $('input[name=uname]').val(),
            'user_email': $('input[name=uemail]').val(),
            'user_wish': $('input[name=umessage]').val()
        };

        // loader
        $(".loader").show();

        // ajax request
        $.ajax({
            type: "POST",
            url: "<?php echo base_url(); ?>index.php/Welcome/create_wish",
            data: formData,
            dataType: "json",
            success: function (data) {

                // if send data successfull
                if (data.status === 'success') {

                    $(".loader").hide();
                    $(form).fadeOut("slow");
                    setTimeout(function () {
                        $(".form-success").show("slow");
                    }, 300);

                    // if send data something wrong 
                } else if (data.status === 'error') {

                    $(".loader").hide();
                    $(form).fadeOut("slow");
                    setTimeout(function () {
                        $(".form-error").show("slow");
                    }, 300);
                }

            }
        });
        return false;
    }

});

我的Welcome控制器功能如下:,

public function create_wish() {
    $this->load->model("model_wishes");
    $data = array(
    'user_name' => $this->input->post('uname'),
    'user_email' => $this->input->post('uemail'),
    'user_wish' => $this->input->post('umessage')
    );
    $this->model_wishes->createWish($data);
}

model_wishes模特来了,

function createWish($data) {
    $this->db->insert("wishes", $data);
}

welcome_message查看是,

<form id="rsvp_form" action="">
<div class="row">
    <div class="form-group col-md-6">
        <label for="post-name">Name</label>
        <input autocomplete='name' type="text" class="form-control" id="uname" name="uname" required />
    </div>
    <div class="form-group col-md-6">
        <label for="post-email">Email</label>
        <input autocomplete='email' type="email" class="form-control" id="uemail" name="uemail" required/>
    </div>
</div>
<div class="row">
    <div class="form-group col-md-12 margin-b-2">
        <label for="post-message">Message</label>
        <textarea class="form-control" id="umessage" rows="5" name="umessage"></textarea>
    </div>
</div>
<div class="row">
    <div class="form-group col-md-12 text-left mb-0">
        <button id="btn-create" type="submit" class="button-medium btn btn-default fill-btn">Post Wish</button>
    </div>
</div>

当点击Post Wish 按钮得到XHR failed loading: POST 和错误

POST http://localhost/CodeIgniterProj/index.php/Welcome/create_wish 500 (Internal Server Error)

请告诉我内部服务器错误的真正原因,以及如何解决此问题。

【问题讨论】:

  • 如果您在开发环境中,请将index.php 文件中的ENVIRONMENT 常量更改为development 以启用错误。
  • 尝试在您的 ajax 中设置url: "&lt;?=site_url('Welcome/create_wish'); ?&gt;",并在您的create_wish() 方法中设置print_r($this-&gt;input-&gt;post()); 来检查您在帖子中得到的内容
  • 在您的 .htaccess 文件中添加 SetEnv CI_ENV development 以查看错误。
  • @pradeep 什么都没发生
  • 所以通过在create_wish ()方法中使用print_r($this-&gt;input-&gt;post());die;来调试为什么user_wish为空

标签: javascript php ajax codeigniter codeigniter-3


【解决方案1】:

您使用了错误的帖子输入,请检查下面的更新代码

public function create_wish() {
    $this->load->model("model_wishes");
    $data = array(
    'user_name' => $this->input->post('user_name'),
    'user_email' => $this->input->post('user_email'),
    'user_wish' => $this->input->post('user_wish')
    );
    $this->model_wishes->createWish($data);
}

【讨论】:

  • 怎么可能&lt;input autocomplete='name' type="text" class="form-control" id="uname" name="uname" required /&gt;
  • @ChyperX 因为您使用的是 ajax var formData = { 'user_name': $('input[name=uname]').val(), 'user_email': $('input[name= uemail]').val(), 'user_wish': $('input[name=umessage]').val() };
  • @ChyperX 在控制器功能中尝试 print_r($_POST)。
【解决方案2】:

希望对您有所帮助:

您的submitHandler 代码应该是这样的:

submitHandler: function (form) 
{
  var formData = $(form).serialize();
  $(".loader").show();
  console.log(formData);
  $.ajax({
    type: "POST",
    url: "<?=site_url('Welcome/create_wish'); ?>",
    data: formData,
    dataType: "json",
    success: function (data) {
      alert(data);
    }
  });
}

你的控制器create_wish应该是这样的:

public function create_wish() 
{
    $this->load->model("model_wishes");
    $user_name = $this->input->post('uname'));
    $user_email = $this->input->post('uemail');
    $user_wish = $this->input->post('umessage');

    $data = array(
      'user_name' => $user_name,
      'user_email' => $user_email,
      'user_wish' => $user_wish
    );
    $this->model_wishes->createWish($data);
    $response = array('status' => 'success');
    echo json_encode($response);
}

【讨论】:

    【解决方案3】:

    使用 site_url

    代替 base_url
    site_url('Welcome/create_wish')
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-12-03
      • 2018-02-22
      • 2012-05-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-14
      • 2014-08-21
      相关资源
      最近更新 更多