Προς το περιεχόμενο

Προτεινόμενες αναρτήσεις

Δημοσ.

το προβλημα μου ειναι το εξης: παιρνω 2 ημερομηνιες απο μια φορμα date1: ημερομηνια check in, date2: ημερομηνια check_out και κανω κρατηση.

μετα οταν ξανα μπαινω στο σαιτ θελω να μην μου βγαζει τα δωματια που ειναι κρατημενα αυτες τις ημερομηνιες αλλα δυσκολευομαι πολυ στους ελεγχους. Μπορει κανεις να βοηθησει?

Δημοσ.

Δειξε μας πως ελεγχεις τωρα και πως ειναι οι πινακες στη βαση οταν ενα δωματιο ειναι κλεισμενο ή ελευθερο.

Δεν μπορουμε να μαντεψουμε χωρις να μας δεινεις ουτε μια πληροφορια.

Δημοσ. (επεξεργασμένο)

εχω ενα πινακα bookings με ορισματα check_in_date και check_out_date και το room_id. και ενα πινακα room που εχει το room_id

Μεσα στη φορμα παιρνω τις ημερομηνιες με get:

                       <div class="col">
                            <h5> Check In Date </h5>
                            <input id="date1" type="date" name="date1" min="<?php echo date('Y-m-d');?>">
                        </div>
                        <div class="col">
                            <h5> Check Out Date </h5>
                            <input id="date1" type="date" name="date2" min="<?php echo date('Y-m-d');?>">
                        </div><br>

sql:

<?php    
                $sqldate1="SELECT check_in_date FROM booking where bookings.room_id = room.room_id; ";
                $date1 = mysqli_query($conn, $sqldate1);
                
                
                $sqldate2="SELECT check_out_date FROM booking where bookings.room_id = room.room_id; ";
                $date2 = mysqli_query($conn, $sqldate2);
                

και οι ελεγχοι:

if (isset($_GET["date1"])) {
                    foreach($date1 as $dates1){
                        $sql .= 'and ($dates1["check_in_date"]) < $_GET(date2); ';
                    }
                }
                if (isset($_GET["date2"])) {
                    foreach($date1 as $dates2){
                        $sql .= 'and ($dates2["check_out_date"]) > $_GET(date1); ';
                    }
                }

 

Επεξ/σία από mikebol
Δημοσ.

Αν θες όταν κάνεις αναζήτηση, να μην σου εμφανίζει τα δωμάτια που είναι δεσμευμένα για αυτές τις ημερομηνίες, θα πρέπει καμιά(χρησιμοποίησε not) από τις δύο ημερομηνίες(date1, date 2) που θα δώσει ο χρήστης να είναι ενδιάμεσα(ή ίσες) στις ημερομηνίες δέσμευσης, που είναι ήδη καταχωρημένες, καθώς και καμιά(χρησιμοποίησε not) από τις ημερομηνίες δέσμευσης, που είναι ήδη καταχωρημένες, δεν θα πρέπει να είναι ενδιάμεσα(ή ίσες) στις ημερομηνίες που έδωσε ο χρήστης.

Αν θες να κάνεις έλεγχο για καταχώρηση ημερομηνιών δέσμευσης ενός δωματίου, και ένα query με τη παραπάνω λογική χωρίς τα not, δεν σου επιστρέψει αποτελέσματα, τότε οι ημερομηνίες είναι έγκυρες για να δημιουργηθεί νέα καταχώρηση.

Δημοσ. (επεξεργασμένο)

Θελω οταν κανω αναζητηση να μην εμφανιζει τα δεσμευμενα δωματια

Δεν ξερω αν μετεφρασα σωστα την σκεψη σου, αλλα αν εννοεις αυτο δεν λειτουργησε 

$sqldate="SELECT check_in_date, check_out_date FROM booking where bookings.room_id = room.room_id; ";
                $date = mysqli_query($conn, $sqldate)

if (isset($_GET["date1"])) {
                    foreach($date as $dates){
                        $sql .= 'and $_GET(date1) NOT BETWEEN ($dates["check_in_date"]) AND ($dates["check_out_date"]) ; ';
                        $sql .= 'and $_GET(date2) NOT BETWEEN ($dates["check_in_date"]) AND ($dates["check_out_date"]) ; ';
                        $sql .= 'and $dates["check_in_date"] NOT BETWEEN  ($_GET(date1) AND $_GET(date2)) ;' ;
                        $sql .= 'and $dates["check_out_date"] NOT BETWEEN  ($_GET(date1) AND $_GET(date2)) ;' ;
                    }
                }

Επεξ/σία από mikebol
Δημοσ. (επεξεργασμένο)

Πρώτα εκτελείς το query και μετά με το foreach(date as dates) κάνεις όσες επαναλήψεις είναι οι γραμμές του πίνακα date και σε κάθε επανάληψη αποθηκεύεται το τρέχον στοιχείο του πίνακα date στη μεταβλητή dates;; Δοκίμασε απλώς να εκτελέσεις το query, που σωστά έγραψες. Βασικά το πρώτο μέρος του μου φαίνεται λάθος.

Επεξ/σία από TheDarkKnight

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...