Jump to content
nmoa

Horário PHP+MySQL

Recommended Posts

nmoa

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

http://www.duit.pt/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

:)

Share this post


Link to post
Share on other sites
tiago.f

Olá,

não tive tempo de olhar para o código todo mas deixo já uma questão.

Dizes "só mostra uma atividade nessa hora": tens a certeza que o teu query retorna todas as actividades de cada hora?

é que tens "group by hact.hora" portanto para cada hora terás apenas um valor.

Confirma se de facto o query te devolve tudo o que deveria....

  • Vote 1

Share this post


Link to post
Share on other sites
nmoa
Em 19/05/2017 às 11:40, tiago.f disse:

Olá,

não tive tempo de olhar para o código todo mas deixo já uma questão.

Dizes "só mostra uma atividade nessa hora": tens a certeza que o teu query retorna todas as actividades de cada hora?

é que tens "group by hact.hora" portanto para cada hora terás apenas um valor.

Confirma se de facto o query te devolve tudo o que deveria....

 

se eu tirar o group aparece tudo, mas em linhas separadas

Share this post


Link to post
Share on other sites
HappyHippyHippo
7 minutes ago, nmoa said:

se eu tirar o group aparece tudo, mas em linhas separadas

 

porque não faz sentido teres o output como está apresentado

primeiro trata dos dados e só depois da apresentação


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
nmoa
7 minutos atrás, HappyHippyHippo disse:

porque não faz sentido teres o output como está apresentado

primeiro trata dos dados e só depois da apresentação

sugestões?

obrigado

 

Share this post


Link to post
Share on other sites
nmoa
13 minutos atrás, HappyHippyHippo disse:

data crunch e só depois data presentation

não estou e entender...algum exemplo?

 

Share this post


Link to post
Share on other sites
tiago.f

Primeiro garantes que obtens da BD o que precisas.

Depois iteras sobre os dados e apresentas (constrói-se o HTML) como queres...

Share this post


Link to post
Share on other sites
nmoa
2 minutos atrás, tiago.f disse:

Primeiro garantes que obtens da BD o que precisas.

Depois iteras sobre os dados e apresentas (constrói-se o HTML) como queres...

preciso de ajuda é para a bd que deve estar a faltar algum parametro para ela me mostrar os dados todos...se nao colocar o group ela da todos os dados direitinhos...

agora preciso no php conseguir que a informação seja agrupada por hora, e que ele mostre nessa hora as atividades por dias de semana

 

 hora      	dia 	ativ 	titulo
08:00:00 	1 	1 	Body Pump
08:00:00 	3 	7 	Zumba Kids
08:00:00 	2 	3 	Body Attack
09:00:00 	2 	5 	Step

 

Share this post


Link to post
Share on other sites
HappyHippyHippo

como já te foi dito : primeiro fazes uma leitura dos dados, juntas-os como bem entenderes, e só depois de ter os dados é que vais escrever o HTML como pretendes ...

que mais queres ? o código feito ?


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
nmoa
1 hora atrás, HappyHippyHippo disse:

como já te foi dito : primeiro fazes uma leitura dos dados, juntas-os como bem entenderes, e só depois de ter os dados é que vais escrever o HTML como pretendes ...

que mais queres ? o código feito ?

sim pretendia alguma coisa desse genero sim, ou um exemplo.....quando uma pessoa vem a estes fóruns é porque não consegue resolver o problema de outra forma e está a procura que alguém o ajude,  opinar cenas vagas não acrescenta nada na resolução da questão colocada....

dizes ah e tal tens que fazer uma leitura dos dados (já não está feita?!!?!?) se calhar se me ajudares a fazer essa leitura tudo o resto se resolve....mas já te conheço e as tuas ajudas são sempre irónicas....

 

obrigado na mesma

 

Share this post


Link to post
Share on other sites
HappyHippyHippo
3 minutes ago, nmoa said:

sim pretendia alguma coisa desse genero sim, ou um exemplo.....quando uma pessoa vem a estes fóruns é porque não consegue resolver o problema de outra forma e está a procura que alguém o ajude,  opinar cenas vagas não acrescenta nada na resolução da questão colocada....

dizes ah e tal tens que fazer uma leitura dos dados (já não está feita?!!?!?) se calhar se me ajudares a fazer essa leitura tudo o resto se resolve....mas já te conheço e as tuas ajudas são sempre irónicas....

 

