我正在尝试构建一个简单的出勤脚本,其中包含users表中的成员。我有一个脚本来构建表格,并显示今天的日期以及本月剩余时间。
我还有一个打印出单个用户的脚本,这些用户希望每个列都有一个复选框,直到日期延伸到。
我有一个用于打印用户的foreach语句,但是如果我将<td><input type="checkbox"/></td>
放入此foreach语句中,则只填充第一列日期。
如果我把它放在输出<th>
日期的for语句中,那么它会附加<th>
中的复选框,而这不是我想要的。
我不是最好的程序员,所以我不确定我应该使用哪种方法来实现这一点,到目前为止,我所做的很简单,如果你看下面你就能看到我是怎样的我们做到了这一点:
要重新解决问题,我无法在下面的代码中附加每个日期值的复选框,该代码会将当天日期的日期打印到设置的日期。
欢迎任何想法或意见。
public function viewall() {
$sth = $this->db->prepare("SELECT * FROM users");
$sth->execute();
/* Fetch all of the values of the first column */
$result = $sth->fetchAll(PDO::FETCH_ASSOC);
$startDate = new DateTime();
$endDate = new DateTime('2013-09-31');
$days = array();
echo "<table>
<tr>
<th>Firstname</th>
<th>Lastname</th>";
for ($c = $startDate; $c <= $endDate; $c->modify('+1 day')) {
echo "<th>".$c->format('d')."</th>"; }
echo "</tr>";
foreach($result as $row) {
$firstname = $row['firstname'];
$lastname = $row['lastname'];
echo "<tr>";
echo "<td>$firstname</td>";
echo "<td>$lastname</td>";
}
echo "<td><input type='checkbox'/></td></tr>";
echo "</table>";}
图1显示问题
图2显示了它应该如何看待
答案 0 :(得分:1)
以下是基于屏幕截图的解决方案。
<?php
public function viewall() {
$sth = $this->db->prepare("SELECT * FROM users");
$sth->execute();
/* Fetch all of the values of the first column */
$result = $sth->fetchAll(PDO::FETCH_ASSOC);
$startDate = new DateTime();
$endDate = new DateTime('2013-09-31');
echo "<table>
<tr>
<th>Firstname</th>
<th>Lastname</th>";
for ($c = clone $startDate; $c <= $endDate; $c->modify('+1 day')) {
echo "<th>".$c->format('d')."</th>";
}
echo "</tr>";
foreach($result as $row) {
echo "<tr>";
echo "<td>" . $row['firstname'] . "</td>";
echo "<td>" . $row['lastname'] . "</td>";
for($c = clone $startDate; $c <= $endDate; $c->modify('+1 day')) {
echo "<td><input type='checkbox'/></td>";
}
echo "</tr>";
}
echo "</table>";
}
?>
编辑:添加clone
以正确复制对象
答案 1 :(得分:0)
我对您的问题不太清楚,但我认为以下代码可能有所帮助:
public function viewall()
{
$sth = $this->db->prepare("SELECT * FROM users");
$sth->execute();
/* Fetch all of the values of the first column */
$result = $sth->fetchAll(PDO::FETCH_ASSOC);
$startDate = new DateTime();
$endDate = new DateTime('2013-09-31');
$days = array();
echo "<table>
<tr>
<th>Firstname</th>
<th>Lastname</th>";
for ($c = $startDate; $c <= $endDate; $c->modify('+1 day'))
{
echo "<th>" . $c->format('d') . "</th>";
}
echo "</tr>";
foreach ($result as $row)
{
$firstname = $row['firstname'];
$lastname = $row['lastname'];
echo "<tr>";
echo "<td>$firstname</td>";
echo "<td>$lastname</td>";
$startDate = new DateTime();
$endDate = new DateTime('2013-09-31');
for ($c = $startDate; $c <= $endDate; $c->modify('+1 day'))
{
echo "<td><input type='checkbox'/></td>";
}
echo "</tr>";
}
echo "</table>";
}
我无法访问db,所以我无法测试它,我想说的是,tr或th代表一个表行,td是孩子,每行的孩子的数量应该是相同的。