Entschuldigung, wenn diese Frage albern sein könnte, aber ich bin relativ neu in der Programmierung. Ich habe eine Reservierungsfunktion in meiner Website und ich habe meine eigene Formularvalidierung (MY_Form_validation) erstellt, um zu überprüfen, ob ein Slot für eine bestimmte Stunde des Tages belegt wurde. Ein Benutzer wählt die Stunde aus, zu der er die Reservierung starten möchte, und die Stunde, zu der er die Reservierung beenden soll, wie unten gezeigt. Codeigniter - Foreach nur 1 Zeile zurückgeben
Grundsätzlich sind die Reservierungen von 10:00 Uhr bis 1:00 Uhr morgens. In der Form sind die Werte der Stunden wie folgt: 10:00 = '10', 11:00 = '11', 12:00 = '12', 1:00 = '13', 2:00 = ' 14' 25 ‚... 01.00 =‘
I erzeugt ein Array, die als Schalter dienen, wenn die Stunde reserviert wurde. Was ich getan habe, war eine foreach zu erstellen, um alle Zeilen mit dem bestimmten Datum zu erhalten, und eine While-Schleife zu erstellen, die die Arrays "umschaltet", um einen genommenen Slot für die Stunde zu simulieren. Was passiert, ist, dass die foreach-Schleife nur die erste Zeile liest, so dass das Array nur von der ersten Zeile und nicht von den anderen Zeilen modifiziert wird.
Beispiel: (Bezieht sich auf die obige Tabelle) Wenn ich für die Stunden reserviere, die Anfangswert als 17 und Endwert als 19 haben, dann funktioniert die Validierung und es gibt die Meldung "Zeitplan wurde bereits gebucht" zurück. da es die erste Reihe ist. Wenn ich jedoch für die Stunden reserviere, die den Startwert als 11 und den Endwert als 14 (zweite Zeile) haben, funktioniert die Validierung nicht und die Reservierung läuft durch. Wie mache ich das richtig? Danke vielmals!
Form Validation Funktion:
function unique_reserve_clubhouse()
{
$reservedate = $this->CI->input->post('datepick');
$reservestart = $this->CI->input->post('reservestart');
$reserveend = $this->CI->input->post('reserveend');
$checkstart = $this->CI->db->get_where('clubhouse_reservation', array('reservation_date' => $reservedate, 'reservation_start' => $reservestart, 'reservation_status' => 1), 1);
$checkresult = $this->CI->db->get_where('clubhouse_reservation', array('reservation_date' => $reservedate, 'reservation_status' => 1));
$resultreserve = $checkresult->result();
$tdX = array(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
foreach($resultreserve as $result)
{
while($result->reservation_start < $result->reservation_end)
{
$tdX[$result->reservation_start] = 1;
$result->reservation_start++;
}
}
if($checkstart->num_rows() > 0 || $tdX[$reservestart] == 1 || $tdX[$reserveend] == 1) {
$this->set_message('unique_reserve_clubhouse', 'This time schedule is already booked.');
return FALSE;
}
return TRUE;
}
es jetzt behoben, dummen Fehler. Ich beschränkte das Abfrageergebnis auf nur 1 Zeile und bemerkte es nicht. Danke Leute. – coderszx