<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>

I skrypt w tym widoku:

$.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();
                    }
                });

W kontrolerze

    function user_action(){

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

Problem polega na tym, że $ this-> input-> post ('action') nie zwraca wartości wejściowej. Jeśli zmienię wejście typu w tekście, to $ this-> input-> post ('action') jest w porządku i zwraca wartość = Dodaj. Dlaczego to nie działa na input type = "submit"? Jak mogę uzyskać wartość mojego wkładu. Proszę pomóż.

0
ngLucas 2 kwiecień 2020, 12:39

3 odpowiedzi

Najlepsza odpowiedź

Typ danych wejściowych przesyłania dotyczy tylko przycisku przesyłania, który przesyła wszystkie wartości formularza i zwykle nie jest używany do samego wysyłania danych. Atrybut value jest używany jako etykieta przycisku.

Jeśli chcesz sprawdzić, czy do Twojego kontrolera wpłynęła prośba o wpis, możesz użyć czegoś takiego:

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');
    }
}

Lub jeśli używasz Codeigniter v4, możesz również użyć $this->request->isAJAX(). Nie jestem pewien, czy to było dostępne w wersji 3, czy nie.

AKTUALIZACJA

Jeśli chcesz sprawdzić, czy jest dodawany / edytowany, sugerowałbym dodanie ukrytego wejścia i zmianę tej wartości, jak poniżej:

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

Następnie możesz to sprawdzić w kontrolerze:

if ($this->input->post('method') == 'add')
{
    // Adding a record
} else {
    // Editing a record
}
1
Chris Mackie 2 kwiecień 2020, 11:28

Użyj ukrytego pola, aby przekazać wartość, a nie przycisku przesyłania

Możesz utworzyć wartość pola i zmienić wartość na podstawie ostatniego klikniętego przycisku

<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>

Zmień ukrytą wartość po kliknięciu przycisku

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

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

I uzyskaj wartość ze swojego kontrolera

$buttonvalue = $this->input->post('btn_type',true);
1
kirb 2 kwiecień 2020, 11:29

Bardzo dziękuję za pomoc. Teraz mam na widoku:

 <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>

I ustawiam wartość dodaj lub edytuj w skrypcie JS

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

W kontrolerze

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

To działa doskonale. Dzięki !!!

0
ngLucas 2 kwiecień 2020, 12:25