2011-03-08 8 views
2

"이름, 일요일, 월요일, 화요일, 수요일, 목요일, 금요일, 토요일"열이있는 HTML 테이블로 구성된 "7 일 일정"을 디자인하는 최선의 방법을 생각해 보려고합니다. HTML 테이블 행은 내 데이터베이스의 데이터로 채워집니다. 이름은 사람 이름을 가지며 일요일에는 일요일에해야 할 일, 즉 "칫솔질"등을 보여줄 것입니다. 이는 성취하고자하는 것을 제외하고 사건 달력과 매우 비슷합니다. 단순한 7 일간, 일요일에서 토요일까지의 견해.PHP MySQL 7 일, 매주, 월 - 금 달력이있는 페이지 매김?

현재 데이터베이스는 "Name, EventDetails, EventDate"로 구성됩니다. 때마다 페이지가로드, 스크립트가 데이터베이스를 조회하고있을 경우 표시됩니다

내 논리 ... "- 일요일 - 월요일 - - 화요일 이름"

내 HTML 테이블 컬럼

는 열로 구성 현재 시청중인 7 일 중 하나와 동일한 EventDate 항목입니다. EventDate가 일치하면 해당 날짜의 해당 HTML 테이블 열과 일치하는 행에 자체가 나열됩니다. "이전 주"또는 "다음 주"를 클릭하면 다른 주로 바뀌므로 스크립트를 다시 시작해야하지만 이번에는 다른 일 목록을 사용하여 확인합니다.

누구든지 이러한 목표를 달성하기 위해 무엇을 생각해 낼 수 있습니까?

내가 지금까지 생각해 낸 점은 ... 문제는 사람 아래에 여러 이벤트가있는 경우 각 이벤트마다 새 행을 만드는 반면에 각 이벤트를 한 행에 나열하십시오.

<table border='1'> 
     <tr> 
      <th>Name</th> 
      <th>Sunday</th> 
      <th>Monday</th> 
      <th>Tuesday</th> 
      <th>Wednesday</th> 
      <th>Thursday</th> 
      <th>Friday</th> 
      <th>Saturday</th> 
     </tr> 
    <?php 


    function getCurrentWeek() 
    { 
     $weekArray = array(); 

     // set the current date 
     $date = date("m/d/Y"); //'03/08/2011'; 

     $ts = strtotime($date); 

     // calculate the number of days since Monday 
     $dow = date('w', $ts); 
     $offset = $dow - 0; 
     if ($offset < 0) $offset = 6; 

     // calculate timestamp for the Monday 
     $ts = $ts - $offset*86400; 

     // loop from Monday till Sunday 
     for ($i=0; $i<7; $i++, $ts+=86400){ 
      $temp_date = date("Y-m-d", $ts); // Reformat the dates to match the database 
      array_push($weekArray, $temp_date); 
     } 

     return($weekArray); 

    } 

    $currentWeek = getCurrentWeek(); 

    // Loop through the data array 
    while($row = mysql_fetch_array($result)){ 

     $eventDate= $row['EventDate']; 

     // Loop through the currentWeek array to match a date from the database from a date in the current week 
     foreach ($currentWeek as $weekDay){ 

      // If there is a matching date... 
      if ($eventDate == $weekDay) { 
       echo "<tr><td>".$row['Name']."</td>"; 

       foreach ($currentWeek as $weekDay2){ 
        if ($eventDate == $weekDay2) 
         echo "<td>".$row['EventName']."</td>"; 
        else 
         echo "<td></td>"; 
       } 

       echo "</tr>"; 

      } 
     } 
    } 

    ?> 

    </table> 
+0

코드를 작성 했습니까? 왜 거기에 무료 PHP 캘린더 스크립트가 많이있을 때 이것을 처음부터 작성하려고합니까? – drudge

+0

나는 내가 지금까지 가지고있는 것을 포함시켰다. 또한, 나는 이미 저 밖에있는 내용을 복사하여 붙여 넣기를 원하지 않았습니다. 왜냐하면 그것은 저에게 많은 학습 경험이 될 수 없기 때문입니다. 나는 이것으로 시작하고있다. – Giovanni

답변

2

, 나는 @adate - @weekday하지 않습니다 작업을 사용하여 해당

SELECT * FROM TableWithEvents 
WHERE TableWithEvents.EventDate 
     BETWEEN date_sub(@adate,interval @weekday day) 
     AND date_add(@date,INTERVAL ([email protected]) DAY); 

주의 할 거라고 당신이 다음 주 선택

set @weekday:= dayofweek(@adate); 
set @StartOfWeek:= date_sub(@adate,INTERVAL @weekday DAY); 
set @EndOfWeel:= date_add(@adate,INTERVAL (7- @weekday) DAY); 

같은 일을 할 수있는 주 선택 당신은 바보 간격 구문과 함께 date_sub/date_add를 사용해야합니다. 월을 추가 할 때 일년 중 일수를 늘리거나 윤년을 알 수있는 연도를 올바르게 추가하는 것이 좋습니다.

페이지 매김의 경우 위의 SELECT를 limit start, end와 함께 사용할 수 있습니다. 같은 :

SELECT * FROM sometable WHERE some_where_thingy LIMIT 0,20; 

O는 EventDate 필드에 인덱스를 추가하는 것을 잊지 않고.
그리고 자동 증가 기본 키 id을 이벤트가있는 테이블에 추가하는 것이 좋습니다.
당신이 고유과 같이, 다른 테이블에 특정 이벤트에 링크 할 수 있습니다 그 방법 :

Table FavEvents: 
- id: integer (autoinc primary) 
- Event_id: integer (link to your event) 
- FanName: varchar(x) (name of user you loves event or what ever) 

는 그런 다음과 같이의 즐겨 찾기 이벤트 "법안"을 선택할 수 있습니다 : 나는 결코 사용하지

SELECT * FROM FavEvents 
INNER JOIN Events ON (FavEvents.Event_id = Event.id) 
WHERE FavEvents.FanName = "bill" 

PHP는 당신을 도와 줄 수 없습니다, 행운을 빈다.