Я впервые использую datatable и столкнулся с небольшой проблемой. В своей первой попытке я написал код PHP следующим образом:
<?php
$city = ($_GET['city']);
$sort = ($_GET['sort']);
$sortorder = ($_GET['sortorder']);
if ($city == "la"){
$citylong = "Los Angeles";
}
if ($city == "oc"){
$citylong = "Orange County";
}
if ($city == "sf"){
$citylong = "San Francisco";
}
?>
<h5>Reservations for <?php echo $citylong; ?></h5>
<table id="datatable1" class="table table-striped" cellspacing="0" width="100%">
<thead>
<tr>
<th>ID</th>
<th>Booking Date</th>
<th>Name</th>
<th>Class</th>
<th>Pick Up</th>
<th>Duration</th>
<th>Drop Off</th>
<th>Age</th>
<th>Coverage</th>
<th>Quote</th>
<th>Status</th>
</tr>
</thead>
<tbody>
<?php
include 'dbconfig.php';
$sql="SELECT bookingid, bookingdatetime, firstname, lastname, address, city, state, country, post, dlnum, dlexp, dlcountry, phone, email, addcomments, pickuploc, droploc, pickupdatetime, dropdatetime, class, numofdrivers, coverage, driversage, roadsideass, afterhoursdrop, promo, quotedprice, status, remoteip FROM reservations WHERE pickuploc='" . $city . "' ORDER BY " . $sort . " " . $sortorder;
$result = mysqli_query($conn,$sql);
while($row = mysqli_fetch_array($result)) {
$bookingdate = new DateTime($row['bookingdatetime']);
$bookingdatetimefancy = $bookingdate->format('m/d/y \@\ h:i a');
$pickupdatetime = new DateTime($row['pickupdatetime']);
$pickupdatetimefancy = $pickupdatetime->format('m/d/y \@\ h:i a');
$dropdatetime = new DateTime($row['dropdatetime']);
$dropdatetimefancy = $dropdatetime->format('m/d/y \@\ h:i a');
$pickupdate = new DateTime($pickupdatetime->format('Y-m-d'));
$dropdate = new DateTime($dropdatetime->format('Y-m-d'));
$inbetween = $pickupdate->diff($dropdate)->days;
$duration = str_pad($inbetween, 3, "0", STR_PAD_LEFT);
$statusConfirmed = "";
$statusUnconfirmed = "";
$statusOpen = "";
$statusClosed = "";
$statusCanceled = "";
if($row['status']=="Confirmed"){
$statusConfirmed = 'selected';
}
if($row['status']=="Unconfirmed"){
$statusUnconfirmed = 'selected';
}
if($row['status']=="Open"){
$statusOpen = 'selected';
}
if($row['status']=="Closed"){
$statusClosed = 'selected';
}
if($row['status']=="Canceled"){
$statusCanceled = 'selected';
}
if ($row['pickuploc'] == $row['droploc']) {
$otherdropoff = "";
}else{
$otherdropoff = " (" . $row['droploc'] . ") ";
}
echo '<tr>
<td>' . $row['bookingid'] .'</td>
<td>' . $bookingdatetimefancy .'</td>
<td>' . $row['firstname'] . " " . $row['lastname'] .'</td>
<td>' . $row['class'] .'</td>
<td>' . $pickupdatetimefancy .'</td>
<td>' . $duration . " days" .'</td>
<td>' . $dropdatetimefancy . $otherdropoff .'</td>
<td>' . $row['driversage'] .'</td>
<td>' . $row['coverage'] .'</td>
<td>$' . $row['quotedprice'] .'</td>
<td><select name="resstatus" id="resstatus' . $row['bookingid'] .'" onchange="changeresstatus(' . $row['bookingid'] . ');">
<option ' . $statusConfirmed. ' value="Confirmed">Confirmed</option>
<option ' . $statusUnconfirmed . ' value="Unconfirmed">Unconfirmed</option>
<option ' . $statusOpen . ' value="Open">Open</option>
<option ' . $statusClosed . ' value="Closed">Closed</option>
<option ' . $statusCanceled . ' value="Canceled">Canceled</option>
</select></td>
</tr>';
}
?>
</tbody>
</table>
Это было довольно небрежно, и, поскольку я хочу добавить функцию автоматического обновления в будущем, я подумал, что было бы лучше перенести все, используя JSONмассив, так что теперь это делается так:
<?php
$city = ($_GET['city']);
include 'dbconfig.php';
$sql="SELECT bookingid, bookingdatetime, firstname, lastname, address, city, state, country, post, dlnum, dlexp, dlcountry, phone, email, addcomments, pickuploc, droploc, pickupdatetime, dropdatetime, class, numofdrivers, coverage, driversage, roadsideass, afterhoursdrop, promo, quotedprice, status, remoteip FROM reservations WHERE pickuploc='" . $city . "'";
$result = mysqli_query($conn,$sql);
$arr = array();
while($row = mysqli_fetch_array($result)) {
$bookingdate = new DateTime($row['bookingdatetime']);
$bookingdatetimefancy = $bookingdate->format('m/d/y \@\ h:i a');
$pickupdatetime = new DateTime($row['pickupdatetime']);
$pickupdatetimefancy = $pickupdatetime->format('m/d/y \@\ h:i a');
$dropdatetime = new DateTime($row['dropdatetime']);
$dropdatetimefancy = $dropdatetime->format('m/d/y \@\ h:i a');
$pickupdate = new DateTime($pickupdatetime->format('Y-m-d'));
$dropdate = new DateTime($dropdatetime->format('Y-m-d'));
$inbetween = $pickupdate->diff($dropdate)->days;
$duration = str_pad($inbetween, 3, "0", STR_PAD_LEFT);
$statusConfirmed = "";
$statusUnconfirmed = "";
$statusOpen = "";
$statusClosed = "";
$statusCanceled = "";
if($row['status']=="Confirmed"){
$statusConfirmed = 'selected';
}
if($row['status']=="Unconfirmed"){
$statusUnconfirmed = 'selected';
}
if($row['status']=="Open"){
$statusOpen = 'selected';
}
if($row['status']=="Closed"){
$statusClosed = 'selected';
}
if($row['status']=="Canceled"){
$statusCanceled = 'selected';
}
if ($row['pickuploc'] == $row['droploc']) {
$otherdropoff = "";
}else{
$otherdropoff = " (" . $row['droploc'] . ") ";
}
array_push($arr, array(
'id' => $row['bookingid'],
'bookingdatetime' => $bookingdatetimefancy,
'name' => $row['firstname'] . " " . $row['lastname'],
'class' => $row['class'],
'pickupdatetime' => $pickupdatetimefancy,
'duration' => $duration . " days",
'dropdatetime' => $dropdatetimefancy . " " . $otherdropoff,
'age' => $row['driversage'],
'coverage' => $row['coverage'],
'quote' => "$" . $row['quotedprice'],
'status' => $row['status']
));
}
// Send the $date_ranges as JSON.
$json = json_encode($arr); // '[{"start": "2019-08-18", "end": "2019-08-19"}]'
echo $json;
и вот мой Java Script:
function getres() {
$.ajax({
type : 'get',
url : 'reservations2.php?city='+document.getElementById("cityselect").value,
dataType: 'json',
cache: false,
success : function(result)
{
if (document.getElementById("cityselect").value == "la"){
city = "Los Angeles";
}
if (document.getElementById("cityselect").value == "oc"){
city = "Orange County";
}
if (document.getElementById("cityselect").value == "sf"){
city = "San Francisco";
}
restitle.innerText = "Reservations for "+city;
$('#resdatatable').dataTable({
data: result,
destroy: true,
columns: [
{ data: 'id', title: 'ID' },
{ data: 'bookingdatetime', title: 'Booking Date' },
{ data: 'name', title: 'Name' },
{ data: 'class', title: 'Class' },
{ data: 'pickupdatetime', title: 'Pick up' },
{ data: 'duration', title: 'Duration' },
{ data: 'dropdatetime', title: 'Drop off' },
{ data: 'age', title: 'Age' },
{ data: 'coverage', title: 'Coverage' },
{ data: 'quote', title: 'Quote' },
{ data: 'status', title: 'Status' },
]
});
}
});
}
Как вы можете видеть, я потерял функциональность выпадающего меню выбора, когдапереход к передаче данных с массивом. Как добавить обратно выпадающий выбор?
Мне нужно вернуть выборки, мне нужно, чтобы у них был уникальный идентификатор, соответствующий идентификатору строки, и чтобы у них была функция onchange.