2016-04-18 5 views
1

У меня есть JavaScript, который запускает метод POST, когда мой датпикер был не в фокусе (я также пробовал это на обычной кнопке отправки) и запускает скрипт rent-fetch-pick-up-point.php. PHP работает, однако он не проходит мимо оператора if, потому что он не получает данные POST. DatePicker привязан к полю ввода 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); 
     } 
     }); 
    }); 
    } 
}); 

Вот PHP код:

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 
} 

А вот HTML:

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

Я также попытался с помощью $ .post() вместо $ .ajax(), но я столкнулся с той же проблемой:

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

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

}); 
+0

Вы понимаете, вы отправляете данные в 'action' и не в «период времени-от»? –

+2

Ваше сообщение 'action', а не' time-period-from' ... try: '$ _POST ['action']' –

+2

Ваш код уязвим для [SQL-инъекций] (http://stackoverflow.com/questions/60174 /, как-могу-я-предотвратить-SQL-инъекции-в-РНР). –

ответ

2

Ключи $_POST приходят из ключей объекта, перейдите к параметру data:, а не к именам полей формы, из которых первоначально были получены значения. Так как вы использовали:

data: { action: selectedDateFrom } 

значение будет в $_POST['action'], не $_POST['time-period-from']. Таким образом, вы должны использовать:

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

и:

$dateFrom = $_POST['action']; 

или вы могли бы изменить Javascript для:

data: { "time-period-from": selectedDateFrom } 
+0

Я получил его сейчас.Спасибо, что объяснили это полностью. – robert

0

Я думаю, что ваша выбранная переменнаяDateFrom - это массив, который не позволяет получить информацию о вашем сообщении.

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

тогда вы получите ваши данные формы правильно

+0

Почему вы думаете, что это массив? – Barmar

+0

вы используете selectedDateFrom.length, поэтому я думаю, что это массив или строка –

+0

. Я предполагаю, что это строка, возможно, '$ (" # selectedDateFrom "). Val()'. – Barmar

0

Вы не хватают правильную переменную на стороне PHP:

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 
} 
Смежные вопросы