簡體   English   中英

PHP預訂系統

[英]PHP booking system

我正在開發預訂系統。 我的網站目前的工作方式是用戶登錄並選擇約會。 在顯示他們在下一頁上預定的約會時,我需要幫助。 同樣,當他們預訂約會時,其他用戶將不再可以使用該約會。

<?php
{
    mysql_connect("localhost" , "" , "") or die (mysql_error());
    mysql_select_db("") or die(mysql_error());


    $pid=intval($_SESSION["Patient_id"]); $query = "SELECT t1.*, t2.Doctor_name, t2.Doctor_room FROM Appointment AS t1 INNER JOIN Doctor AS t2 ON t1.Doctor_id=t2.Doctor_id";

    //executes query on the database
    $result = mysql_query ($query) or die ("didn't query");

    //this selects the results as rows
    $num = mysql_num_rows ($result);    


    while($row=mysql_fetch_assoc($result))
    {
        $_SESSION['Appointment_date'] = $row['Appointment_date'];
        $_SESSION['Appointment_time'] = $row['Appointment_time'];
        $_SESSION['Doctor_name'] = $row['Doctor_name'];
        $_SESSION['Doctor_room'] = $row['Doctor_room'];
    }
}
?>  

        <strong>Dates available</strong>            
        <select id="Availability" name="Availability">                      
        <option value="0">--Select date--</option>
        <option value="3"><?php echo $_SESSION['Appointment_date'];?></option>
        </select>

        <br />
        <br />

        <strong>Times available</strong>            
        <select id="Availability" name="Availability">                      
        <option value="0">--Select time--</option>
        <option value="3"><?php echo $_SESSION['Appointment_time'];?></option>>
        </select>

        <br />
        <br />

            <strong>Doctor Name</strong>            
        <select id="Availability" name="Availability">                      
        <option value="0">--Name--</option>
        <option value="2"><?php echo $_SESSION['Doctor_name'];?></option>>
        </select>

        <br />
        <br />

            <strong>Doctor Room</strong>            
        <select id="Availability" name="Availability">                      
        <option value="0">--Room--</option>
        <option value="2"><?php echo $_SESSION['Doctor_room'];?></option>>
        </select> 

上面的代碼允許用戶使用可用的內容進行約會。 該表稱為約會表。 當用戶單擊下一步時,我需要此信息才能顯示給該用戶,以便它顯示他們的約會,並且該約會對其他用戶不再可用

謝謝!

首先,您擁有的代碼無法正常運行。 從那些是下拉列表的事實來看,您可能想要在其中提供多個選項。 但是,您要輸入的只是一個選項:查詢提供的最后一行。 while循環只是用下一行覆蓋每一行的信息,直到退出為止。

您是否有任何理由使用$ _SESSION? 為什么不只是使用新變量呢? 如果您使用$ _SESSION,則您正在使用服務器的空間來在用戶訪問您的網站的整個過程中保存該信息,然后再花很長時間才能使垃圾收集器能夠使用它。 如果只需要一頁的信息,則應使用不會保存並占用空間的普通變量。 (不是幾行文本會占用那么多空間,而是事情的原理。。。)如果您試圖通過保存到SESSION變量來避免進行多個數據庫調用,則應檢查是否設置了這些變量第一。

其次,將日期和時間拆分為單獨的選擇器意味着用戶將能夠選擇實際上不可用的日期和時間選項。 例如,如果您有10:00(星期二)和4:00(星期三)可用,那么根據您的預期設計,您的用戶將能夠選擇10:00(星期二),4:00(星期二),10:00(星期三)或4:00(星期三) 。 現在我想到了,不同的醫生和房間實際上也是如此。 除非您打算同時預訂A室和B室的X醫生。 除非您要使用javascript和/或ajax,或者重新加載頁面並進行新的數據庫搜索以在用戶選擇可用選項時更改它們,否則您實際上只有一個下拉菜單。 例如,您可能希望他們選擇一個日期,然后讓頁面自動更新什么時間和醫生有空,對嗎? 但這是一個非常復雜的問題和答案,所以我暫時不談。

第三,正如其他人已經評論過的,請確保您擺脫了mysql_ *的內容,並用現代的方法替換了它。 我可以從經驗證明,這可能導致數據庫連接未按預期關閉的問題。 我將其留在下面的示例中,因為您有三個升級選項,而且它們看起來都不同,所以最好不要在這里混淆該問題。

最后,要回答您的問題,您需要將html放在表單中,還要在表單中放置一個Submit按鈕,以便他們可以發送它。 在表單標簽中,將“操作”作為目標登錄頁面的URL,將“方法”作為發布。 然后,在加載登錄頁面時,根據表單中元素的名稱和選項的值,表單中選擇的信息將位於$ _POST變量內。 這意味着您必須為每個元素分配一個不同的名稱,並且必須為每個選項的“值”分配正確的值。 順便說一句,在同一頁面上永遠不能有相同的“ id”元素。

