Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

bioshock

Número dias p/ Mês [Resolvido]

Mensagens Recomendadas

bioshock

Total:

$total = 0;
$result = mysql_query("SELECT sum(visitas) as total_visitas FROM information");
if ($result && mysql_num_rows($result) > 0) {
  $query_data=mysql_fetch_array($result);
  $total= (float) $query_data["total_visitas"];
}
echo $total;

$_POST = Combobox

Verifica qual o seleccionado da combobox:

$Mes = $_POST['selectMES'];

	if($Mes = 01){$mediadia = $total / 31;}
	if($Mes = 02){$mediadia = $total / 28;}
	if($Mes = 03){$mediadia = $total / 31;}
	if($Mes = 04){$mediadia = $total / 30;}
	if($Mes = 05){$mediadia = $total / 31;}
	if($Mes = 06){$mediadia = $total / 30;}
	if($Mes = 07){$mediadia = $total / 31;}
	if($Mes = 08){$mediadia = $total / 31;}
	if($Mes = 09){$mediadia = $total / 30;}
	if($Mes = 10){$mediadia = $total / 31;}
	if($Mes = 11){$mediadia = $total / 30;}
	if($Mes = 12){$mediadia = $total / 31;}

Depois utilizo:

echo "<div id='apDiv11' style='visibility:visible'>".$mediadia."</div>";

Mas não funciona. O que pode estar mal?

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
bioshock

Bem..para variar o problema estava no sitio onde o código estava. Bastou-me trocar de sitio e já funciona.  :smoke:

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
KiNgPiTo

bioshock, não leves a mal, mas acho que deves insistir mais nas tuas próprias duvidas, porque metade dos tópicos que abres, acabas por ser tu próprio a resolver...

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
mjamado

Tens aí um erro: o símbolo lógico de igualdade de uma expressão é "==" e não "=", que é o símbolo de atribuição. Assim, vai dar-te sempre Janeiro.

Além disso, cuidado com Fevereiro, porque nem todos os Fevereiros têm 28 dias, é preciso testar a bissextalidade do ano.

Já agora, começa também a pensar na performance dos teus scripts... Por exemplo, um caso desses, tem três soluções bem mais eficazes na parte da "conta"; por cada if que aí tens, é uma pancada na performance... Não seria melhor que ele parasse assim que encontrasse o mês certo?

if($Mes == 1)
  $mediadia = $total / 31;
elseif($Mes == 2)
  $mediadia = $total / 28;
elseif($Mes == 3)
  $mediadia = $total / 31;

// e por aí fora...

Ainda melhor:

switch($Mes)
{
  case 1:
    $mediadia = $total / 31;
  break;
  case 2:
    $mediadia = $total / 28;
  break;
  case 3:
    $mediadia = $total / 31;
  break;
  // e por aí fora...
}

Melhor solução de todas:

$meses = array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
$mediadia = $total / $meses[$Mes - 1];


"Para desenhar um website, não tenho que saber distinguir server-side de client-side" - um membro do fórum que se auto-intitula webdesigner. Temo pelo futuro da web.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
bioshock

bioshock, não leves a mal, mas acho que deves insistir mais nas tuas próprias duvidas, porque metade dos tópicos que abres, acabas por ser tu próprio a resolver...

O problema é que insisto. Mas coincidência ou não, quando crio tópico acabo por a resolver.

Tens aí um erro: o símbolo lógico de igualdade de uma expressão é "==" e não "=", que é o símbolo de atribuição. Assim, vai dar-te sempre Janeiro.

Além disso, cuidado com Fevereiro, porque nem todos os Fevereiros têm 28 dias, é preciso testar a bissextalidade do ano.

Já agora, começa também a pensar na performance dos teus scripts... Por exemplo, um caso desses, tem três soluções bem mais eficazes na parte da "conta"; por cada if que aí tens, é uma pancada na performance... Não seria melhor que ele parasse assim que encontrasse o mês certo?

if($Mes == 1)
  $mediadia = $total / 31;
elseif($Mes == 2)
  $mediadia = $total / 28;
elseif($Mes == 3)
  $mediadia = $total / 31;

// e por aí fora...

Mas com o operador = funciona perfeitamente.

Essa opção que tu aí deste, eu por acaso já a tinha posto em prática, mas depois como andei aqui a mexer acabei por fazer como vos mostrei.

Quanto à 2ª opção e 3ª ainda não havia pensado, mas parece-me muito bem!

Obrigado.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
mjamado
Mas com o operador = funciona perfeitamente.

Não, não funciona. Testa com Fevereiro, por exemplo, ou com um mês de 30 dias. Faz as contas à mão. Topas logo.

Acho que foi num tópico teu que eu já disse: não misturar operadores lógicos com outro tipo de operadores. O operador lógico de igualdade é "==".


"Para desenhar um website, não tenho que saber distinguir server-side de client-side" - um membro do fórum que se auto-intitula webdesigner. Temo pelo futuro da web.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
softklin

Uma maneira útil de não te enganares ao fazer as comparações é trocar os valores, por exemplo:

$var = 10;
if ($var = 5)
   echo "verdadeiro";

Vai dar sempre verdadeiro, pois o valor é atribuído (notar que o que se pretendia era  comparar e não atribuir). Agora fazendo ao contrário:

$var = 10;
if (5 = $var)
   echo "verdadeiro";

Vai dar erro de compilação, pois estás a tentar atribuir um valor a uma constante. E aí já dá para notares o erro. Claro que isto não funciona numa situação em que comparas duas variáveis, mas pode ajudar neste caso particular.


Nick antigo: softclean | Tens um projeto? | Wiki P@P

Ajuda a comunidade! Se encontrares algo de errado, usa a opção "Denunciar" por baixo de cada post.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
bioshock

Uma maneira útil de não te enganares ao fazer as comparações é trocar os valores, por exemplo:

$var = 10;
if ($var = 5)
   echo "verdadeiro";

Vai dar sempre verdadeiro, pois o valor é atribuído (notar que o que se pretendia era  comparar e não atribuir). Agora fazendo ao contrário:

$var = 10;
if (5 = $var)
   echo "verdadeiro";

Vai dar erro de compilação, pois estás a tentar atribuir um valor a uma constante. E aí já dá para notares o erro. Claro que isto não funciona numa situação em que comparas duas variáveis, mas pode ajudar neste caso particular.

Eu tenho sempre atenção às comparações, mas ainda não trabalhei muito com os operadores aqui no PHP.

Obrigado desde já!

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.