elossio Postado Fevereiro 15, 2016 Denunciar Share Postado Fevereiro 15, 2016 (editado) 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) ; } ?> Editado Fevereiro 15, 2016 por elossio Negritando parte do código Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 lowys Postado Fevereiro 16, 2016 Denunciar Share Postado Fevereiro 16, 2016 Olá! Não entendi. Você precisa contar quantos registros de inscritos para cada estado? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 elossio Postado Fevereiro 16, 2016 Autor Denunciar Share Postado Fevereiro 16, 2016 (editado) 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. Editado Fevereiro 16, 2016 por elossio Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Beraldo Postado Fevereiro 16, 2016 Denunciar Share Postado Fevereiro 16, 2016 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/ Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 elossio Postado Fevereiro 16, 2016 Autor Denunciar Share Postado Fevereiro 16, 2016 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, Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 wash Postado Fevereiro 17, 2016 Denunciar Share Postado Fevereiro 17, 2016 Olá! Se você precisa apenas saber a quantidade, resolva direto na query: SELECT COUNT(UF) as quant, UF from inscrito GROUP BY UF Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 elossio Postado Fevereiro 17, 2016 Autor Denunciar Share Postado Fevereiro 17, 2016 (editado) 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! Editado Fevereiro 17, 2016 por elossio Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 elossio Postado Fevereiro 18, 2016 Autor Denunciar Share Postado Fevereiro 18, 2016 (editado) 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) ; } ?> Editado Fevereiro 18, 2016 por elossio Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
elossio
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
Editado por elossio$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) ;
}
?>
Negritando parte do código
Link para o comentário
Compartilhar em outros sites
7 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.