Ir ao conteúdo
  • Cadastre-se

horário em php+mysql


Posts recomendados

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><span class="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

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

Link para o comentário
Compartilhar em outros sites

  • Moderador

@Nuno Alho Bem, olhando por cima.. a primeira coisa que notei foi que suas tabelas tem o engine MyISAM.  Como você está fazendo relacionamentos e usando INNER JOIN, a engine das tabelas precisam ser innoDB.

 

Sobre seu problema, não sei dizer com certeza porque aparece só um, mesmo colocando dentro do laço de while.

Mas uma solução que pode funcionar é você acrescentar o campo do dia nas atividades para fazer a query no SQL de acordo com o dia.

 

 

Link para o comentário
Compartilhar em outros sites

ois

pois penso ser mesmo esse o problema...deveria criar um for qualquer

mas as horas são colocadas pelo utilizador e nao automaticas, ou seja existem horas 9:00, 9:15: 9:45 ....

 

adicionado 32 minutos depois

disseram-me para fazer assim :

		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>';
}	

mas nao aparece nada, e o for deveria ir buscar a hora à base de dados e não automatica

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...