Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Repetição de uma função gera erro no host : HTTP ERROR 500

O código a seguir tem o objetivo de pegar valores do Banco de Dados, guardar em variáveis para depois colocar essas variáveis em um gráfico (chart.js) deixando o gráfico com valores dinâmicos. No localhost tava dando tudo certo mas quando eu subi o projeto para um host online(000webhost), a página da deu um erro (HTTP ERROR 500). Troquei de host(agora InfinityFree) e o erro persiste. Verifiquei o código linha por linha e descobri que a repetição da chamada da função LucroMes gerava o erro. Queria uma solução para não repetir a função já que a unica coisa que muda, quando chamo ela, é o $mes. OBS: Se o erro não for esse qual seria a causa do HTTP ERROR 500 ?

<?php
      $ano_atual=date('Y');
      $mes_atual =  date('m');
      function LucroMes($conexao,$mes,$ano,$user){
        $result_lucro= "select sum(lucro) from vendas where fk_cpf_user = '{$user}' and month(dt_rvd) = '{$mes}' and year(dt_rvd) = '{$ano}'";
        $resultado_lucro = mysqli_query($conexao, $result_lucro);
        while ($row_lucro= mysqli_fetch_array($resultado_lucro)) {
            return $row_lucro["sum(lucro)"];
        }
      }

        $v1 = LucroMes($conexao,01,$ano_atual,$usuario_cpf);
        $v2 = LucroMes($conexao,02,$ano_atual,$usuario_cpf);
        $v3 = LucroMes($conexao,03,$ano_atual,$usuario_cpf);
        $v4 = LucroMes($conexao,04,$ano_atual,$usuario_cpf);
        $v5 = LucroMes($conexao,05,$ano_atual,$usuario_cpf);
        $v6 = LucroMes($conexao,06,$ano_atual,$usuario_cpf);
        $v7 = LucroMes($conexao,07,$ano_atual,$usuario_cpf);
        $v8 = LucroMes($conexao,08,$ano_atual,$usuario_cpf);
        $v9 = LucroMes($conexao,09,$ano_atual,$usuario_cpf);
        $v10 = LucroMes($conexao,10,$ano_atual,$usuario_cpf);
        $v11 = LucroMes($conexao,11,$ano_atual,$usuario_cpf);
        $v12 = LucroMes($conexao,12,$ano_atual,$usuario_cpf);

    function MetaMes($conexao,$mes,$ano,$user){
      $result_metames= "SELECT sum(lucro) FROM vendas WHERE fk_cpf_user = '$user' and MONTH(dt_rvd) = '$mes' and YEAR(dt_rvd) = '$ano'";
      $resultado_metames = mysqli_query($conexao, $result_metames);
      while ($row_metames= mysqli_fetch_array($resultado_metames)) {
          return $row_metames["sum(lucro)"];
      }
    }
    function MetaAno($conexao,$ano,$user){
      $result_metaano= "SELECT sum(lucro) FROM vendas WHERE fk_cpf_user = '$user' and YEAR(dt_rvd) = '$ano'";
      $resultado_metaano = mysqli_query($conexao, $result_metaano);
      while ($row_metaano= mysqli_fetch_array($resultado_metaano)) {
          return $row_metaano["sum(lucro)"];
      }
    }
    $lucro_mes = MetaMes($conexao, $mes_atual, $ano_atual,$usuario_cpf);
    $lucro_ano = MetaAno($conexao, $ano_atual,$usuario_cpf);

    function Falta($lucro_mes,$meta){
      $falta_mes =$meta - $lucro_mes;
      if (($falta_mes) > 0) {
          return $falta_mes;
      }
      else {return 0;}
    }
    $faltames = Falta($lucro_mes,5000);
2 respostas
solução!

Erro 500 é algum erro relacionado a programação. Por exemplo, não conseguir conectar com o banco, algum erro na programação (exemplo, um comando digitado de forma incorreta) ou usar algum recurso não instalado (por exemplo, o módulo mysqli)

Para identificar o erro, o ideal seria baixar o log de erros e dar uma olhada. Na minha hospedagem, ao logar no site por FTP, tem uma pasta logs, junto com a pasta public_html, onde fica o site. Os logs são arquivos textos.

Caso você não consiga baixar os logs, ou ter acesso pelo painel administrativo da sua hospedagem, você pode tentar forçar o PHP a exibir os erros, para isso, coloque no inicio do seu código os seguintes comandos:

<?php
error_reporting(E_ALL);
ini_set('display_errors', '1');
//Sua programação
?>

Como o Daniel falou, todo erro 500 é relacionado à logica. Habilitando os erros fica mais fácil debugar. O que eu acho que seja o erro é

$v1 = LucroMes($conexao,01,$ano_atual,$usuario_cpf);

Nessa área, você definiu o mês como 01, mas ao iterar com o for ele vai passar como 1 (inteiro) e vai acabar quebrando a sua query.