Jump to content
Samuel Pietro

Select só exibe a ultima linha da tabela

Recommended Posts

Estou desenvolvendo um sistema para gerar arquivos de remessa para a CEF (Seguindo o padrão CNAB150) Até então tudo Okay.

Meu problema está na hora de gerar a remessa que só consta a ultima linha da respectiva tabela no Banco de dados.

Eu preciso que gere com todas as linhas que estiverem na tabela (Mais pra frente irei colocar alguns filtros para gerar por data ou por Numero de Serie)

Minha conexão com o Banco está assim:

<?php

define('SGBD', 'mysql');
define('HOST', 'localhost');
define('DBNAME', '******');
define('CHARSET', 'utf8');
define('USER', '*******');
define('PASSWORD', '******');
define('SERVER', 'linux');

class conexao {
    
    /*
     * Atributo estático de conexão
     */
    private static $pdo;

    /*
     * Escondendo o construtor da classe
     */
    private function __construct() {
        //
    }

    /*
     * Método privado para verificar se a extensão PDO do banco de dados escolhido
     * está habilitada
     */
    private static function verificaExtensao() {

        switch(SGBD):
            case 'mysql':
                $extensao = 'pdo_mysql';
                break;
            case 'mssql':{
                if(SERVER == 'linux'):
                    $extensao = 'pdo_dblib';
                else:
                    $extensao = 'pdo_sqlsrv';
                endif;
                break;
            }
            case 'postgre':
                $extensao = 'pdo_pgsql';
                break;
        endswitch;

        if(!extension_loaded($extensao)):
            echo "<h1>Extensão {$extensao} não habilitada!</h1>";
            exit();
        endif;
    }

    /*
     * Método estático para retornar uma conexão válida
     * Verifica se já existe uma instância da conexão, caso não, configura uma nova conexão
     */
    public static function getInstance() {

        self::verificaExtensao();

        if (!isset(self::$pdo)) {
            try {
                $opcoes = array(\PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES UTF8');
                switch (SGBD) :
                    case 'mysql':
                        self::$pdo = new \PDO("mysql:host=" . HOST . "; dbname=" . DBNAME . ";", USER, PASSWORD, $opcoes);
                        break;
                    case 'mssql':{
                        if(SERVER == 'linux'):
                            self::$pdo = new \PDO("dblib:host=" . HOST . "; database=" . DBNAME . ";", USER, PASSWORD, $opcoes);
                        else:
                            self::$pdo = new \PDO("sqlsrv:server=" . HOST . "; database=" . DBNAME . ";", USER, PASSWORD, $opcoes);
                        endif;
                        break;
                    }
                    case 'postgre':
                        self::$pdo = new \PDO("pgsql:host=" . HOST . "; dbname=" . DBNAME . ";", USER, PASSWORD, $opcoes);
                        break;
                endswitch;
                self::$pdo->setAttribute(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION);
            } catch (PDOException $e) {
                print "Erro: " . $e->getMessage();
            }
        }
        return self::$pdo;
    }

    public static function isConectado(){
        
        if(self::$pdo):
            return true;
        else:
            return false;
        endif;
    }

}

Minhas Functions

<?php
/*Campos Numéricos (“Picture 9”)
• Alinhamento: sempre à direita, preenchido com zeros à esquerda, sem máscara de edição;
• Não utilizados: preencher com zeros.
*/
function picture_9($palavra,$limite){
	$var=str_pad($palavra, $limite, "0", STR_PAD_LEFT);
	return $var;
}

/*
Campos Alfanuméricos (“Picture X”)
• Alinhamento: sempre à esquerda, preenchido com brancos à direita;
• Não utilizados: preencher com brancos;
• Caracteres: maiúsculos, sem acentuação, sem ‘ç’, sem caracteres especiais.
*/
	 
function picture_x( $palavra, $limite ){
	$var = str_pad( $palavra, $limite, " ", STR_PAD_RIGHT );
	$var = remover_acentos( $var );
	if( strlen( $palavra ) >= $limite ){
		$var = substr( $palavra, 0, $limite );
	}
	$var = strtoupper( $var );// converte em letra maiuscula
	return $var;
}	 
	 
function sequencial($i)
{
if($i < 10)
{
return zeros(0,5).$i;
}
else if($i > 10 && $i < 100)
{
return zeros(0,4).$i;
}
else if($i > 100 && $i < 1000)
{
return zeros(0,3).$i;
}
else if($i > 1000 && $i < 10000)
{
return zeros(0,2).$i;
}
else if($i > 10000 && $i < 100000)
{
return zeros(0,1).$i;
}
}

function zeros($min,$max)
{
$x = ($max - strlen($min));
for($i = 0; $i < $x; $i++)
{
$zeros .= '0';
}
return $zeros.$min;
}

function complementoRegistro($int,$tipo)
{
if($tipo == "zeros")
{
$space = '';
for($i = 1; $i <= $int; $i++)
{
$space .= '0';
}
}
else if($tipo == "brancos")
{
$space = '';
for($i = 1; $i <= $int; $i++)
{
$space .= ' ';
}
}

return $space;
}
?>

E Finalmente o meu Select

