horario em php+mysql

nmoa77

Membro
boas

estou a fazer um horário para um site e estou com alguma dificuldade em mostrar as actividades.

o horário terá várias horas, cada hora terá várias actividades espalhadas pelos dias de semana

o meu código está assim

<?php
$horarios = mysql_query("SELECT *, hact.hora as hora, hact.id_dias_semana as dia, hact.id_atividades as ativ, act.titulo as titulo FROM horarios as h
INNER JOIN horarios_atividade as hact ON hact.id_horarios= h.id_horarios
INNER JOIN atividades as act ON act.id_atividades=hact.id_atividades
WHERE hact.id_dias_semana != '' group by hact.hora order by hact.hora ");
while($hor=mysql_fetch_array($horarios)){

?>
<ul>
<li><spanclass="fa fa-clock-o"></span><?php echo $hor["hora"];?></li>

<li class="<?php if($hor["dia"]==1){ echo 'dt-sc-table-cnt timetable-text';}?>"><a><?php if($hor["dia"]==1){echo $hor["titulo"];} ?></a></li>
<li class="<?php if($hor["dia"]==2){ echo 'dt-sc-table-cnt timetable-text';}?>"><a><?php if($hor["dia"]==2){echo $hor["titulo"];} ?></a></li>
<li class="<?php if($hor["dia"]==3){ echo 'dt-sc-table-cnt timetable-text';}?>"><a><?php if($hor["dia"]==3){echo $hor["titulo"];} ?></a></li>
<li class="<?php if($hor["dia"]==4){ echo 'dt-sc-table-cnt timetable-text';}?>"><a><?php if($hor["dia"]==4){echo $hor["titulo"];} ?></a></li>
<li class="<?php if($hor["dia"]==5){ echo 'dt-sc-table-cnt timetable-text';}?>"><a><?php if($hor["dia"]==5){echo $hor["titulo"];} ?></a></li>
<li class="<?php if($hor["dia"]==6){ echo 'dt-sc-table-cnt timetable-text';}?>"><a><?php if($hor["dia"]==6){echo $hor["titulo"];} ?></a></li>
<li class="<?php if($hor["dia"]==7){ echo 'dt-sc-table-cnt timetable-text';}?>"><a><?php if($hor["dia"]==7){echo $hor["titulo"];} ?></a></li>

</ul>
<?php };?>
a questao é que ele agrupa tudo pelas horas(perfeito) mas só mostra uma atividade nessa hora, quando na realidade existem mais 3 na base de dados

imagem.jpg


a minha bd esta assim

--Estrutura da tabela `atividades`
--

CREATE TABLE `atividades`(
`id_atividades`int(11) NOT NULL,
`titulo` text NOT NULL,
`ativo`int(11) NOT NULL DEFAULT '1',
`likes`int(11) NOT NULL,
`file` varchar(2222) NOT NULL,
`id_area`int(11) NOT NULL,
`descricao` text NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;



--Estrutura da tabela `dias_semana`
--

CREATE TABLE `dias_semana`(
`id_dias_semana`int(11) NOT NULL,
`titulo` text NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1;



--Estrutura da tabela `horarios`
--

CREATE TABLE `horarios`(
`id_horarios`int(11) NOT NULL,
`id_clubes`int(11) NOT NULL,
`data` date NOT NULL,
`ativo`int(11) NOT NULL DEFAULT '1'
) ENGINE=MyISAM DEFAULT CHARSET=latin1;



--Estrutura da tabela `horarios_atividade`
--

CREATE TABLE `horarios_atividade`(
`id_horarios_atividade`int(11) NOT NULL,
`id_atividades`int(11) NOT NULL,
`id_horarios`int(11) NOT NULL,
`id_dias_semana`int(11) NOT NULL,
`hora` time NOT NULL,
`ativo`int(11) NOT NULL DEFAULT '1'
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
obrigado desde já pela a ajuda

default_smile.png
 
"a questao é que ele agrupa tudo pelas horas(perfeito) mas só mostra uma atividade nessa hora, quando na realidade existem mais 3 na base de dados"

Apenas mostra 1 atividade do dia ou da semana toda?

Não tens qualquer tipo de loops para continuar a verificar se existem mais atividades, pelo que dá para perceber pelo código, ele para assim que encontra uma atividade e segue para a linha de código a seguir.
 
"a questao é que ele agrupa tudo pelas horas(perfeito) mas só mostra uma atividade nessa hora, quando na realidade existem mais 3 na base de dados"

Apenas mostra 1 atividade do dia ou da semana toda?

Não tens qualquer tipo de loops para continuar a verificar se existem mais atividades, pelo que dá para perceber pelo código, ele para assim que encontra uma atividade e segue para a linha de código a seguir.


boas
ele está a fazer isso mesmo a mudar de linha por atividade, e o que se prentende é que ele cheque a cada hora existente quais as actividades existentes
 
while($hor=mysql_fetch_array($horarios)){

$dia = $hor['dia'];
$hora = $hor['hora'];
$titulo = $hor['titulo'];


if (!array_key_exists($dia, $dados)) {
$dados[$dia] = [];
}


if (!array_key_exists($hora, $dados[$dia])){
$dados[$dia][$hora] = [];
$dados[$dia][$hora][] = $titulo;
}
print_r($dados[$dia][$hora]);
}

for ($hora = 7; $hora <= 24; ++$hora) {


echo '<ul>';
echo ' <li><span class="fa fa-clock-o"></span>'. str_pad($hora, 2, '0', STR_PAD_LEFT) . ':00</li>';
for ($dia = 1; $dia <= 7; ++$dia) {
$class = '';
$links = '';

if (array_key_exists($dados[$dia]) && array_key_exists($dados[$dia][$hora]))
{
$class = 'dt-sc-table-cnt timetable-text';
foreach ($dados[$dia][$hora] as $titulo)
$links += '<a>'.$titulo.'</a>';
}

echo '<li class="'.$class.'">'.$links.'</li>';
}
echo '</ul>';
}

disseram-me para fazer assim mas o for nao esta bem ...deverá buscar as horas da base de dados
 
while($hor=mysql_fetch_array($horarios)){

$dia = $hor['dia'];
$hora = $hor['hora'];
$titulo = $hor['titulo'];


if (!array_key_exists($dia, $dados)) {
$dados[$dia] = [];
}


if (!array_key_exists($hora, $dados[$dia])){
$dados[$dia][$hora] = [];
$dados[$dia][$hora][] = $titulo;
}
print_r($dados[$dia][$hora]);
}

for ($hora = 7; $hora <= 24; ++$hora) {


echo '<ul>';
echo ' <li><span class="fa fa-clock-o"></span>'. str_pad($hora, 2, '0', STR_PAD_LEFT) . ':00</li>';
for ($dia = 1; $dia <= 7; ++$dia) {
$class = '';
$links = '';

if (array_key_exists($dados[$dia]) && array_key_exists($dados[$dia][$hora]))
{
$class = 'dt-sc-table-cnt timetable-text';
foreach ($dados[$dia][$hora] as $titulo)
$links += '<a>'.$titulo.'</a>';
}

echo '<li class="'.$class.'">'.$links.'</li>';
}
echo '</ul>';
}

disseram-me para fazer assim mas o for nao esta bem ...deverá buscar as horas da base de dados

O problema de ir buscar as horas à DB é que se fechares ou desligarem o server o tempo para de passar. É sempre mais fácil ir buscar a data/hora a um servidor de tempo.

Um bom manual sobre o "FOR" http://php.net/manual/en/control-structures.for.php, é melhor tentares entender como funciona do que dar-te a resposta.
 
boas lastGod
a questão de ir buscar as horas á bd é porque estas são definidas pelo cliente, tanto podem ser 09:00 ou 09:15 ou 9:45 etc ...
o que pretendo saber é as actividades de cada dia da semana e a hora definida pela cliente
 
Back
Topo