Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP预订系统_Php_Mysql - Fatal编程技术网

PHP预订系统

PHP预订系统,php,mysql,Php,Mysql,我正在开发一个预订系统。我的网站目前的工作方式是用户登录并选择约会。我需要帮助在下一页显示他们预订的约会。此外,当他们预订约会时,其他用户也不应再使用该约会 <?php { mysql_connect("localhost" , "" , "") or die (mysql_error()); mysql_select_db("") or die(mysql_error()); $pid=intval($_SESSION["Patient_id"]); $que

我正在开发一个预订系统。我的网站目前的工作方式是用户登录并选择约会。我需要帮助在下一页显示他们预订的约会。此外,当他们预订约会时,其他用户也不应再使用该约会

<?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循环只是用下一行覆盖每一行的信息,直到它退出

您使用$\u会话进行这些操作有什么原因吗?为什么不直接使用新的变量呢?如果您使用$\u会话,那么您将使用服务器的空间在用户在您的站点上的整个时间内保存该信息,然后在该时间之后的多长时间内,您的垃圾收集器才会来获取该信息。如果您只需要一页的信息,那么应该使用不会保持保存并占用空间的普通变量。(不是几行文字占用了那么多空间,而是原理……)如果您试图通过保存到会话变量来避免执行多个数据库调用,那么应该首先检查这些变量是否已设置

其次,将日期和时间拆分为单独的选择器意味着用户可以选择实际不可用的日期和时间选项。例如,如果星期二10:00和星期三4:00可用,则根据您的预期设计,用户将能够选择星期二10:00、星期二4:00、星期三10:00或星期三4:00。现在我想起来了,不同的医生和病房也是如此。除非你计划同时在A室和B室预订X医生。您实际上只能有一个下拉列表,除非您要使用javascript和/或ajax,或者重新加载页面并执行新的数据库搜索,以便在用户选择时更改可用的选择。例如,您可能希望他们选择一个日期,然后让页面自动更新有医生的时间,对吗?但这是一个更复杂的问题和答案,所以我暂时不谈这个问题

第三,正如其他人已经评论过的那样,确保你摆脱了mysql_*的东西,用现代的方法取代它。我可以根据经验证明,它可能会导致数据库连接未按预期关闭的问题。我把它放在下面的示例中,因为您有三个升级选项,它们看起来都不同,所以最好不要在这里混淆这个问题

最后,要回答您的问题,您需要将html放在表单中,并在表单中放置一个提交按钮,以便他们可以发送它。在表单标签中,您将“action”作为目标登录页的url,“method”作为post。然后,当登录页加载时,根据表单中元素的名称和选项的值,表单中选择的信息将在$u 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>
//在当前页面上
//.... 数据库材料。。。。。
$dates_和_times=array();
$doctors=array();
$rooms=array();
while($row=mysql\u fetch\u assoc($result))
{
$dates_和_times[]=$row['Appointment_date'.'。$row['Appointment_time'];
$doctors[]=$row['Doctor_name'];
$rooms[]=$row['Doctor_room'];
//有了会话,这将是:
//(注意额外的括号[]用于创建数组)
//$会话['Appointment\u date\u and\u time'][]=$row['Appointment\u date'].'.$row['Appointment\u time'];
//$\会话['Doctor\ u name'][]=$行['Doctor\ u name'];
//$_会话['Doctor_room'][]=$row['Doctor_room'];
}
?>
可用日期
--选择日期--
在…上
室内

除了显示信息外,您还需要在登录页上显示一些内容,以便在数据库中保存用户的选择。如果您不希望其他用户能够预订相同的预约时间,这意味着您最初的select语句需要查看“预订的预约”表,只查找尚未在下拉列表中显示的预约日期、时间、医生和房间。您需要查看将当前选择更改为仅获取可用约会,并且需要查看插入查询以使用POST信息保存所选约会

回答评论中的问题: 有很多不同的方法来设计你想要的东西。我认为你会有一些用户正在寻找一个特定的医生,但其他用户正在寻找一个特定的时间,并不关心他们得到什么医生。这就是为什么,如果它是我的网站,我会根据日期选择。我会把“第二天”和“前一天”按钮以及日历选择器放在顶部。当他们选择了某一天后重新加载页面时,我会从数据库中只获取那天的医生和时间信息。有了这些信息,我将创建一个大桌子,医生在一个轴上,时间在另一个轴上。我会在表格上为每个可用的预约时间设置按钮,以便用户单击该时间x医生来选择他们的预约,如果该时间x医生不可用,显然没有按钮
<form action="" method="get">

     //date selector here, named "Date"

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

     //table here
     //submit button here

</form>