2013-09-29 55 views
0

我有这个数据库:PHP创建表1个阵列通过数组索引操作

 
+----+------------+------------+-----------+----------+---------+------+-----------------+----------+------------+ 
| id | reservedby | date  | timestart | duration | endtime | cost | details   | status | dateadded | 
+----+------------+------------+-----------+----------+---------+------+-----------------+----------+------------+ 
| 1 | enerva  | 09/29/2013 | 9-10am | 3  | 11-12pm | 1500 | basketball dre! | pending | 0000-00-00 | 
| 2 | mangkanor | 09/30/2013 | 9-10am | 8  | 5-6pm | 4000 | Sabong Dre!  | approved | 0000-00-00 | 
+----+------------+------------+-----------+----------+---------+------+-----------------+----------+------------+ 

我用它在我的表:

正如你可以看到,9上午10点位置由Evava预留;那个小时的持续时间是3,意思是'3小时',所以结束时间是11-12点。但是,在我的表格中,我不能在上午10点到11点和下午11点到12点加入'Not Available, taken by: enerva'字符串。

这里是我的代码:

<?php 
if (isset($_GET['checkdate'])) { 
    $date = urldecode($_GET['date']); 
    echo "<br/><br/><h3>Reservations</h3>"; 
    echo $date; 
    $timearray = array("8-9am","9-10am","10-11am","11-12pm","12-1pm","1-2pm","2-3pm","3-4pm","4-5pm","5-6pm","6-7pm","7-8pm","8-9pm","9-10pm","10-11pm"); 
    $tablecolor = 1; 
    echo "<table style='width: 90%;'>"; 
    echo "<tr>"; 
     echo "<th>"; 
      echo "Time"; 
     echo "</th>"; 
     echo "<th>"; 
      echo "Status"; 
     echo "</th>"; 

    echo "</tr>"; 
    foreach ($timearray as $timearrays) { 
     if($tablecolor %2 == 0) { 
      echo "<tr>"; 
     } 
     else { 
      echo "<tr style='background-color: rgb(0,100,255); background: rgb(0,100,255);'>"; 
     } 

      echo "<th>"; 
      echo "<h3>$timearrays</h3>"; 
      echo "</th>"; 
      echo "<td>"; 
      $sql = "SELECT * FROM reservation WHERE date = '$date' AND timestart = '$timearrays'"; 
      $result = mysql_query($sql); 
      if(mysql_num_rows($result) == 0){ 
       echo "<a href='#'><h3 style='color: rgb(255,0,0);'>Reserve</h3></a>"; 
      } 
      else { 
       while($row = mysql_fetch_array($result)) { 
        $reservedby = $row['reservedby']; 
      } 
       echo "<h3>Not Available, taken by: $reservedby.</h3>"; 
      } 
      echo "</td>"; 
     echo "</tr>"; 
     $tablecolor++; 
    } 
    echo "</table>"; 
} 
?> 

我猜我必须在每次循环使用一个计数器的时间和减少它趋向于零。计数器不为零时,表格将显示'not available, reserved by: enerva'字符串;一旦达到零,它将显示'reserve'链接。但我找不到办法。

有没有什么办法或者其他的方式来做到这一点?我应该看看indexof数组,找出starttime和endtime两个索引之间的区别吗?

+1

我可以建议你为'date','timestart','duration'和'endtime'列使用时态数据类型吗?事实上,前两者应该可以合并成一个专栏;保留后两者是多余的。 – eggyal

+0

一个大问题:是否有可能在同一时间有不同的保留? – Sylvain

+0

你肯定需要在这里重构。作为@eggyal所说的,除了每小时查询数据库的效率非常低。查询并保存到阵列(实际上可以用作散列表)一次所有需要的数据库行,然后在创建数组期间,检查数组是否包含适当的条目。 – kasitan

回答

-1

试试这个

else { 
    while($row = mysql_fetch_array($result)) { 
     echo "<h3>Not Available, taken by: $row[reservedby].</h3>"; 
     echo "</td>"; 
     echo "</tr>"; 
    }    
} 
+0

@Kay Singian试试这一个 – Mubin

0

从你的回答我的评论,它不会是本身有问题,但你可能要显示无论是在不同的列同时保留(有点棘手,在现有处理代码)或只是在相同的<td></td>中,用<br />分开。这是我会去的,是一种懒惰有时:)

为了您的具体问题,只需使用duration列在你的数据库中while循环与增量计数器:

$i = 1; 
while ($i <= $row['duration']) { 
    echo 'Not available'; 
    $i = $i+1; 
} 

有点过于简单化,但它应该做的伎俩。

在您的并发预留问题上,实际上最好更改数据库(如果您不想以此方式工作,则不是“重构”):因为所有时间间隔都是1小时,只需输入开始时间以24小时格式,并将您的sql查询更改为"SELECT * FROM reservation WHERE date = '$date' ORDER BY timestart;"。使用多维数组,您可以将该键与开始时间进行比较,并且仍然像以前一样显示时间段。

编辑: 找到一种方法,以更快的方式提供帮助。您只需在数据库中以24小时格式输入开始和结束时间,以便下面的代码工作。如前所述,我没有时间去测试它,但我不知道它会在哪里失败。

<?php 
if (isset($_GET['checkdate'])) { 
    $date = urldecode($_GET['date']); 
    echo "<br/><br/><h3>Reservations</h3>"; 
    echo $date; 
    $timearray = array(8,9,10,11,12,13,14,15,16,17,18,19,20,21,22); 
    $tablecolor = 1; 
    echo "<table style='width: 90%;'>"; 
    echo "<tr>"; 
     echo "<th>"; 
      echo "Time"; 
     echo "</th>"; 
     echo "<th>"; 
      echo "Status"; 
     echo "</th>"; 

    echo "</tr>"; 
    foreach ($timearray as $timearrays) { 
     if($tablecolor %2 == 0) { 
      echo "<tr>"; 
     } 
     else { 
      echo "<tr style='background-color: rgb(0,100,255); background: rgb(0,100,255);'>"; 
     } 

      echo "<th>"; 
      if ($timearrays == 8) {echo "<h3>8-9am</h3>";} 
      //Develop your timeslots here to display as required 
      echo "</th>"; 
      echo "<td>"; 
      $sql = "SELECT * FROM reservation WHERE date = '$date' AND timestart >= $timearrays AND endtime <= $timearrays;"; 
      $result = mysql_query($sql); 
      if (mysql_num_rows($result) == 0) { 
       echo "<a href='#'><h3 style='color: rgb(255,0,0);'>Reserve</h3></a>"; 
      } else { 
       echo "<h3>Not Available, taken by: $reservedby.</h3>"; 
       while($row = mysql_fetch_array($result)) { 
        echo "<br />" . $row['reservedby']; 
       } 
      } 
      echo "</td>"; 
     echo "</tr>"; 
     $tablecolor++; 
    } 
    echo "</table>"; 
} 
?> 
+0

你的答案似乎是正确的,但我不是很擅长它,因为它非常棘手。你可以给我一个工作的PHP系统吗?我会给你我的电子邮件。谢谢 –

+0

我只会用更多的代码编辑我的答案,但它不会被测试。 – Sylvain

+0

应该工作,让我知道。 – Sylvain