1

I have a JavaScript that runs a POST method once my datepicker has been out of focus (I also tried this on a regular submit button) and runs the script rent-fetch-pick-up-point.php. The PHP runs, however it doesn't get past the if-statement because my it's not getting the POST data. The datepicker is tied to a input field time-period-from

datepickerTo.blur(function(){
  if (selectedDateFrom.length > 0) {

    datepickerFrom.delay(500).queue(function(){

      $.ajax({
        type: "POST",
        url: "include/rent-fetch-pick-up-point.php",
        data: {action: selectedDateFrom},
        success: function(data) {
          $("#pick-up-point-container").html(data);
        }
      });
    });
  }
});

Here is the PHP code:

if (isset($_POST['time-period-from'])) {
  require '../include/connection.php';

  $dateFrom = $_POST['time-period-from'];
  $sql = "SELECT * FROM order WHERE $dateFrom BETWEEN date_from AND date_to";
  $result = mysqli_query($connection, $sql);
  $numRows = mysqli_num_rows($result);

  echo $sql; // For testing purposes
}

And here's the HTML:

  <input type="text" name="time-period-from" id="datepicker-from" class="datepicker"></p>

I also tried using $.post() instead of $.ajax(), but I ran into the same issue:

$.post("include/rent-fetch-pick-up-point.php", {name: selectedDateTo}, function(data) {

  $("#pick-up-point-container").text(data)

});
5
  • You do realize you're sending the data in action and not in time-period-from? Commented Apr 18, 2016 at 18:00
  • 2
    Your posting action, not time-period-from... try: $_POST['action'] Commented Apr 18, 2016 at 18:01
  • 2
    Your code is vulnerable to SQL-Injections. Commented Apr 18, 2016 at 18:01
  • 1
    Little Bobby says your script is at risk for SQL Injection Attacks. Learn about prepared statements for MySQLi. Even escaping the string is not safe! Commented Apr 18, 2016 at 18:02
  • @CharlotteDunois oh, that's what's wrong! I didn't quite understand how or where I was supposed to get the POST data from, but things got a little clearer now. Thanks so much. Commented Apr 18, 2016 at 18:08

3 Answers 3

2

The keys of $_POST come from the keys of the object you pass to the data: option, not the names of the form fields where the values originally came from. Since you used:

data: { action: selectedDateFrom }

the value will be in $_POST['action'], not $_POST['time-period-from']. So you need to use:

if (isset($_POST['action']))

and:

$dateFrom = $_POST['action'];

or you could change the Javascript to:

data: { "time-period-from": selectedDateFrom }
Sign up to request clarification or add additional context in comments.

1 Comment

I got it working now. Thanks for explaining it thoroughly.
0

I think your selectedDateFrom variable is array that cause your post info can't you get properly .

data: {action: $('#selectedDateFrom').serializeArray()}

then you get your form data properly

5 Comments

Why do you think it's an array?
you use selectedDateFrom.length that cause i think it is array or string
My guess is it's a string, probably $("#selectedDateFrom").val().
I'm not sure why you would use .serializeArray() on a single element.
$("#datepicker-from").val() this process you can easily get this data
0

You aren't grabbing the right variable on the PHP side:

if (isset($_POST['action'])) {
  require '../include/connection.php';

  $dateFrom = $_POST['action'];
  $sql = "SELECT * FROM order WHERE $dateFrom BETWEEN date_from AND date_to";
  $result = mysqli_query($connection, $sql);
  $numRows = mysqli_num_rows($result);
  echo $sql; // For testing purposes
}

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.