2016-04-18 12 views
1

Ich habe ein JavaScript, das eine POST-Methode startet, sobald mein Datepicker nicht im Fokus war (ich habe das auch auf einer regulären Absenden-Schaltfläche versucht) und führt das Skript rent-fetch-pick-up-point.php. Der PHP läuft, aber er kommt nicht über die if-Anweisung hinaus, weil er die POST-Daten nicht bekommt. Der Datepicker ist mit einem Eingabefeld gebunden 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); 
     } 
     }); 
    }); 
    } 
}); 

Hier ist der 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 
} 

Und hier ist der HTML:

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

Ich habe auch versucht .post $() verwenden anstelle von $ .ajax(), aber ich lief in das gleiche Problem:

+0

Sie erkennen, sind die Daten in 'action' Senden und nicht in der Zeitperiode von? –

+2

Ihr Beitrag 'action', nicht' time-period-from' ... versuchen: '$ _POST ['action']' –

+2

Ihr Code ist anfällig für [SQL-Injektionen] (http://stackoverflow.com/questions/60174/how-kann-ich-verhindern-sql-injection-in-php). –

Antwort

2

Die Schlüssel $_POST von den Tasten des Objekts kommen Sie Übergeben Sie die Option data:, nicht die Namen der Formularfelder, aus denen die Werte stammen. Da Sie verwendet:

data: { action: selectedDateFrom } 

wird der Wert in $_POST['action'], nicht $_POST['time-period-from']. So müssen Sie verwenden:

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

und:

$dateFrom = $_POST['action']; 

oder könnten Sie die Javascript ändern:

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

Ich habe es jetzt funktioniert.Danke für die ausführliche Erläuterung. – robert

0

Ich denke, Ihre SelectedDateFrom-Variable ist Array, die Ursache Ihrer Post-Informationen können Sie nicht richtig bekommen.

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

dann erhalten Sie Ihre Formulardaten richtig

+0

Warum denken Sie, dass es ein Array ist? – Barmar

+0

verwenden Sie selectedDateFrom.length, die ich denke, es ist Array oder String –

+0

Meine Vermutung ist, es ist eine Zeichenfolge, wahrscheinlich '$ (" # selectedDateFrom "). Val()'. – Barmar

0

Sie sind nicht die richtige Variable auf der PHP-Seite greifen:

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 
} 
Verwandte Themen