Hewitt 14 Denunciar post Postado Outubro 22, 2015 Galera, boa tarde. Toda vez que abro a página, aparece esse erro: Warning: cal_days_in_month() [function.cal-days-in-month]: invalid date. in /home/gui/public_html/folha.php on line 202 A linha 202 é essa: $ano = date('Y'); $mes = $_POST['mes']; $total_dias = cal_days_in_month(CAL_GREGORIAN, $mes, $ano); O erro eu sei que é causado por causa do $mes, que vem de um $_POST. Como faria para corrigir isso? Compartilhar este post Link para o post Compartilhar em outros sites
Beraldo 864 Denunciar post Postado Outubro 22, 2015 Verifique o valor de $mes antes de usar na função Converta pra inteiro e verifique se está entre 1 e 12 Compartilhar este post Link para o post Compartilhar em outros sites
Hewitt 14 Denunciar post Postado Outubro 22, 2015 Então Beraldo, assim que abro a página, a função já é executada. No caso, tenho um select com os meses e depois envio via post o valor do select. O valor de mês já vem do post em inteiro. Compartilhar este post Link para o post Compartilhar em outros sites
Beraldo 864 Denunciar post Postado Outubro 22, 2015 Se está gerando erro, provavelmente não está indo um valor inteiro. Ou nem está indo valor algum Dê um print_r() em $_POST pra ver quais valores estão sendo enviados Compartilhar este post Link para o post Compartilhar em outros sites
Hewitt 14 Denunciar post Postado Outubro 22, 2015 Acho que eu não soube explicar. Quando eu abro a página, o erro já aparece. Mas quando eu dou um post do formulário, preenchendo o nome do empregado, o mês e alguns outros dados, funciona normalmente e o erro desaparece. Mas quando abro a página, não tem valor algum na variável $mes. Compartilhar este post Link para o post Compartilhar em outros sites
(RNU) Ruan Silva 61 Denunciar post Postado Outubro 22, 2015 Ele faz isso na mesma página? Então verifique se a variável existe antes de rodar os comandos... if(isset($_POST['mes']){ //blablabla... } Compartilhar este post Link para o post Compartilhar em outros sites
Beraldo 864 Denunciar post Postado Outubro 22, 2015 Então você tem que verificar se a requisição é do método POST: if ($_SERVER['REQUEST_METHOD'] == 'POST') { // usa $_POST } // exibe o formulario Compartilhar este post Link para o post Compartilhar em outros sites
Hewitt 14 Denunciar post Postado Outubro 22, 2015 Ele faz isso na mesma página? Então verifique se a variável existe antes de rodar os comandos... if(isset($_POST['mes']){ //blablabla... } Ja tentei isso e nã funcionou. =/ Vou tentar a dica do Beraldo daqui a pouco. Compartilhar este post Link para o post Compartilhar em outros sites
Hewitt 14 Denunciar post Postado Outubro 22, 2015 Formulário: <form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>"> <select class="alert-info" name="mes"> <option value="0">[Selecione um mês]</option> <option value="1">Janeiro</option> <option value="2">Fevereiro</option> <option value="3">Março</option> <option value="4">Abril</option> <option value="5">Maio</option> <option value="6">Junho</option> <option value="7">Julho</option> <option value="8">Agosto</option> <option value="9">Setembro</option> <option value="10">Outubro</option> <option value="11">Novembro</option> <option value="12">Dezembro</option> </select> <input name="enviar" class="btn btn-primary" type="submit" value="Confirmar" /> <input name="imprimir" id="btn_print" class="btn btn-success" type="button" value="Imprimir" /> <br /><br /><br /> </form> PHP: <? if ($mes == 1){ $nome_mes = 'Janeiro'; } if ($mes == 2){ $nome_mes = 'Fevereiro'; } if ($mes == 3){ $nome_mes = 'Março'; } if ($mes == 4){ $nome_mes = 'Abril'; } if ($mes == 5){ $nome_mes = 'Maio'; } if ($mes == 6){ $nome_mes = 'Junho'; } if ($mes == 7){ $nome_mes = 'Julho'; } if ($mes == 8){ $nome_mes = 'Agosto'; } if ($mes == 9){ $nome_mes = 'Setembro'; } if ($mes == 10){ $nome_mes = 'Outubro'; } if ($mes == 11){ $nome_mes = 'Novembro'; } if ($mes == 12){ $nome_mes = 'Dezembro'; } $ano = date('Y'); $mes = $_POST['mes']; $nome_trab = $_POST['empregados']; $tipo = $_POST['tipo']; $total_dias = cal_days_in_month(CAL_GREGORIAN, $mes, $ano); ?> Está praticamente assim a minha página (folha.php). O nome do empregado vem de um outro select que não está ai. Compartilhar este post Link para o post Compartilhar em outros sites
Beraldo 864 Denunciar post Postado Outubro 22, 2015 Alguns detalhes: 1. Não precisa desses if's. Use strftime com setlocale e terá os nomes dos meses no idioma que quiser 2. Não faz sentido fazer esses if's usando $mes antes mesmo de criar a variável $mes. Tem que fazer o if depois de criá-la 3. $_POST['mes'] só existirá se a requisição for POST. Tanto a minha sugestão quando a do rnu.silva devem resolver. Se não resolveu, mostre como fez. Você deve ter feito algo errado Compartilhar este post Link para o post Compartilhar em outros sites
Hewitt 14 Denunciar post Postado Outubro 22, 2015 Então, consegui. Fiz o que o rnu.silva postou (tinha feito errado mesmo, imaginei kkk) e mudei o local dos if's como o Beraldo recomendou. Obrigado aos dois! =) Ficou assim: if(isset($_POST['mes'])){ $total_dias = cal_days_in_month(CAL_GREGORIAN, $mes, $ano); } Beraldo, o strftime com setlocale define automaticamente o mês que nós estamos, correto? Compartilhar este post Link para o post Compartilhar em outros sites
Beraldo 864 Denunciar post Postado Outubro 22, 2015 Se não definir a data, strftime pega a data atual, como date() também faz No seu caso, monte a data usando $ano, $mes e qualquer dia (use 01, que fará mais sentido) Veja: http://forum.imasters.com.br/topic/525298-imprimir-data-atual-em-portugues-com-setlocale/ http://php.net/strftime Compartilhar este post Link para o post Compartilhar em outros sites