Search code examples
phpappointment

Appointment Booking System Slots


Im trying to make an appointment booking system, in which everything else works, EXCEPT the appointment time slots, in which if, for example, an appointment is set at 11.30am, and lasts an hour (12.30pm), no one can book or have an appointment within these times. I have converted start and end times of the input to unix time, as well as converting the times already set in the database, but it is failing me.

I have tried comparing the end time in between the two times set by the user, and the end time of the user between the two times already in the database. My code is:

 if ($length == "1 Hour"){
            $edittime = $time;
            $timeedit = strtotime($edittime)+3600;
            $endtime = date('h:i:s', strftime($timeedit));
        } elseif ($length == "1 Hour 30 Minutes") {
            $edittime = $time;
            $timeedit = strtotime($edittime)+5400;
            $endtime = date('h:i:s', strftime($timeedit));
        } elseif ($length == "2 Hour") {
            $edittime = $time;
            $timeedit = strtotime($edittime)+7200;
            $endtime = date('h:i:s', strftime($timeedit));
        } else {
            header("location:Cancel.php");
        }
        /*Comparison of the start and end times, as well as the user input time.*/
        $querysql = "SELECT Time FROM $tablename WHERE Time <= '$endtime' AND Date = '$date'";
        $queryresult = mysqli_query($connection, $querysql);
        /*Validate the query.*/
        if (! $queryresult) {
            echo ("Could not retrieve the sql data : " . mysqli_error($connection) . " " . mysqli_errno($connection));
        }

        /*Array to collect data from the sql query, to compare against the appointment times the user entered.*/
        $count = 0;
        $starttime = $time;
        $secondtime = strtotime($starttime);
        $existapp[$count] = mysqli_fetch_array($queryresult, MYSQLI_NUM);
        while ($existapp[$count] <> "") {
            $temp = $existapp[$count];
            $acquireddata = $temp[$count];
            $appsec = strtotime($acquireddata);
            if ($length == "1 Hour") {
                $existstart = $appsec;
                $existedit = $existstart + 3600;
                $existend = date('h:i:s', strftime($existedit));
            } elseif ($length == "1 Hour 30 Minutes") {
                $existstart = $appsec;
                $existedit = $existstart + 3600;
                $existend = date('h:i:s', strftime($existedit));
            } elseif ($length == "2 Hour") {
                $existstart = $appsec;
                $existedit = $existstart + 3600;
                $existend = date('h:i:s', strftime($existedit));
            }
            /*$timeedit = end time*/
            /*$secondtime = start time*/
            /*$existededit = exisiting appointment*/

            if ($timeedit <= $existedit and $timeedit >= $existstart) {
                 header("location:Cancel.php");
            }
            $count = $count + 1;
        }

If you need the whole file then just give me a shout.

I've been searching to no end with this, and after checking the unix times, it should work! But it doesnt! ):