obrigado na mesma

 

as ajudas não são irónicas, eu disse-te o que tens de fazer ... se fossem assim más como referes, não terias outra pessoa a dizer exactamente o mesmo neste mesmo tópico

e não, a leitura de dados não está feita, fazer uma query não é ler dados, é pedir algo à base de dados. quando se diz "ler os dados" é exatamente isso : ler os dados para uma estrutura qualquer no PHP, estrutura essa que mimifica o que pretendes fazer para que somente depois a possas usar para criar o output pretendido.

algo como :

$dados = [];
// ciclo de leitura dos dados da base de dados
while (...)
{
  // guardar os dados na estrutura apropriada
}

// só agora é que vais efectuar a apresentação dos dados
while (...)
{
  // apresentar informação do dia X ...
}

 


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
nmoa
3 minutos atrás, HappyHippyHippo disse:

as ajudas não são irónicas, eu disse-te o que tens de fazer ... se fossem assim más como referes, não terias outra pessoa a dizer exactamente o mesmo neste mesmo tópico

e não, a leitura de dados não está feita, fazer uma query não é ler dados, é pedir algo à base de dados. quando se diz "ler os dados" é exatamente isso : ler os dados para uma estrutura qualquer no PHP, estrutura essa que mimifica o que pretendes fazer para que somente depois a possas usar para criar o output pretendido.

algo como :


$dados = [];
// ciclo de leitura dos dados da base de dados
while (...)
{
  // guardar os dados na estrutura apropriada
}

// só agora é que vais efectuar a apresentação dos dados
while (...)
{
  // apresentar informação do dia X ...
}

 

mas já la tenho um while que esta a verificar o ciclo da query , depois tenho os resultados a sair com echo ...

Share this post


Link to post
Share on other sites
HappyHippyHippo
3 minutes ago, nmoa said:

mas já la tenho um while que esta a verificar o ciclo da query , depois tenho os resultados a sair com echo ...

novamente : o problema é que estás a fazer tudo ao mesmo tempo

novamente : primeiro lê a informação e só depois apresenta-a

como vê o problema não é na ajuda é a tua inércia em aceitar o comentário


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
nmoa
2 minutos atrás, HappyHippyHippo disse:

novamente : o problema é que estás a fazer tudo ao mesmo tempo

novamente : primeiro lê a informação e só depois apresenta-a

como vê o problema não é na ajuda é a tua inércia em aceitar o comentário

a questão é que nunca fiz assim.... como lias a informação no primeiro while? lança dica para ver se encaixa

Share this post


Link to post
Share on other sites
HappyHippyHippo
1 minute ago, nmoa said:

a questão é que nunca fiz assim.... 

estás numa boa altura de aprender a nunca juntar lógica com apresentação, mas prontos ... mesmo que queras juntar isso tudo e não usar um template engine, e mesmo assim continuar a pedir código ...

// pedir os dados da base de dados
$sql = 'SELECT hact.id_dias_semana as dia,
               hact.hora as hora,
               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 != ''
      ORDER BY hact.id_dias_semana, hact.hora';
$horarios = mysql_query($sql);

// LER OS DADOS !!!!
$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;
}

// APRESENTAR OS DADOS
for ($hora = 8; $hora <= 24; ++$hora) {
    echo '<ul>';
    echo '  <li><span class="fa fa-clock-o">' + 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>';
}

prontos ... uma solução feita de cabeça ... se não funciona correctamente, corrige o que que está mal ...


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
nmoa

ok obrigado

mas e se as horas não forem automáticas e se forem colocadas pelo utilizador? pois temos horas 9:00 , 9:30; 9:45 ....

mais uma vez obrigado pela paciência

Share this post


Link to post
Share on other sites
HappyHippyHippo
10 minutes ago, nmoa said:

ok obrigado

mas e se as horas não forem automáticas e se forem colocadas pelo utilizador? pois temos horas 9:00 , 9:30; 9:45 ....

mais uma vez obrigado pela paciência

tiras a lista de horas da lista de dados ou ainda mais cedo, durante o cicle de leitura de dados


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
nmoa
14 minutos atrás, HappyHippyHippo disse:

tiras a lista de horas da lista de dados ou ainda mais cedo, durante o cicle de leitura de dados

mas o for já nao pode ficar assim

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

 

Share this post


Link to post
Share on other sites
HappyHippyHippo

claro que nao... Vai ter um array com as horas existentes


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.