我正在开发预订系统。我的网站目前的工作方式是用户登录并选择约会。我需要帮助显示他们在下一页预订的约会。此外,当他们预约约会时,其他用户将无法再使用该约会。
<?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>
上面的代码允许用户根据可用内容进行约会。该表称为约会表。当用户点击下一步时,我需要将此信息显示给用户,以便显示他们的约会,并且其他用户不再可以使用约会
谢谢!
答案 0 :(得分:3)
首先,你所拥有的代码并不像你想要的那样工作。从那些下拉的事实来看,你可能想要多种选择。但是你输入的只是一个选项:查询提供的最后一行。你的while循环只是用下一行覆盖每一行的信息,直到它退出。
你有没有理由将$ _SESSION用于这些?为什么不使用新变量?如果您使用$ _SESSION,那么您正在使用服务器的空间来保存用户在您站点上的整个时间内的信息,然后在此之后很长时间内您的垃圾收集器需要来获取它。如果您只想要一个页面的信息,则应使用不会保留并占用空间的普通变量。 (并不是说几行文本占用了那么多空间,而是事物的原理......)如果你试图通过保存到SESSION变量来避免进行多个数据库调用,那么你应该检查这些变量是否被设置第一
其次,您将日期和时间拆分为单独的选择器意味着用户可以选择实际可用的日期和时间选项。例如,如果您有星期二10:00和星期三4:00可用,那么根据您的预期设计,您的用户可以选择周二10:00,周二4:00,周三10:00或周三4:00 。对于不同的医生和房间来说也是如此,现在我想到了它。除非您计划在同一时间在A室和B室预订X医生。除非您要使用javascript和/或ajax,或重新加载页面并执行新的数据库搜索,否则您只能进行一次下拉,以便在用户选择时更改可用选项。例如,您可能希望他们选择日期,然后让页面自动更新时间和医生可用,对吧?但这是一个非常复杂的问题和答案,所以我现在暂时离开。
第三,正如其他人已经评论过的那样,确保你摆脱了那些mysql_ *的东西并用现代方法取而代之。我可以从经验中证明,它可能导致数据库连接问题没有按预期关闭。我在下面的示例中留下了它,因为你有三个升级选项,它们看起来都不一样,所以最好不要在这里混淆这个问题。
最后,要回答您的问题,您需要将html放在表单中,并在表单中放置一个提交按钮,以便他们发送它。在表单标记中,您将&#34; action&#34;作为预期目标网页的网址,以及&#34;方法&#34;作为帖子。然后,当加载着陆页时,根据表单中元素的名称和选项的值,表单中选择的信息将位于$ _POST变量中。这意味着您必须为每个元素指定一个不同的名称,并且必须将正确的值分配给&#34;值&#34;每个选项。顺便说一句,你永远不会有相同的&#34; id&#34;同一页面上的元素。
这是一个结合了我刚才提到的大部分内容的例子,虽然下拉菜单确实按照你需要的方式工作 - 我按顺序保留了其中的三个,这样你就可以看到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>
除了显示信息之外,您还需要在登录页面上添加一些内容以保存用户在数据库中的选择。如果您不希望其他用户能够预订相同的约会时间,这意味着您的原始选择语句需要查看预约约会&#34;表格,仅查找预约日期,时间,医生和房间,这些日期,时间,医生和房间尚未在下拉列表中显示。您需要考虑将当前的SELECT更改为仅获取可用的约会,并且您需要查看INSERT查询以使用POST信息保存所选的约会。
回答评论中的问题: 有许多不同的方法来设计您正在寻找的东西。我想你会有一些用户正在寻找一位特定的医生,但其他用户正在寻找特定的时间并且不关心他们得到的医生。这就是为什么,如果它是我的网站,我会根据一天制作一个选择器。我会把#34;第二天&#34;和&#34;前一天&#34;顶部的按钮,以及日历选择器。当页面在他们选择了一天之后重新加载时,我会在那一天从数据库中获取医生和时间的信息。有了这些信息,我就会在一个轴上创建一个大医生桌,而在另一个轴上创建一个大桌子。我会在每个可用的预约时间在桌子上放置按钮,以便用户点击那个时间x医生来选择他们的预约,如果那个时间x医生不可用,显然没有按钮。然后,用户可以一目了然地看到可用的时间以及整天可用的医生。
在我看来,处理页面重新加载内容的最佳方法是将日期选择器放在自己的同页发布表单中:
<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,就像我的第一个例子一样。现在,您可以自己弄清楚细节。祝你好运。