我试图通过将列表与已经挑选并存储在数据库中的时间相匹配来显示可用的约会时间。
我无法获取数据库中存储的每个if($v== $info_check['appt_time']){continue;}
的{{1}}。有人能告诉我我做错了什么或更好的方法来解决这个问题。
$info_check['appt_time']
答案 0 :(得分:0)
你试图在for循环之后使用$ v,这将超出范围。
<select name='appt_time'>
<?
foreach ($range as $key=> $v) {
mysql_connect("localhost", "user", "pass");
mysql_select_db("my_appointments");
$check = mysql_query("SELECT * FROM appointments");
if (mysql_num_rows($check) > 0){
while ($info_check = mysql_fetch_array( $check )){
if($v== $info_check['appt_time']){
continue;
}
}
} //<-- variable $v scope ends here
?>
<option value="<?php echo $v; ?>"><?php echo $v; ?></option> //<-- Move this line into while loop and try
<? } ?>
</select>
新的while循环看起来像
while ($info_check = mysql_fetch_array( $check )){
if($v== $info_check['appt_time']){
continue;
}
echo "<option value=". $v .">".$v."</option>";
}
答案 1 :(得分:0)
您不需要一次又一次地连接数据库。您也不需要一次又一次地发送选择查询。此外,如果您不使用&lt;其他人,则更容易阅读您的代码。 ? ? &GT;所有的时间,并通过适当的格式化工作。
以下是您的代码的外观示例。我没有测试它,但它应该更有效率,并且应该按照你想要的方式工作。
<?php
#You should put this in something like config.inc.php and include the file here
#Don't(!) put the mysql_connect in a loop. That will decrease performance.
mysql_connect("localhost", "user", "pass");
mysql_select_db("my_appointments");
#I expect your database doesn't change during the foreach loop, so there is no need to read the db more than once
$check = mysql_query("SELECT * FROM appointments");
$dbEntryCount = mysql_num_rows($check);
for ($i=0; $i < $dbEntryCount; $i++)
{
$info_check = mysql_fetch_array( $check );
$database_range[]=$info_check['appt_time'];
}
$start = strtotime('09:00am');//one hour less my stores start time
$end = strtotime('8:00pm');//my stores stop time
$range = array();
while ($start !== $end)
{
$start = strtotime('+60 minutes',$start);
$range[] = date('h:ia', $start);
}
echo '
<select name="appt_time">
<option value=""> - - - Choose - - - </option>
';
foreach ($range as $key=> $v)
{
#http://us2.php.net/manual/en/function.in-array.php
if (in_array($v, $database_range))
{
continue;
}
echo '<option value="'.$v.'">'.$v.'</option>';
}
echo '</select>';
&GT;
编辑: 有人询问你用于appt_time的变量类型。你可以使用var_dump($ database_range);的var_dump($范围);在代码的末尾(在?&gt;之前)检查两个数组是否使用相同的格式。
编辑: 谢谢......我编辑了
{
$info_check = mysql_fetch_array( $check )
$database_range[i]=$info_check['appt_time']
}
到
{
$info_check = mysql_fetch_array( $check );
$database_range[]=$info_check['appt_time'];
}
现在效果很好。