Roxx
Roxx

Reputation: 3986

php can't get multiple ajax submit data

I have a form and it have 2 submit button.

<form name="posting" id="posting" method="post" action="posting_bk.php" role="form">
<input type="text" name="title" id="title" class="form-control" required="required">
....some form fields...
    <input class="btn btn-home" type="submit" name="publish" id="publish" alt="Publish" value="Preview and Post" />
    <input class="btn btn-home" type="submit" name="save" id="save" onclick="return confirm('Are you sure you want to Submit.')" alt="Save" value="Save as Draft" /></center>
</form>

i am using ajax to send/receive data.

 $('#posting input[type="submit"]').on("click", function(e) {
   e.preventDefault;
   var btn = $('#publish');
   var el = $(this).attr('id');
   $.ajax({
     type: 'post',
     url: $('form#posting').attr('action'),
     cache: false,
     dataType: 'json',
     data: {
       data: $('form#posting').serialize(),
       action: el
     },
     beforeSend: function() {
       $("#validation-errors").hide().empty();
     },
     success: function(data) {
       if (data.success == false) {
         var arr = data.errors;
         $.each(arr, function(index, value) {
           if (value.length != 0) {
             $("#validation-errors").append('<div class="alert alert-danger"><strong>' + value + '</strong><div>');


           }
         });
         $("#validation-errors").show();
         btn.button('reset');
       } else {
         $("#success").html('<div class="alert alert-success">Basic details saved successfully. <br> If you want to edit then please goto <a href="edit.php">Edit</a>. <div>');
         $('#title').val('');

       }
     },
     error: function(xhr, textStatus, thrownError) {
       alert('Something went to wrong.Please Try again later...');

       btn.button('reset');
     }
   });
   return false;
 });

this is my php file. posting_bk.php

if ($_POST['action'] == 'publish') {
         if($title == 'test'){
         array_push($res['errors'], 'data received  by php.');
    }else{
             array_push($res['errors'], 'No data received by php.');

    }
    $res['success'] = true;
    echo json_encode($res);
        }
        elseif ($_POST['action'] == 'save') {
            array_push($res['errors'], 'Save button clicked.');
    $res['success'] = true;
    echo json_encode($res);
    }

All the time if i click on publish button i am getting

No data recived by php

When I check in firebug it is showing data under post. Like this

action publish
data title=test&

I am not sure what am i doing wrong here. Please advise.

Upvotes: 0

Views: 40

Answers (1)

Barmar
Barmar

Reputation: 781761

Change the AJAX call to use:

data: $('form#posting').serialize() + '&action=' + el,\

Then access the parameter using

$title = $_POST['title'];

The way you're doing it, the form data is being nested a level down in the POST data, so you would have had to do:

$data = parse_str($_POST['data']);
$title = $data['title'];

Upvotes: 1

Related Questions