Ir para conteúdo
Fórum Script Brasil
  • 0

horario php+mysql


nmoa

Pergunta

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

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

:)

 

Link para o comentário
Compartilhar em outros sites

7 respostass a esta questão

Posts Recomendados

  • 0

eu acho que é porque você está imprimindo somente o primeiro resultado de $hor["titulo"], acredito que dentro desse titulo você precise puxar os outros valores.

Como voce está usando somente 1 while ele está seguindo por row, mas como voce tem mais de um resultado dentro do seu titulo voce deveria criar um foreach para os titles.

Não testei então não tenho certeza mas acredito que seja isso.

 

da um vardump e ve a saida como está.;

Link para o comentário
Compartilhar em outros sites

  • 0
6 minutos atrás, Marcos Renato disse:

eu acho que é porque você está imprimindo somente o primeiro resultado de $hor["titulo"], acredito que dentro desse titulo você precise puxar os outros valores.

Como voce está usando somente 1 while ele está seguindo por row, mas como voce tem mais de um resultado dentro do seu titulo voce deveria criar um foreach para os titles.

Não testei então não tenho certeza mas acredito que seja isso.

 

da um vardump e ve a saida como está.;

como seria esse foreach ? sendo que as horas do horário são colocadas pelo utilizador , ou seja não são seguidas podem ser 9:00, 9:15: 9:45 ...

Link para o comentário
Compartilhar em outros sites

  • 0

disseram para fazer algo assim

mas noa funciona

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

aquele for não pode ser assim...pois as horas são definidas em base de dados

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...