<?php
    /*Checks if user is logged in, else redirect to home.*/
    session_start();
    if(! $_SESSION['Username']) {
        header("location:Index.php");
    }
    /*Sets variables as the login to the database, as well as tables of interest.*/
    $servername = "";
    $username = "";
    $password = "";
    $dbname = "";
    $tablename = "appointmentinformation";
    $tablenamed = "clientinformation";

    /*Connect to the database server and the database.*/
    $connection = mysqli_connect("$servername", "$username", "$password", "$dbname") or die("Could not connect to the database");
    if (mysqli_connect_errno()) {
        echo "Failed to connect to MySQL: " . mysqli_connect_error();
    }
    /*Retrieve the username from the current session.*/
    $clientusername = $_SESSION['Username'];
    /*Retrieve the ClientID of interest from a table, with a parameter of the username. Limit the amount of results to one row (one result).*/
    $sql = "SELECT ClientID FROM $tablenamed WHERE Username = '$clientusername' LIMIT 1";
    /*Validate the query.*/
    $results = mysqli_query($connection, $sql);
    if (! $results) {
        echo ("Could not select the data : " . mysql_error());
    } else {
        $datarows = mysqli_fetch_row($results);
        $clientid = $datarows[0];
    }
    /*Retrieve user input.*/
    $date = $_POST["date"];
    $time = $_POST["time"];
    $length = $_POST["length"];

    /*Format date*/
    $date = str_replace('/', '-', $date);

    /*Protection from SQL injection attacks.*/
    $date = stripslashes($date);
    $time = stripslashes($time);
    $length = stripslashes($length);
    $date = mysqli_real_escape_string($connection, $date);
    $time = mysqli_real_escape_string($connection, $time);
    $length = mysqli_real_escape_string($connection, $length);

    if ($length == "1 Hour"){
        $edittime = $time;
        $timeedit = strtotime($edittime)+3600;
    } elseif ($length == "1 Hour 30 Minutes") {
        $edittime = $time;
        $timeedit = strtotime($edittime)+5400;
    } elseif ($length == "2 Hour") {
        $edittime = $time;
        $timeedit = strtotime($edittime)+7200;
    } else {
        header("location:Cancel.php");
    }
    /*Comparison of the start and end times, as well as the user input time.*/
    $querysql = "SELECT Time FROM $tablename WHERE Time <= '$endtime' AND Date = '$date'";
    $queryresult = mysqli_query($connection, $querysql);
    /*Validate the query.*/
    if (! $queryresult) {
        echo ("Could not retrieve the sql data : " . mysqli_error($connection) . " " . mysqli_errno($connection));
    }

    /*Array to collect data from the sql query, to compare against the appointment times the user entered.*/
    $count = 0;
    $starttime = $time;
    $secondtime = strtotime($starttime);
    $existapp[$count] = mysqli_fetch_array($queryresult, MYSQLI_NUM);
    while ($existapp[$count] <> "") {
        $temp = $existapp[$count];
        $acquireddata = $temp[$count];
        $appsec = strtotime($acquireddata);
        if ($length == "1 Hour") {
            $existstart = $appsec;
            $existedit = $existstart + 3600;
        } elseif ($length == "1 Hour 30 Minutes") {
            $existstart = $appsec;
            $existedit = $existstart + 3600;
        } elseif ($length == "2 Hour") {
            $existstart = $appsec;
            $existedit = $existstart + 3600;
        }
        /*$timeedit = end time*/
        /*$secondtime = start time*/
        /*$existededit = exisiting appointment*/

        if ($timeedit <= $existedit and $timeedit >= $existstart) {
             header("location:Cancel.php");
        }
        $count = $count + 1;
    }

    /*SELECT query to retrieve data from the database. A complex query due to two parameters.*/
    $sqlquery = "SELECT * FROM $tablename WHERE Date = '$date' AND Time = '$time'";
    $sqlresult = mysqli_query($connection, $sqlquery);
    /*Validate the query.*/
    if (! $sqlresult) {
        echo ("Could not retrieve the sql data : " . mysqli_error($connection) . " " . mysqli_errno($connection));
    }
    $rows = mysqli_fetch_row($sqlresult);
    $date1 = $rows[3];
    $time1 = $rows[4];

    /*Compare the date and times and validate.*/
    if ($date === $date1 && $time = $time1) {
        echo("This date/time is taken!");
        header("location:CreateAppointmentForm.php");
    } else {
        /*Insert the data into the database if validation passes.*/
        $query = "INSERT INTO appointmentinformation (ClientID, Length, Date, Time) VALUES ('$clientid', '$length', '$date', '$time')";
        $result = mysqli_query($connection, $query);
            if ($result) {
                header("Location:UserCP.php");
            } else {
                echo ("Could not insert data : " . mysqli_error($connection) . " " . mysqli_errno($connection));
            } 
    }

?>

Solution

  • You should change strftime to strtotime

    http://php.net/manual/en/function.strftime.php
    http://php.net/manual/en/function.strtotime.php