msmarins 2 Denunciar post Postado Outubro 2, 2014 Olá a todos! Tenho um formulario que a pessoa deve selecionar (select) o um horário especifico agendando um visita. As informações deste formulario vão para um banco e quando aquele horário for escolhido 6 vezes ele deve ficar indisponível. Eu fiz um tremenda ganbearra para funcionar mas tenho quase certeza que vai almentar o tráfego devido as várias querys e deve ter uma menaira mais simples. Criei um query para cada option do select e determinei duas classes para cada um. Então eu conto a quatidade de horário marcados e se forem igual a 6 eu mudo a classe para uma com o Style display:none; Está assim no mesmo documento. <?php $contagem = "SELECT * FROM matricula WHERE horario_cand1 = '8h às 8h30' "; $contando = mysql_query ($contagem); $total = mysql_num_rows($contando); $hor1 = "h_aceso"; if ($total >= 6 ){$hor1="h_apagado";} $contagem = "SELECT * FROM matricula WHERE horario_cand1 = '8h30 às 9h' "; $contando = mysql_query ($contagem); $total = mysql_num_rows($contando); $hor2 = "h_aceso"; if ($total >= 6){$hor2="h_apagado";} $contagem = "SELECT * FROM matricula WHERE horario_cand1 = '9h às 9h30' "; $contando = mysql_query ($contagem); $total = mysql_num_rows($contando); $hor3 = "h_aceso"; if ($total >= 6){$hor3="h_apagado";} $contagem = "SELECT * FROM matricula WHERE horario_cand1 = '10 às 10h30' "; $contando = mysql_query ($contagem); $total = mysql_num_rows($contando); $hor4 = "h_aceso"; if ($total >= 6){$hor4="h_apagado";} $contagem = "SELECT * FROM matricula WHERE horario_cand1 = '10h30 às 11h' "; $contando = mysql_query ($contagem); $total = mysql_num_rows($contando); $hor5 = "h_aceso"; if ($total >= 6){$hor5="h_apagado";} $contagem = "SELECT * FROM matricula WHERE horario_cand1 = '11h às 11h30' "; $contando = mysql_query ($contagem); $total = mysql_num_rows($contando); $hor6 = "h_aceso"; if ($total >= 6){$hor6="h_apagado";} $contagem = "SELECT * FROM matricula WHERE horario_cand1 = '11h30 às 12h' "; $contando = mysql_query ($contagem); $total = mysql_num_rows($contando); $hor7 = "h_aceso"; if ($total >= 6){$hor7="h_apagado";} ?> <select id="horario_cand1" class="" name="horario_cand1" tabindex=""> <option value=""></option> <option class="<?php echo $hor1;?>" value="8h às 8h30">8h às 8h30</option> <option class="<?php echo $hor2;?>" value="8h30 às 9h">8h30 às 9h</option> <option class="<?php echo $hor3;?>" value="9h às 9h30">9h às 9h30</option> <option class="<?php echo $hor4;?>" value="10 às 10h30">10 às 10h30</option> <option class="<?php echo $hor5;?>" value="10h30 às 11h">10h30 às 11h</option> <option class="<?php echo $hor6;?>" value="11h às 11h30">11h às 11h30</option> <option class="<?php echo $hor7;?>" value="11h30 às 12h">11h30 às 12h</option> </select> Compartilhar este post Link para o post Compartilhar em outros sites
WilliamRodrigues 9 Denunciar post Postado Outubro 2, 2014 Faça uma só consulta contando os registros (count) agrupado pelos horários (horario_cand1). Assim você terá o resultado parecido com isso: count horario_cand1 5 8h às 8h30 2 8h30 às 9h 8 9h às 9h30 Compartilhar este post Link para o post Compartilhar em outros sites
msmarins 2 Denunciar post Postado Outubro 2, 2014 Pois é Willian, eu tentei assim e até consegui agrupar os valores, Mas eu não soube com separa-los do array e fazer a a condição. Não tenho muita habilidade! Tinha feitos assim e coloquei um echo para testar... mas "empaquei" <?php $contagem = "SELECT distinct horario_cand1, COUNT(*) AS total FROM matricula GROUP BY horario_cand1 ORDER BY total desc"; $contando = mysql_query ($contagem); $total = mysql_num_rows($contando); echo $total; while ( $count = mysql_fetch_array($contando)){ $teste = $count[1]; $teste2= $count[0]; echo $total; } ?> Compartilhar este post Link para o post Compartilhar em outros sites
WilliamRodrigues 9 Denunciar post Postado Outubro 2, 2014 Você terá que percorrer o resultado do select no while. while ( $count = mysql_fetch_array($contando)){echo "Hora: " . $count[0] . "<br/>";echo "Total: " . $count[1];} Assim você verá os resultados linha por linha. Compartilhar este post Link para o post Compartilhar em outros sites
msmarins 2 Denunciar post Postado Outubro 2, 2014 Eu entedi, mas como vou separar os recultados agrupados para colocar a condição que não permita que tenha mais de 6 escolhas naquele horário? O problema é que eu só posso permitir 6 marcações em um horário. Eu preciso criar uma condiçção a partir dos resultados em que o Cont retornar 6 (em uma posição do array) eu tenho que apagar aquele horário. Não sei se consegui explicar! Compartilhar este post Link para o post Compartilhar em outros sites
WilliamRodrigues 9 Denunciar post Postado Outubro 2, 2014 Na execução do while você poder colocar os resultados em um array para poder verificar quando está montando os <option> while ( $count = mysql_fetch_array($contando)){$res[$count[0]] = $count[1]; } Tendo esse array é só acessar o item que deseja e verificar se é maior que 6. Compartilhar este post Link para o post Compartilhar em outros sites
msmarins 2 Denunciar post Postado Outubro 2, 2014 Brother, desculpe .... eu fis isso aqui. <select id="horario_cand1" class="" name="horario_cand1" tabindex=""> <option value=""></option> <?php $contagem = "SELECT distinct horario_cand1, COUNT(*) AS total FROM matricula GROUP BY horario_cand1 ORDER BY total desc"; $contando = mysql_query ($contagem); $total = mysql_num_rows($contando); while ( $count = mysql_fetch_array($contando)){ $teste = $count[1]; $teste2= $count[0]; ?> <option value="<?php echo $teste2;?>"><?php echo $teste2;?></option> <?php } ?> </select> Confesso que viajei no que você falou! Compartilhar este post Link para o post Compartilhar em outros sites
WilliamRodrigues 9 Denunciar post Postado Outubro 2, 2014 Cara é o seguinte eu tinha falado de fazer com um array. Mas do jeito que você está fazendo é colocando na variável $teste o total e na variável $teste2 a hora. Ai quando você vai montar o <option> você tem que colocar um if verificando se $teste é >= 6 caso for colocar a class h_apagado e caso contrário h_aceso <option class="<?php if($teste >=6) { echo "h_apagado"; } else { echo "h_aceso"; } ?>" value="<?php echo $teste2; ?>"><?php echo $teste2; ?></option> Compartilhar este post Link para o post Compartilhar em outros sites
msmarins 2 Denunciar post Postado Outubro 2, 2014 Caramba cara Perfeito. Funcinou exatamente como você falou. Aí descobri outro problema... se não houverem pelo menos 7 registros a consulta vai voltar vazia o com menos horários. Que coisa ehm. Compartilhar este post Link para o post Compartilhar em outros sites
WilliamRodrigues 9 Denunciar post Postado Outubro 2, 2014 Caso não tenha registro de algum horário você não terá ele no while e com o script dessa forma ficará faltando os horários que não tem nenhum registro. Você terá que pensar em uma forma de detectar isso, quando coloquei a sugestão com array você poderia verificar se no array tem o índice de cada horário assim mesmo que o select não o traga você saberia com essa verificação. Compartilhar este post Link para o post Compartilhar em outros sites