Jump to content
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

Sign in to follow this  
bioshock

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

Recommended Posts

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?

Share this post


Link to post
Share on other sites
bioshock

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

Share this post


Link to post
Share on other 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...

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other 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á!

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
Sign in to follow this  

×

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.