2017-10-24 3 views
0

Ich arbeite an einem stündlichen Buchungssystem. Basierend auf dem ausgewählten TAG habe ich eine JQuery-Funktion eingerichtet, um die TIME-Auswahl in meinem Formular zu ändern.PHP Fetch - Nicht alle Zeilen für Array zurückgeben Check

Als Test versuche ich nur die verfügbaren und verfügbaren TIMES aufzulisten.

Das Problem, das ich bekomme, ist, dass die TIME-Werte, die ich zeigen möchte (21:00 und 22:00) basierend auf dem DAY ausgewählt, nicht richtig funktioniert.

21:00 wird richtig aufgenommen als genommen. 22:00 Uhr wird nicht korrekt aufgenommen.

Meine Tabelle hat die folgende Konfiguration und Testdaten:

ID | NAME | DAY | TIME | HOTEL | HOST 
1 | Event 1 | 2 | 21:00 | South | Joe 
2 | Event 2 | 2 | 22:00 | South | Matt 

Auf meiner Event-Buchung Seite, ich habe folgendes:

SCRIPT TIME Auswahl zu ändern:

<script> 
    function getData() 
    { 
     var formData = new FormData($("#eventbook")[0]); 
     $.ajax({ 
      url: 'eventdata.php', 
      type:'POST', 
      data: formData, 
      processData: false, 
      contentType: false, 
      cache: false, 
      mimeType: 'multipart/form-data', 
      success: function(html) 
      { 
       $("#eventitems").html(html); 
      } 
     }); 
     return false 
    } 
</script> 

FORM:

<form id="eventbook" action=""> 
<div class="form-group"> 
    <p class="text-center"> 
    <label for="selOption">Event Day:</label> 
    <select class="form-control" id="selOption" onchange="getData()" name="selOption"> 
     <option value="1">Monday</option> 
     <option value="2">Tuesday</option> 
     <option value="3">Wednesday</option> 
     <option value="4">Thursday</option> 
     <option value="5">Friday</option> 
     <option value="6">Saturday</option> 
     <option value="7">Sunday</option> 
    </select> 
    </p> 
</div> 
<div id="eventitems"> 
    <?php 
    $times = array(
     "00:00" => "00:00", 
     "01:00" => "01:00", 
     "02:00" => "02:00", 
     "03:00" => "03:00", 
     "04:00" => "04:00", 
     "05:00" => "05:00", 
     "06:00" => "06:00", 
     "07:00" => "07:00", 
     "08:00" => "08:00", 
     "09:00" => "09:00", 
     "10:00" => "10:00", 
     "11:00" => "11:00", 
     "12:00" => "12:00", 
     "13:00" => "13:00", 
     "14:00" => "14:00", 
     "15:00" => "15:00", 
     "16:00" => "16:00", 
     "17:00" => "17:00", 
     "18:00" => "18:00", 
     "19:00" => "19:00", 
     "20:00" => "20:00", 
     "21:00" => "21:00", 
     "22:00" => "22:00", 
     "23:00" => "23:00", 
    ); 
    if (!isset($_REQUEST['selOption'])) { 
     $day = 1; 
    } 
    $dayInfo = $dbh->prepare("SELECT * FROM events WHERE day=:day"); 
    $dayInfo->execute(array(":day"=>$day)); 
    $dayInfoResult = $dayInfo->fetch(PDO::FETCH_ASSOC); 
    ?> 
    <div class="form-group"> 
    <p class="text-center"> 
     <?php 
      foreach ($times as $key => $value) { 
       if (in_array($value, $dayInfoResult)) { 
        echo "{$key} with value of {$value} is taken.<br>"; 
       } else { 
        echo "{$key} with value of {$value} is available.<br>"; 
       } 
      } 
     ?> 
    </p> 
    </div> 
</div> 
</form> 

In eventdata.php Ich habe folgend:

<?php 
require_once 'includes/config.php'; 
$times = array(
    "00:00" => "00:00", 
    "01:00" => "01:00", 
    "02:00" => "02:00", 
    "03:00" => "03:00", 
    "04:00" => "04:00", 
    "05:00" => "05:00", 
    "06:00" => "06:00", 
    "07:00" => "07:00", 
    "08:00" => "08:00", 
    "09:00" => "09:00", 
    "10:00" => "10:00", 
    "11:00" => "11:00", 
    "12:00" => "12:00", 
    "13:00" => "13:00", 
    "14:00" => "14:00", 
    "15:00" => "15:00", 
    "16:00" => "16:00", 
    "17:00" => "17:00", 
    "18:00" => "18:00", 
    "19:00" => "19:00", 
    "20:00" => "20:00", 
    "21:00" => "21:00", 
    "22:00" => "22:00", 
    "23:00" => "23:00", 
); 
$day = $_REQUEST['selOption']; 
$dayInfo = $dbh->prepare("SELECT * FROM events WHERE day=:day"); 
$dayInfo->execute(array(":day"=>$day)); 
$dayInfoResult = $dayInfo->fetch(PDO::FETCH_ASSOC); 
?> 
<div class="form-group"> 
    <p class="text-center"> 
     <?php 
     foreach ($times as $key => $value) { 
      if (in_array($value, $dayInfoResult)) { 
       echo "{$key} with value of {$value} is taken.<br>"; 
      } else { 
       echo "{$key} with value of {$value} is available.<br>"; 
      } 
     } 
     ?> 
    </p> 
</div> 

Bei Auswahl Montag, Mittwoch, Donnerstag, Freitag, Samstag oder Sonntag, alle TIMES zeigt korrekt als „Schlüssel mit Wert VALUE ist verfügbar.".

Nach der Auswahl Dienstag, zeigt es nur 21:00 als genommen, aber nicht 22:00.

Antwort

1

Sie müssen fetchall statt fetch verwenden.

Ersetzen

$dayInfoResult = $dayInfo->fetch(PDO::FETCH_ASSOC); 

Mit

$dayInfoResult = $dayInfo->fetchAll(PDO::FETCH_ASSOC); 

fetch: Holt die nächste Zeile aus einer Ergebnismenge.

fetchAll: Gibt ein Array alle der Ergebnismenge Zeilen

enthalten und müssen auch den Code modifizieren, um die Zeit genommen, um zu überprüfen.

// fetch all data from database for that day 
$dayInfoResult = $dayInfo->fetchAll(PDO::FETCH_ASSOC); 
// define an array 
$taken_times = array(); 
// loop the database results 
foreach($dayInfoResult as $key=>$value){ 
    // new array to get all the taken times for that day 
    $taken_times[] = $value['TIME']; 
} 

In Ihrem HTML-Code

foreach ($times as $key => $value) { 
    // check the time in new array 
    if (in_array($value, $taken_times)) { 
     echo "{$key} with value of {$value} is taken.<br>"; 
     } else { 
      echo "{$key} with value of {$value} is available.<br>"; 
    } 
} 
+0

Hallo Ravinder, möchte ich Ihnen sehr für Ihre Hilfe danken. Ich hatte meinen Code bereits so geändert, wie Sie ihn vor dem Bearbeiten/Hinzufügen von Code vorgeschlagen hatten. Das Ändern in fetchAll und das Erstellen eines Arrays aus dayInfo funktionierte ordnungsgemäß. Danke nochmal. –

Verwandte Themen