Jump to content
Fórum Script Brasil
  • 0

Contadores em PHP MySQL


elossio
 Share

Question

Pessoal, boa tarde!

Tenho um banco de dados em MySQL contendo tabela "inscrito" referente a um cadastro de clientes.

Preciso de um PHP script para agrupar contadores por campo "UF". 

Estou com dificuldade de alterar os valores iniciais de uma array de contadores ($Inscritos).  Como posso fazer isso?

Segue abaixo, meu script de teste. obrigado pela atenção.

<?php
$Estado = array();
$Estado[0]="AC";
$Estado[1]="AL";
$Estado[2]="AM";
$Estado[3]="AP";
$Estado[4]="BA";
$Estado[5]="CE";
$Estado[6]="DF";
$Estado[7]="ES";
$Estado[8]="GO";
$Estado[9]="MA";
$Estado[10]="MG";
$Estado[11]="MS";
$Estado[12]="MT";
$Estado[13]="PA";
$Estado[14]="PB";
$Estado[15]="PE";
$Estado[16]="PI";
$Estado[17]="PR";
$Estado[18]="RJ";
$Estado[19]="RN";
$Estado[20]="RO";
$Estado[21]="RR";
$Estado[22]="RS";
$Estado[23]="SC";
$Estado[24]="SE";
$Estado[25]="SP";
$Estado[26]="TO";
$Inscritos = array();
$Inscritos[0]=0;
$Inscritos[1]=0;
$Inscritos[2]=0;
$Inscritos[3]=0;
$Inscritos[4]=0;
$Inscritos[5]=0;
$Inscritos[6]=0;
$Inscritos[7]=0;
$Inscritos[8]=0;
$Inscritos[9]=0;
$Inscritos[10]=0;
$Inscritos[11]=0;
$Inscritos[12]=0;
$Inscritos[13]=0;
$Inscritos[14]=0;
$Inscritos[15]=0;
$Inscritos[16]=0;
$Inscritos[17]=0;
$Inscritos[18]=0;
$Inscritos[19]=0;
$Inscritos[20]=0;
$Inscritos[21]=0;
$Inscritos[22]=0;
$Inscritos[23]=0;
$Inscritos[24]=0;
$Inscritos[25]=0;
$Inscritos[26]=0;
$conec = mysql_connect('localhost:3306', 'root') or die ('Não foi possível conectar: ' .mysql_error()); 
if ($conec) {
        $bco = mysql_select_db('laser',$conec) or die ('Não foi possível localizar o banco de dados: ' .mysql_error()); 
    if ($bco) {
        $stgsql = "SELECT UF from inscrito ORDER BY UF" ;
        $res = mysql_query($stgsql, $conec) ;
        $linhas = mysql_num_rows($res) ;
        $linhasini = 1 ;
        $dados = mysql_fetch_array($res) ;
        $insc = "oo" ;
        $est = 0;
        $contador = 0 ;
        while ($linhasini <= $linhas) {
            $contador = $contador + 1;
            echo "Linhasini = $linhasini<br>";
            If ($dados[0]  <> $insc) {
                $contador = 1 ;
                for ($i = 0; $i <= 26; $i++) {
                    if ($Estado[$i] = $dados[0]) {
                        $Inscritos[$i] = $contador ;
                        $est = $i;
                        echo "<font color='#FF0000'></font>$dados[0] É DIFERENTE DE $insc<br>";
                        echo "Valor de i: $i - Estado: $Estado[$i] - Valor de est: $est - Inscritos: $Inscritos[$est] - Contador: $contador<br>";
                        break;
                        }
                    }
            }
            else {
                $Inscritos[$est] = $contador;
                echo "<font color='#FF5000'></font>$dados[0] é igual a $insc<br>";
                echo "Valor de i: $i - Estado: $Estado[$i] - Valor de est: $est - Inscritos: $Inscritos[$est] - Contador: $contador<br>";
            }        }
            $insc = $dados[0];
            $dados = mysql_fetch_array ($res);
            $linhasini++;
            }
        $total = 0;
        for ($i = 0; $i <= 26; $i++) {
            $total = $total + $Inscritos[$i];
        }
}
mysql_close($conec) ;
}
?>

Edited by elossio
Negritando parte do código
Link to comment
Share on other sites

7 answers to this question

Recommended Posts

  • 0

Olá lowys, bom dia!

Você entendeu certo. Preciso contabilizar o numeros de inscritos em cada Estado. Cheguei a navegar pelos arrays usando os comandos foreach, next, current e reset, mas continuo não tendo o resultado esperado de poder substituir os valores iniciais do array $Inscritos pelo valor do $contador.

Estou usando um servidor local de teste com o Xampp for Linux 5.6.15-1.

