Я пытаюсь создать простой скрипт посещаемости, в котором есть члены в таблице пользователей. У меня есть скрипт, который строит таблицу и показывает мне сегодня дату вместе с остальной частью месяца.
У меня также есть сценарий, который печатает отдельные пользователи, а рядом с этими пользователями я хочу иметь флажок в каждом столбце, насколько это касается дат.
У меня есть инструкция foreach для печати пользователей, однако, если я поставлю <td><input type="checkbox"/></td>
в этот оператор foreach, это заполняет только первый столбец дат.
Если я поместил его в оператор for, который выводит мои <th>
даты, тогда он добавляет флажок в <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 ПОКАЖЕТ КАК ЭТО СЛЕДУЕТ СМОТРЕТЬ
Вот решение, основанное на снимках экрана.
<?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>";
}
?>
EDIT: добавлен clone
для правильной копии объекта
Я не очень понимаю вашу проблему, но я думаю, что следующие коды могут помочь:
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 - это дети, каждый счетчик строк должен быть таким же.