我不确定我做错了什么,但基本上我试图将月中的日期通过数组(已完成),但是在预订日期内的日期范围从我的{ {1}}表具有不同的外观,这是它目前的外观
trips
我想要输出这样的地方..
http://oi60.tinypic.com/2zzrc03.jpg
代码在大多数情况下都有效,但是对于有多个事件的月份,它会重复这个月并显示自己月份行中的日期
这是我的代码,是的我知道它是mysql,但目前这是一个本地项目,所以我努力让它在我迈向这一步之前发挥作用。
March 1[2 3 4 5]6[7 8 9 10]
我只是想知道我的编码是否错误,或者我是否应该尝试使用替代方法来实现目标?任何建议表示赞赏。
答案 0 :(得分:1)
通过玩耍和与人交谈,我得到了它,我删除了对日历表的需求并更改了数组。
<?php
function date_range($first, $last, $step = '+1 day', $output_format = 'Y-m-d' ) {
$dates = array();
$current = strtotime($first);
$last = strtotime($last);
while( $current <= $last ) {
$dates[] = date($output_format, $current);
$current = strtotime($step, $current);
}
return $dates;
}
?>
<table width="100%" cellspacing="0" cellpadding="0">
<?php
$cmonth = date('F');
$cyear = date('Y');
$sql = "SELECT * FROM trips WHERE year(start_date) = '$cyear' ORDER BY start_date ASC";
$res = mysql_query($sql);
$array_days = array();
while ($rows = mysql_fetch_array($res)) {
$all_dates[] = array('start'=>strtotime($rows['start_date']),'end'=>strtotime($rows['end_date']));
$selected_dates = date_range(date("Y-m-d",strtotime($rows['start_date'])), date("Y-m-d",strtotime($rows['end_date'])));
foreach($selected_dates as $selected_date){
$array_days[$selected_date] = date("d",strtotime($selected_date));
}
}
$current_month = date("m");
$next_6_month = date("m", strtotime("+5 month", strtotime(date("F") . "1")));
for($i=$current_month;$i<=$next_6_month;$i++){ // 12 months in year
?>
<tr>
<td width="40px"><?php echo date('M', mktime(0, 0, 0, $i,10, $cyear)); ?></td>
<?php
$days_in_month = cal_days_in_month(CAL_GREGORIAN,$i,$cyear);
foreach(range(1, $days_in_month) as $days)
{
if(array_key_exists(date('Y-m-d', mktime(0, 0, 0, $i,$days, $cyear)),$array_days)){
echo "<td style='text-align:center;background-color:ccc' width='12px'>$days</td>";
}else{
echo "<td style='text-align:center;' width='12px'>$days</td>";
}
}
?>
</tr>
<?php } ?>
</table>
答案 1 :(得分:0)
首先使用预处理语句和mysqli,因为使用当前的方法,你可以注入sql!
尝试使用SELECT DISTINCT