John Beasley
John Beasley

Reputation: 3075

AJAX POST group of form variables to PHP

I am trying to send a group of form parameters over to a PHP script for processing.

I've previously done something like this using $.post, but now I'm trying to get it done strictly by using $.ajax.

Here is the jQuery click event that is supposed to send all of the variables to the PHP script:

$('.searchSubmit').on('click', function()
{
  var searchCriteria = {
      import_bill: $('#import_bill').val(), 
      import_ramp: $('#import_ramp').val(), 
      import_delivery: $('#import_delivery').val(), 
      // few more form parameters
    };

  $.ajax({
    url: 'api/railmbs.php', // process script
    type: 'POST',
    data: searchCriteria, // parameter group above
    dataType: 'html' // had this set to json, but only got fail 
    success: function(data, textStatus, jqXHR)
    {
      console.log(data);
    },
    error: function(jqHHR, textStatus, errorThrown)
    {
      console.log('fail');
    }
  });
});

Here is the PHP script, called railmbs.php:

<?php
  if(isset($_POST['searchCriteria']))
  {
    $value = $_POST['searchCriteria'];
    $_SESSION['where'] = "";

    $import_bill = mysqli_real_escape_string($dbc, trim($value['import_bill']));
    $import_ramp = mysqli_real_escape_string($dbc, trim($value['import_ramp']));
    $import_delivery = mysqli_real_escape_string($dbc, trim($value['import_delivery']));

    echo $import_bill; // just trying to echo anything at this point
  }
?>

Not sure what I am doing wrong. If I echo hello before the IF above, the console will output accordingly. But I cannot seem to get anything to echo from inside the IF.

Does anyone see my error?

Upvotes: 0

Views: 139

Answers (3)

Jesse Schokker
Jesse Schokker

Reputation: 896

You are not setting the "searchCriteria" variable.

Change this:

$('.searchSubmit').on('click', function()
{
  var searchCriteria = {
      import_bill: $('#import_bill').val(), 
      import_ramp: $('#import_ramp').val(), 
      import_delivery: $('#import_delivery').val(), 
      // few more form parameters
    };

  $.ajax({
    url: 'api/railmbs.php', // process script
    type: 'POST',
    data: searchCriteria, // parameter group above
    dataType: 'html' // had this set to json, but only got fail 
    success: function(data, textStatus, jqXHR)
    {
      console.log(data);
    },
    error: function(jqHHR, textStatus, errorThrown)
    {
      console.log('fail');
    }
  });
});

to:

$('.searchSubmit').on('click', function()
{
    var data = {

    searchCriteria: {

      import_bill: $('#import_bill').val(), 
      import_ramp: $('#import_ramp').val(), 
      import_delivery: $('#import_delivery').val(), 
      // few more form parameters

     } 

    };

  $.ajax({
    url: 'api/railmbs.php', // process script
    type: 'POST',
    data: data, // parameter group above
    dataType: 'html' // had this set to json, but only got fail 
    success: function(data, textStatus, jqXHR)
    {
      console.log(data);
    },
    error: function(jqHHR, textStatus, errorThrown)
    {
      console.log('fail');
    }
  });

Upvotes: 1

Maxim Titovich
Maxim Titovich

Reputation: 71

First of all. Why not to use $("form").serialize()? It would be much cleaner. Secondary, you transfer data in root object, so to get you values, check $_POST array. Instead of $value = $_POST['searchCriteria'] use $value = $_POST;. This PHP code should work:

<?php
  if(isset($_POST))
  {
    $_SESSION['where'] = "";

    $import_bill = mysqli_real_escape_string($dbc, trim($_POST['import_bill']));
    $import_ramp = mysqli_real_escape_string($dbc, trim($_POST['import_ramp']));
    $import_delivery = mysqli_real_escape_string($dbc, trim($_POST['import_delivery']));

    echo $import_bill; // just trying to echo anything at this point
  }
?>

Or modify your js to send data in searchCriteria object, like this:

  var searchCriteria = {
searchCriteria: {
      import_bill: $('#import_bill').val(), 
      import_ramp: $('#import_ramp').val(), 
      import_delivery: $('#import_delivery').val(), 
      // few more form parameters
    }};

Upvotes: 1

D B
D B

Reputation: 532

You should check if you actually send post data using your browser developer tools or typing var_dump($_POST); at the beginning of your PHP script.

As far as i can see, you never actually set searchCriteria as post variable.

Currently your $_POST variable should contain the field import_bill, import_ramp and so on. Either change your if statement or your JavaScript object to {searchCriteria: {/*Your data here*/}.

Upvotes: 0

Related Questions