Cheguei a usar o código abaixo, um pouco modificado, ainda sem sucesso:

<?php
$Estado = array();
$Estado[0]="AC";
$Estado[1]="AL";
$Estado[2]="AM";
$Estado[3]="AP";
$Estado[4]="BA";
$Estado[5]="CE";
$Estado[6]="DF";
$Estado[7]="ES";
$Estado[8]="GO";
$Estado[9]="MA";
$Estado[10]="MG";
$Estado[11]="MS";
$Estado[12]="MT";
$Estado[13]="PA";
$Estado[14]="PB";
$Estado[15]="PE";
$Estado[16]="PI";
$Estado[17]="PR";
$Estado[18]="RJ";
$Estado[19]="RN";
$Estado[20]="RO";
$Estado[21]="RR";
$Estado[22]="RS";
$Estado[23]="SC";
$Estado[24]="SE";
$Estado[25]="SP";
$Estado[26]="TO";
//print_r($Estado);
$Inscritos = array();
$Inscritos[0]='0';
$Inscritos[1]='0';
$Inscritos[2]='0';
$Inscritos[3]='0';
$Inscritos[4]='0';
$Inscritos[5]='0';
$Inscritos[6]='0';
$Inscritos[7]='0';
$Inscritos[8]='0';
$Inscritos[9]='0';
$Inscritos[10]='0';
$Inscritos[11]='0';
$Inscritos[12]='0';
$Inscritos[13]='0';
$Inscritos[14]='0';
$Inscritos[15]='0';
$Inscritos[16]='0';
$Inscritos[17]='0';
$Inscritos[18]='0';
$Inscritos[19]='0';
$Inscritos[20]='0';
$Inscritos[21]='0';
$Inscritos[22]='0';
$Inscritos[23]='0';
$Inscritos[24]='0';
$Inscritos[25]='0';
$Inscritos[26]='0';
reset($Inscritos);
//var_dump($Inscritos);
$conec = mysql_connect('localhost:3306', 'root') or die ('Não foi possível conectar: ' .mysql_error()); 
if ($conec) {
        $bco = mysql_select_db('laser',$conec) or die ('Não foi possível localizar o banco de dados: ' .mysql_error()); 
    if ($bco) {
        $stgsql = "SELECT UF from inscrito ORDER BY UF" ;
        $res = mysql_query($stgsql, $conec) ;
        $linhas = mysql_num_rows($res) ;
        $linhasini = 1 ;
        $dados = mysql_fetch_array($res) ;
        $insc = "oo" ;
        $est = 0;
        $contador = 0 ;
        while ($linhasini <= $linhas) {
            $contador = $contador + 1;
//            echo "Linhasini = $linhasini<br>";
            If ($dados <> $insc) {
                $contador = 1 ;
                reset($Estado);
                $chave = key ($Estado);
//                echo "Chave: $chave<br>";
                While ($chave < 27) {
                    $valor = current($Estado);
                    echo "Chave: $chave<br>";
                    echo "Valor: $valor<br>";
                    if ($valor = $dados) {
                        $Inscritos[$chave] = $contador;
                        $est = $chave;
                        $chave = count($Estado);
                        break;
                    // valor
                    }
                    else {
                    next($Estado);
                    $chave = key ($Estado);
                    }
                    $chave++;
                // chave
                }
            // 
            }
            else {
            $Inscritos[$est] = $contador;
            }
            $insc = $dados;
            $dados = mysql_fetch_array ($res);
            $linhasini++;
        //
            }
        $Inscritos[0] = 0;
//        print_r($Inscritos);
        $total = 0;
        for ($i = 0; $i <= 26; $i++) {
            $total = $total + $Inscritos[$i];
        }
}
mysql_close($conec) ;
}
?>

Não estou enxergando o óbvio no código. Por isso, peço ajuda dos especialistas.

Obrigado.

 

Edited by elossio
Link to comment
Share on other sites

  • 0

Não entendi o que caracteriza um inscrito, mas seu código tem alguns problemas:

