Codeigniter $this->input->post() 对于提交输入是空的

Codeigniter $this->input->post() is empty for submit input

<form method="post" id="user_form">
        <div class="modal-content">
            <div class="modal-header">
                <button type="button" class="close" data-dismiss="modal">&times;</button>
                <h4 class="modal-title">Add User</h4>
            </div>
            <div class="modal-body">
                <label>Enter First Name</label>
                <input type="text" name="first_name" id="first_name" class="form-control" />
                <br />
                <label>Enter Last Name</label>
                <input type="text" name="last_name" id="last_name" class="form-control" />
                <br />
                <label>Select User Image</label>
                <input type="file" name="user_image" id="user_image" />
                <span id="user_uploaded_image"></span>
            </div>
            <div class="modal-footer">
                <input type="hidden" name="user_id" id="user_id" />
                <input type="submit" name="action" id="action" class="btn btn-success" value="Add" />
                <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
            </div>
        </div>
    </form>

此视图中的脚本:

$.ajax({
                    url:"<?php echo base_url() . 'raportowanie/user_action'?>",
                    method:'POST',
                    data:new FormData(this),
                    contentType:false,
                    processData:false,
                    success:function(data)
                    {
                        alert(data);
                        $('#user_form')[0].reset();
                        $('#userModal').modal('hide');
                        dataTable.ajax.reload();
                    }
                });

在控制器中

    function user_action(){

    echo 'Action is: '.$this->input->post('action');
}

问题是 $this->input->post('action') 没有 return 值输入。如果我更改文本上的输入类型,这个 $this->input->post('action') 是可以的并且 return value = Add。为什么这不适用于输入 type="submit" ?我怎样才能得到我输入的值。请帮忙。

提交输入类型仅用于提交所有表单值的提交按钮,通常不用于发送数据本身。 value 属性用作按钮的标签。

如果你想查看是否有 post 请求到你的控制器,你可以使用这样的东西:

function user_action()
{
    if ($this->input->server('REQUEST_METHOD') == 'POST')
    {
        // Your other inputs here
        echo 'First Name is: '.$this->input->post('first_name');
        echo 'Last Name is: '.$this->input->post('last_name');
        echo 'User Image is: '.$this->input->post('user_image');
        echo 'User ID is: '.$this->input->post('user_id');
    }
}

或者如果使用 Codeigniter v4,您也可以使用 $this->request->isAJAX()。我不确定这是否在 v3 中可用。

更新

如果您想检查它是否 add/edit 我建议添加一个隐藏输入并更改该值,如下所示:

<input type="hidden" name="method" value="add">

然后你可以在controller中查看:

if ($this->input->post('method') == 'add')
{
    // Adding a record
} else {
    // Editing a record
}

使用隐藏字段传递值,而不是提交按钮

您可以创建一个字段值,并根据您单击的最后一个按钮更改该值

<form>
    <input type = "hidden" id = "btn_type" name = "btn_type">
    <button type="submit" class="btn btn-primary" id = "btn_add">Add</button>
    <button type="submit" class="btn btn-primary" id = "btn_edit">Edit</button>
</form>

单击按钮时更改隐藏值

$(document).on("click", "#btn_add", function(event){
    $('#btn_type').val('Add');
});

$(document).on("click", "#btn_edit", function(event){
    $('#btn_type').val('Edit');
});

并在您的控制器中获取值

$buttonvalue = $this->input->post('btn_type',true);

非常感谢您的帮助。现在我看到了:

 <input type="hidden" name="user_id" id="user_id" />
 <input type="hidden" name="method" id="method" value="Add">
 <input type="submit" name="action" id="action" class="btn btn-success" value="Add" />
 <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>

我在 JS 脚本中设置值添加或编辑

        $('#action').val("Add"); \ or Edit
        $('#method').val("Add"); \ or Edit

在控制器中

$this->input->post('method')

这非常有效。谢谢!!!