Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Hewitt

Como consertar esse erro?

Recommended Posts

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

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

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

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

 

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

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

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

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

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

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.