 $conexao = conexao::getInstance();
		
	$sql = 'SELECT * FROM RegistroE';
	$stm = $conexao->prepare($sql);
	$stm->execute();
	$Sql = $stm->fetchAll(PDO::FETCH_ASSOC);//Já tentei usar tmb $Sql = $stm->fetchAll(PDO::FETCH_OBJ); MAS O PROBLEMA PERSISTE

	foreach($Sql as $SqlReg):
$conteudo_meio=
picture_X($SqlReg->E_01,1)
.picture_X($SqlReg->E_02,25)  
.picture_9($SqlReg->E_03,4)   
.picture_X($SqlReg->E_04,14) 
.picture_9($SqlReg->E_05,8)
.picture_9($SqlReg->E_06,8) 
.picture_9($SqlReg->E_07,8) 
.picture_9($SqlReg->E_08,8)
.picture_9($SqlReg->E_09,8)
.complementoRegistro(96,"brancos")
.picture_9($SqlReg->E_11,1)
.complementoRegistro(1,"brancos")
 ;
endforeach;

Eu preciso da ajuda para listar todos os registros e não apenas o ultimo.

Share this post


Link to post
Share on other sites

Bem alguns avanços que consegui:

 

Eu subtitui a variavel

$conteudo_meio

por

print

e a consulta foi retornada com todos os regstros, mas eu me esbarrei em outro problema. Mais a frente no codigo eu preciso ler o conteudo que está no print, até tentei print onde eu preciso mas ai volta a exibir apenas a ultima linha.

E não minha pergunta é: Se isso for logicamente possivel, como eu coloco o conteudo do print dentro de uma variavel?

ACABEI DE VERIFICAR QUE ASSIM NÃO RESOLVE PRA MIM, POIS A FUNCTION function picture_x NÃO FUNCIONARA COMO ESPERADO, ELA CRIA ESPAÇOS EM BRANCOS NECESSARIOS PARA O PADRÃO DE 150 POSIÇÕES E print IRÁ OS SUPRIMIR MANTENDO APENAS UM UNICO ESPAÇO

Share this post


Link to post
Share on other sites
Em 17/04/2019 at 16:50, Samuel Pietro disse:

 


 $conexao = conexao::getInstance();
		
	$sql = 'SELECT * FROM RegistroE';
	$stm = $conexao->prepare($sql);
	$stm->execute();
	$Sql = $stm->fetchAll(PDO::FETCH_ASSOC);//Já tentei usar tmb $Sql = $stm->fetchAll(PDO::FETCH_OBJ); MAS O PROBLEMA PERSISTE

	foreach($Sql as $SqlReg):
$conteudo_meio=
picture_X($SqlReg->E_01,1)
.picture_X($SqlReg->E_02,25)  
.picture_9($SqlReg->E_03,4)   
.picture_X($SqlReg->E_04,14) 
.picture_9($SqlReg->E_05,8)
.picture_9($SqlReg->E_06,8) 
.picture_9($SqlReg->E_07,8) 
.picture_9($SqlReg->E_08,8)
.picture_9($SqlReg->E_09,8)
.complementoRegistro(96,"brancos")
.picture_9($SqlReg->E_11,1)
.complementoRegistro(1,"brancos")
 ;
endforeach;

 

Você só precisa adicionar a variável $conteudo_meio antes do foreach com valor nulo ou vazio e dentro do foreach após $conteudo_meio adicionar um ponto antes do = ficando da seguinte forma:

$conexao = conexao::getInstance();
$sql = 'SELECT * FROM RegistroE';
$stm = $conexao->prepare($sql);
$stm->execute();
$Sql = $stm->fetchAll(PDO::FETCH_ASSOC);
$conteudo_meio = null;
foreach($Sql as $SqlReg):
	$conteudo_meio .= 
	picture_X($SqlReg->E_01,1)
	.picture_X($SqlReg->E_02,25)
	.picture_9($SqlReg->E_03,4)
	.picture_X($SqlReg->E_04,14)
	.picture_9($SqlReg->E_05,8)
	.picture_9($SqlReg->E_06,8)
	.picture_9($SqlReg->E_07,8)
	.picture_9($SqlReg->E_08,8)
	.picture_9($SqlReg->E_09,8)
	.complementoRegistro(96,"brancos")
	.picture_9($SqlReg->E_11,1)
	.complementoRegistro(1,"brancos");
endforeach;

Da forma que estava o valor da variável $conteudo_meio estava sendo sempre substituído pelo próximo dado da tabela a cada loop.

 

Espero ter ajudado.

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

  • Similar Content

    • By mamotinho
      oi pessoal estou com um problema , não estou conseguindo passar todos os valores o foreach no json_encode() alguém poderia me ajudar, eu estou tentando monta um mecanismo de refresh em tempo real de uma lista de notificação veja abaixo:
       
      <script type="text/javascript"> function make_call() { // Fazendo requisição AJAX $j.post('teste.php', function (frase) { // Exibindo frase $j('#listas').html('<i>' + frase + '</i>'); }, 'JSON'); setTimeout(function(){ make_call(); }, 5000); } </script>
      Aqui é o arquivo que quero enviar para a div #lists
       
      <?php require("conexao/directory.php"); $notificar = $db->query("select TOP 5 * from Techi7CP.dbo.cabal_notificacao_geral order by regdate desc"); $notificacao = $notificar->fetchAll(); $count_notificacao = abs($notificar->rowCount()); if($count_notificacao==0){ echo '<li style="text-align:center;">não existe notificações no momento.</li>'; }else{ foreach($notificacao as $notif){ $consulta_conta = $db->query("select * from account.dbo.cabal_auth_table where UserNum='".$notif['usernum']."'")->fetchObject(); switch($notif['acao']){ case 'logadopremiado' : echo ' <li><a class="black-text" href="#!"><span class="material-icons icon-bg-circle red small">redeem</span>'.$notif['jogador'].' ganhou no Logado Premiado</a> <time class="media-meta grey-text darken-2" datetime="2015-06-12T20:50:48+08:00"> '.Data::ExibirTempoDecorrido(date("Y-m-d H:i:s.B", strtotime($notif['regdate']))).'</time> </li>'; break; case 'mudarsenha' : echo ' <li><a class="black-text" href="#!"><span class="material-icons icon-bg-circle teal small">vpn_key</span>'.$consulta_conta->Nome.' alterou sua senha</a> <time class="media-meta grey-text darken-2" datetime="2015-06-12T20:50:48+08:00"> '.Data::ExibirTempoDecorrido(date("Y-m-d H:i:s.B", strtotime($notif['regdate']))).'</time> </li>'; break; case 'distribuirpontos' : echo ' <li><a class="black-text" href="#!"><span class="material-icons icon-bg-circle cyan small">control_point</span>'.$notif['jogador'].' distribuiu seus pontos</a> <time class="media-meta grey-text darken-2" datetime="2015-06-12T20:50:48+08:00"> '.Data::ExibirTempoDecorrido(date("Y-m-d H:i:s.B", strtotime($notif['regdate']))).'</time> </li>'; break; case 'girodasorte' : echo ' <li><a class="black-text" href="#!"><span class="material-icons icon-bg-circle brown small">star_border</span>'.$consulta_conta->Nome.' usou o giro da sorte</a> <time class="media-meta grey-text darken-2" datetime="2015-06-12T20:50:48+08:00"> '.Data::ExibirTempoDecorrido(date("Y-m-d H:i:s.B", strtotime($notif['regdate']))).'</time> </li>'; break; case 'sistematpoint' : echo ' <li><a class="black-text" href="#!"><span class="material-icons icon-bg-circle green small">golf_course</span>'.$notif['jogador'].' recebeu seu tpoint por clique</a> <time class="media-meta grey-text darken-2" datetime="2015-06-12T20:50:48+08:00"> '.Data::ExibirTempoDecorrido(date("Y-m-d H:i:s.B", strtotime($notif['regdate']))).'</time> </li>'; break; case 'combo' : echo ' <li><a class="black-text" href="#!"><span class="material-icons icon-bg-circle amber small">videogame_asset</span>'.$notif['jogador'].' fez '.$notif['ExtraDetalhes'].' em sua primeira vez</a> <time class="media-meta grey-text darken-2" datetime="2015-06-12T20:50:48+08:00"> '.Data::ExibirTempoDecorrido(date("Y-m-d H:i:s.B", strtotime($notif['regdate']))).'</time> </li>'; break; } } } ?> como eu faria para ser exibido todos os resultados registrados com o json_encode().
    • By Matheus B. Siqueira
      Meu PDO, não está retornando nenhum valor, e está dando erro ao tentar baixar o arquivo:
       

       
       
      <?php //se não tiver o parametro, mata a aplicação. if (isset($_POST['codigo_video'])) { $codigo_video = $_POST['codigo_video']; } //Aqui está um exemplo simples de como fazer uma conexão PDO $host = 'localhost'; $db = 'onteach'; $user = 'root'; $pass = 'root'; $charset = 'utf8mb4'; $dsn = "mysql:host=$host;dbname=$db;charset=$charset"; try { $pdo = new PDO($dsn, $user, $pass); } catch (PDOException $e) { throw new PDOException($e->getMessage(), (int)$e->getCode()); } //$pdoQuery = $pdo->query("SELECT conteudo.arquivo FROM conteudo WHERE conteudo.conteudo_video = '{$codigo_video}'"); try{ $ready = $pdo->prepare("SELECT conteudo.arquivo FROM conteudo WHERE conteudo.conteudo_video = :codigo_video"); $ready->bindParam(':codigo_video', $codigo_video); // $ready = $pdo->prepare($pdoQuery); // $ready->execute(); }catch(PDOException $e){ echo $e->getMessage(); } while($rs = $ready->fetch(PDO::FETCH_ASSOC));{ $local = 'upload/'; $local_arquivo = $local.$rs; header('Content-type: octet/stream'); // Indica o nome do arquivo como será "baixado". Você pode modificar e colocar qualquer nome de arquivo header('Content-disposition: attachment; filename="'.$rs.'";'); // Indica ao navegador qual é o tamanho do arquivo header('Content-Length: '.filesize($local_arquivo)); // Busca todo o arquivo e joga o seu conteúdo para que possa ser baixado readfile($local_arquivo); } print_r($rs); ?> Alguém sabe resolver? Visto que o $rs não retorna o dado arquivo da tabela
    • By mamotinho
      Olá pessoal, já rodei a internet inteira procurando uma função para eu conectar ao banco de dados SQL Server que está minha máquina virtual Dedicado. estou programando um site na hospedagem com a versão 7.3.16 , eu queria uma solução para eu conectar ao meu banco de dados mssql utilizando pdo.
       
      Eu utilizo a seguinte conexão.
       
      class Database { protected static $db; protected $db_host = DB_HOST; protected $db_usuario = DB_USER; protected $db_senha = DB_PASS; private function __construct() { try { self::$db = new PDO("odbc:Driver={SQL Server};Server=".$this->db_host."; port=122; Uid=$this->db_usuario;Pwd=$this->db_senha;"); self::$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); } catch (PDOException $e) { die("Connection Error: " . $e->getMessage()); } } public static function conexao() { if (!self::$db) { new Database(); } return self::$db; } } alguém pode me da solução de como faço isso funcionar no PHP 7 pra cima.
    • By mamotinho
      Olá, estou com dúvidas , eu tenho a seguinte execução 
       
      SELECT SUM(Cash) as soma FROM CashAccount Eu estou querendo pega o resultado desta consulta em PHP
      tipo
       
      $result = $pdo->query("SELECT SUM(Cash) as soma FROM CashAccount"); echo $result; Mais não sei como fazer aparece o mesmo resultado que é exibido quando eu faço a execução da query no SQL, por favor alguém poderia me informar como eu poderia está fazendo.
    • By eduardodsilvaq
      Não sei oq tem de errado.
       
      O erro:
      Notice: Undefined index: name in C:\AppServ\www\includes\functions.php on line 105 A linha do erro:
      <td width="106"><div class="fonte">'. $row["name"] .'</div></td> O codigo:
      function mini_ranking (){ $PDO = db_connect_gamedata(); $sql = "SELECT name baselevel FROM u_hero WHERE class <> '80' ORDER BY baselevel Desc Limit 6"; $result = $PDO->query($sql); $guild = $result->fetchAll(PDO::FETCH_ASSOC); $i = 1; echo '<table width="153" height="0" border="0">'; foreach($guild as $row) { echo '<tr> <td width="0" height="0" align="center"><div class="fonte">'. $i++ . '</div></td> <td width="106"><div class="fonte">'. $row["name"] .'</div></td> <td width="20"><div class="fonte">'. $row["baselevel"] .'</div></td> <tr>'; } echo '</table>'; }  
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.