1. Sempre vai entrar neste if:

            If ($dados <> $insc) {

Afinal, $dados é um array e $insc é uma string. Sempre serão diferentes.

2. Se vai usar um número, use 0, não '0'. Não use aspas em dados numéricos. Não gera erro, mas é uma questão conceitual.

3.  funções mysql_* estão obsoletas desde o PHP 5.5  e já foram removidas no PHP 7. Prefira usar MySQLi ou PDO. Veja mais aqui: http://rberaldo.com.br/mysql-obsoleto-php/


 

Link to comment
Share on other sites

  • 0

Olá Beraldo,

Vou seguir sua recomendação considerando que há uma séries de scripts pela frente. Ambiente todo novo1

Quanto ao conteúdo da tabela inscritos, a que você se refere, trata-se de uma lista de associados na Associação Brasileira da Classe Laser cujo o portal web roda numa velha plataforma Joomla 1.15 com alguns scripts ASP embutidos, dentre os quais a lista de associados http://www.laser.org.br/abcl/index.php?option=com_wrapper&view=wrapper&Itemid=58&lang=pt, cujo o ambiente de produção está sob o Windows Server 2003 com ASP/VBscript.

Neste momento, estou convertendo o ASP script do Mapa de Associados http://www.laser.org.br/abcl/index.php?option=com_wrapper&view=wrapper&Itemid=58&lang=pt para um script PHP (o script objeto deste post). Acho que você terá uma ideia mais precisa que é criar totalizadores por Estado.

Estou aberto a sugestões! Fico bastante agradecido. Vou atribuir novamente a constante 0 ao array $Inscritos.

Atenciosamente,

 

Link to comment
Share on other sites

  • 0
10 horas atrás, wash disse:

Olá!

Se você precisa apenas saber a quantidade, resolva direto na query:

SELECT COUNT(UF) as quant, UF  from inscrito GROUP BY UF

Prezado Wash,

Preciso apresentar um subtotal por UF. Isto é, o número de registros do Estado do Acre (AC) ao Estado de Tocantins (TO) do banco de dados. Por isso, decidi criar dois array $Estado e $Incritos. O primeiro,  cada elemento é identificado pela string da UF. O segundo array, o elemento armazena o número de ocorrências pretendido. É neste segundo array que os contadores devem ser salvos. Posteriormente, após varredura completa no banco de dados, apresento um $total geral.

Conforme citado pelo colega Berardo, acredito que o problema esteja na condição do comando if ($dados <> $insc). Estou revendo o código e a lógica. 

Aliás, o ambiente e script já está atualizado (PHP 7.0.2 e MySQLi) conforme recomendação do Berardo.

Contudo, o problema persiste. Sigo em frente na revisão do código. Se alguém puder ajudar, fico muito agradecido! 

Edited by elossio
Link to comment
Share on other sites

  • 0

Pessoal, consegui resolver o problema graça às sugestões dos colegas, a do wash principalmente no comando SQL.

A seguir o código com as alterações propostas. Devo mais tarde aprimorá-lo com o uso de objetos:

<?php
$Inscritos = array();
$Inscritos['AC'] = 0;
$Inscritos['AL'] = 0;
$Inscritos['AM'] = 0;
$Inscritos['AP'] = 0;
$Inscritos['BA'] = 0;
$Inscritos['CE'] = 0;
$Inscritos['DF'] = 0;
$Inscritos['ES'] = 0;
$Inscritos['GO'] = 0;
$Inscritos['MA'] = 0;
$Inscritos['MG'] = 0;
$Inscritos['MS'] = 0;
$Inscritos['MT'] = 0;
$Inscritos['PA'] = 0;
$Inscritos['PB'] = 0;
$Inscritos['PE'] = 0;
$Inscritos['PI'] = 0;
$Inscritos['PR'] = 0;
$Inscritos['RJ'] = 0;
$Inscritos['RN'] = 0;
$Inscritos['RO'] = 0;
$Inscritos['RR'] = 0;
$Inscritos['RS'] = 0;
$Inscritos['SC'] = 0;
$Inscritos['SE'] = 0;
$Inscritos['SP'] = 0;
$Inscritos['TO'] = 0;

$host = 'localhost';
$user = 'root';
$pass = '';
$db = 'laser';

$conec = mysqli_connect($host, $user, $pass, $db) or die ('Não foi possível conectar: ' .mysqli_error()); 
if ($conec) {
        $stgsql = "SELECT COUNT(UF) as QUANT, UF from inscrito GROUP BY UF" ;
        $res = mysqli_query($conec, $stgsql) ;
        $linhas = mysqli_num_rows($res) ;
        $linhas;
        $linhasini = 1 ;
        $dados = mysqli_fetch_array($res) ;
        while ($linhasini <= $linhas) {
            $quant = $dados[0] ;
            $uf = $dados[1];
            if (array_search($uf, $Inscritos)) {
//                echo "Linhasini = $linhasini - UF = $uf - QUANT = $quant<br>";
                $Inscritos[$uf] = $quant;
            }
            $dados = mysqli_fetch_array ($res);
            $linhasini++;
            }
//        var_dump($Inscritos);
        $total = 0;
        foreach ($Inscritos as $valor) {
            $total = $total + $valor;
        }

mysqli_close($conec) ;
}
?>

Edited by elossio
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

  • Forum Statistics

    • Total Topics
      149.6k
    • Total Posts
      646.2k
×
×
  • Create New...