這是一個結合了我剛才提到的大多數內容的示例,盡管這些下拉列表並不能真正按照您的需要進行工作-我按順序排列了三個下拉列表,以便您可以看到POST的工作原理,但實際上您只希望一個下拉列表。

//on your current page 
//.... database stuff .....
$dates_and_times = array();
$doctors = array();
$rooms = array();
while($row=mysql_fetch_assoc($result))
{
    $dates_and_times[] = $row['Appointment_date'].' '.$row['Appointment_time'];
    $doctors[] = $row['Doctor_name'];
    $rooms[] = $row['Doctor_room'];

    //with SESSION, this would have been:
    //(note the extra brackets [] to create arrays)
    //$_SESSION['Appointment_date_and_time'][] = $row['Appointment_date'].' '.$row['Appointment_time'];
    //$_SESSION['Doctor_name'][] = $row['Doctor_name'];
    //$_SESSION['Doctor_room'][] = $row['Doctor_room'];
}
?>
<form method="post" action="landing_page.php">
    <strong>Dates available</strong>            
    <select id="Date" name="Date">                      
    <option value="0">--Select date--</option>
    <?php  foreach ($dates_and_times as $app_date) { ?>
        <option value="<?php echo $app_date; ?>"><?php echo $app_date; ?></option>
    <?php } ?>
    </select>

    <br />
    <br />

        <strong>Doctor Name</strong>            
    <select id="Doctor" name="Doctor">                      
    <option value="0">--Name--</option>
    <?php  foreach ($doctors as $doc) { ?>
        <option value="<?php echo $doc; ?>"><?php echo $doc; ?></option>
    <?php } ?>
    </select>

    <br />
    <br />

        <strong>Doctor Room</strong>            
    <select id="Room" name="Room">                      
    <option value="0">--Room--</option>
    <?php  foreach ($rooms as $room) { ?>
        <option value="<?php echo $room; ?>"><?php echo $room; ?></option>
    <?php } ?>
    </select> 

    <input type="submit" name="Go" />
</form>


//on the landing page
//echo based on the name of the posted element
//$_POST has the values of all of the elements in the form that had a name
<strong> You selected an appointment with 
     <?php echo $_POST['Doctor']; ?>
     on 
     <?php echo $_POST['Date']; ?>
     in room
     <?php echo $_POST['Room']; ?>
</strong>

除了僅顯示信息外,您還需要在登錄頁面上添加一些內容,以將用戶的選擇保存在數據庫中。 如果您不希望其他用戶能夠預訂相同的約會時間,則意味着您原來的select語句需要在“已預訂的約會”表中查找,並且僅查找非“約會”日期,時間,醫生和房間。 t已用於顯示在下拉菜單中。 您將需要研究將當前的SELECT更改為僅獲取可用約會,並且需要研究INSERT查詢以使用POST信息保存所選約會。

回答評論中的問題:有很多不同的方法來設計您要尋找的東西。 我認為您會有一些正在尋找特定醫生的用戶,但是其他正在尋找特定時間並且不在乎他們會得到什么醫生的用戶。 這就是為什么如果這是我的網站,我會根據天選擇一個。 我將在頂部放置“第二天”和“前一天”按鈕,以及一個日歷選擇器。 當他們選擇一天后重新加載頁面時,我將僅從當天那里獲取數據庫中的醫生和時間信息。 有了這些信息,我將創建一張大桌子,一個軸上有醫生,而另一軸上有時間。 我會為每個可用的約會時間在桌子上放置按鈕,以便用戶單擊該時間x醫生以選擇他們的約會,如果該時間x doctor不可用,則顯然沒有按鈕。 然后,用戶可以一目了然地看到一天中什么時間可用,什么醫生可用。

我認為,處理頁面重新加載內容的最佳方法是將日期選擇器放入其自己的相同頁面發布表單中:

<form action="" method="get">

     //date selector here, named "Date"

</form>

然后,我將檢查$ _GET變量是否選擇了日期。 如果是這樣,我將在第二種形式中加載表。 我會將$ _GET日期放在一個隱藏的輸入中,以便當他們從該表單中發布內容時,它也會被發送出去。

<form action="the_landing_page.php" method="post">
     <input type="hidden" name="Date" value="<?php echo $_GET['Date']; ?>" />

     //table here
     //submit button here

</form>

就像我的第一個示例一樣,用戶從表中選擇的內容隨后將發布到the_landing_page。 現在,您可以自己弄清楚細節。 祝好運。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM