Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Marcelo Okada

Update com while e foreach

Recommended Posts

Boa tarde, estou com duvidas aqui em meu projeto, tenho um array de valores, que vem através de um resultado, qunado faço o while, para mostrar todos os registros, dentro dele faço um update,  mas o problema que ele nao aplica na ultimo linha da tabela, tbm fiz por foreach continua a mesma coisa, o que pode ser isso???

while(!$sql->eof()){

$ccodiusua1 	= $sql->result("CCODIUSUA1");

$sql11 = new Query ($bd);
$txt11 = "UPDATE HSSVACINA_GRIPE SET XML = 'S'
          WHERE CCODIUSUA1 = '".$ccodiusua1."'";
$sql11->executeSQL($txt11);

$sql->next();
}

só não aplica na ultima linha.

em foreach:

$ccodiusua1[] 	= $sql->result("CCODIUSUA1");

foreach($ccodiusua1 as $a){
	
$sql11 = new Query ($bd);
$txt11 = "UPDATE HSSVACINA_GRIPE SET XML = 'S'
         WHERE CCODIUSUA1 = '".$a."'";
$sql11->executeSQL($txt11);

}

$ccodiusua1[] vem certinho a quantidade.
Array
(
    [0] => 000838-01
    [1] => 000838-02
    [2] => 000838-03
    [3] => 001929-01
    [4] => 000838-00
)

 

Compartilhar este post


Link para o post
Compartilhar em outros sites
<?php

$ccodiusua1[] = $sql->result("CCODIUSUA1");

for ($i = 0; $i < count($ccodiusua1); $i++) :
    $sql11 = new Query($bd);
    $txt11 = "UPDATE HSSVACINA_GRIPE SET XML = 'S'
         WHERE CCODIUSUA1 = '" . $ccodiusua1[$i] . "'";
    $sql11->executeSQL($txt11);
endfor;


//$ccodiusua1[] 
    
// vem certinho a quantidade.
//Array
//(
//[0] => 000838-01
//[1] => 000838-02
//[2] => 000838-03
//[3] => 001929-01
//[4] => 000838-00
//)

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

o

$ccodiusua1[] = $sql->result("CCODIUSUA1");

for ($i = 0; $i < count($ccodiusua1); $i++) :
    $sql11 = new Query($bd);
    $txt11 = "UPDATE HSSVACINA_GRIPE SET XML = 'S'
         WHERE CCODIUSUA1 = '" . $ccodiusua1[$i] . "'";
    $sql11->executeSQL($txt11);
  
  echo $txt11;
  echo '<Br/>';
endfor;

 

 

da um echo no sql, e verifica se ta trazendo todos os registros

talvez o erro nao esteja ai, e sim na consulta

Compartilhar este post


Link para o post
Compartilhar em outros sites

na consulta traz sim, ele vem em array, conforme tinha colocado ai.

 

Array
(
[0] => 000838-01
[1] => 000838-02
[2] => 000838-03
[3] => 001929-01
[4] => 000838-00
)

e ele nao aplica justamente ai, no ultimo! 

01.jpg

Compartilhar este post


Link para o post
Compartilhar em outros sites

É um tanto estranho não estar funcionando. Acredito que o problema seja algo relacionado ao retorno dos dados na função abaixo do que outro problema.

$ccodiusua1[] 	= $sql->result("CCODIUSUA1");

Faça um var_dump da variável acima e cole-nos aqui o resultado, sem nenhuam modificação:

var_dump($ccodiusua1);

Assim poderemos verificar a qualidade dos dados.

 

Também, se possível, nos mande os códigos das funções $sql->result e $sql->executeSQL.

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por Willian Simione
      Boa Noite, alguem poderia me ajudar em uma situação, estou tetnando gravar os dados da tela abaixo, porem nao estou conseguindo montar o jeito certo pra ele gravar todos os dados de uma vez

    • Por vicente386
      Ola. Tenho uma tabela no 3 campos que sao "LIVRO, POS, PAGINA" ao qual a logica e a seguinte: cada livro tem 100 paginas cada pagina tem 30 posiçoes tenho 8,364 registros pra inserir chegando a 100 paginas com 30 posiçoes cada passa para o livro 2 e como fazer o update na tabela inserindo nos campos LIVRO = 1, POS de 0 a 30 e PAGINA 1 para cada 30 registros logos apos pagina 2 ?
      estou tentando fazer assim:
      <?php > ini_set('max_execution_time', 2000); $pdo = new > DO(DB_SERVER.":host=".DB_HOST.";dbname=".DB_BASE,DB_USER,DB_PASSWORD); > $sql = $pdo->prepare("SELECT count(*) FROM tabela2018"); > $sql->execute(); > $livro = 1; > foreach($sql as $obj){ > $variavel = $obj[0]; > ceil((float)$variavel/100); > $qtdlaco = ceil((float)$variavel/100); > for ($id = 1; $id <= 35; $id++) { > for($L=1; $L < $qtdlaco; $L++) { > for ($P = 0; $P <= 30; $P++) { > $sql = $pdo->prepare("UPDATE tabela2018 SET LIVRO = :LIVRO, POS = :POS, PAGINA = :PAGINA WHERE idtabela2018 = $id"); > $sql->bindValue(':LIVRO', $livro); > $sql->bindValue(':POS', $P); > $sql->bindValue(':PAGINA', $L); > $sql->execute(); > } > } > } >} ?> mas na tebela so aparece: LIVRO POS PAGINA 1 30 83 1 30 83 1 30 83 e nao como deveria : LIVRO POS PAGINA 1 0 1 1 1 1 1 2 1
    • Por Giovanird
      Tenho uma tabela com a coluna média (valor decimal) .
       
      cod | media | cod_sala 1 1,98 5 2 2,34 2 3 1,32 5 4 2,51 3 5 1,65 1 6 2,78 5 7 4,95 4 8 0,75 4 9 1,23 1 10 1,63 2 11 1,55 3 Preciso no select MYSQL ou dentro do foreach multiplicar os valores do campo média, de acordo com o fitro por cod_sala
      Exemplo pelo cod_sala: 5
      Sendo o resultdo final: 1,98 * 1,32 * 2,78 = 7,26

      Desde já agradeço!
    • Por Giovanird
      Listo um array pelo foreach e preciso pegar os valores fora do foreach.
      Abaixo tenho o exemplo do foreach com os valores
       
      <?php foreach($turma $rsturma): if(($rsturma['id'] == 1){ echo $rsturma['nome']."<br>"; echo $rsturma['idade']."<br><br>"; } endforeach; //Dentro do foreach me retorna: Luis 13 Maria 12 Carlos 12 Matheus 14 Andréa 12 //Preciso pegar a posição e o valor desta lista $posicao1 = 1; $nome1 = Luis; $posicao2 = 2; $nome2 = Maria; $posicao3 = 3; $nome3 = Carlos; $posicao4 = 4; $nome4 = Matheus; $posicao5 = 5; $nome5 = Andréa;  
    • Por Ruyter
      Estou com problema para resolver uma solução que estou necessitando. Toda ajuda será bem-vinda!
       
      Tenho uma tabela onde há vários registros com um mesmo IDENTIFICADOR e vários INDENTIFICADORES diferentes em uma mesma coluna.
      Como percorrer os registros de uma tabela, com base nos IDENTIFICADORES?
      Preciso também analisar um período por data (>= e <=) e ABSTRAIR deste período o valor MIN e MAX de uma outra coluna
      Esta consulta precisa ser realizada em cada IDENTIFICADOR DISTINTO?
       
      Já utilizei o BETWEEN, mas ao usar o código com o foreach() no PHP ele lê apenas um registro.
      O código que estou trabalhando é este:
       
      SELECT conf_hidro_inatividade, cons_reg_ident_iot, cons_data, MIN(cons_leitura_atual), MAX(cons_leitura_atual), hidro_valvula, hidro_cliente FROM tab_conf_hidro, tab_consumo INNER JOIN tab_hidrometros ON cons_reg_ident_iot = hidro_ident_iot WHERE cons_reg_ident_iot = '20220701001' and conf_hidro_inatividade = 'sim' and hidro_valvula = 'aberta' and cons_data BETWEEN '2022-10-10' and '2022-10-13';  
      Com:

       
      SELECT conf_hidro_inatividade, cons_reg_ident_iot, cons_data, cons_leitura_atual, hidro_valvula, hidro_cliente /*(sem o MIN e MAX na mesma coluna)*/ WHERE cons_reg_ident_iot != ' ' and conf_hidro_inatividade = 'sim' and hidro_valvula = 'aberta';  
      usando dentro do foreach(), percorre todos os registros.
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.