Ir para conteúdo

Arquivado

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

sergionpinheiro

Update em Multivalorado

Recommended Posts

Bom dia galera,

 

Estou com uma pequena dúvida.

 

Tenho duas tabelas: usuários e telefones.

 

Na tabela de usuário, está assim: use_codigo, use_nome etc.

Na tabela telefone, está assim: tel_use_codigo e tel_telefone.

 

Na hora de inserir o usuário com os telefones, fica tudo ok, e tb na hora de listar. O problema é alterar se eu cadastrar mais de um telefone, pois como ele não tem um id único, ele altera somente um registro.

 

Como estou fazendo:

 

Faço um select e listo todos os telefones daquele usuário que está aberto na tela. O id dele fica salvo num sessão.

 

Tenho um form onde tem um input com o telefone atual e um botão submit ao lado. E também, neste form tem um hidden com o telefone atual do usuário.

 

Na hora de atualizar estou fazendo isso:

 

$update_telefone = "UPDATE tb_telefones SET TEL_TELEFONE = '".$_POST['telefone']."' WHERE TEL_TELEFONE = '".$_POST['telefone_atual']."' AND TEL_USE_CODIGO = '".$_SESSION['usuario']."' LIMIT 1";

 

Se houver somente um telefone, funciona perfeitamente. Com mais de um registro listado, ele altera somente o ÚLTIMO REGISTRO da lista.

 

Alguém sabe dizer pq?

 

Valeu

Compartilhar este post


Link para o post
Compartilhar em outros sites

Em primeiro lugar, nâo dê up no seu tópico, isso é um fórum, não o suporte técnico de alguma empresa.

 

Em segundo lugar, sem ver o seu formulário tudo são suposições, pelo que você passou ao que me parece é algum erro na montagem do próprio formulário. Além é claro de um erro crasso de modelagem, já que se houvesse um chave primária tudo isso seria evitado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mas, se a tabela vem com valores multivalorados, não tem pq eu criar uma chave primária para ele. Se fosse para ser assim, como vc falou, já teria resolvido.

 

Queria entender pq somente ele altera o último registro da lista, pois cada um é identificado por um botão submit com seu "id" correspondente.

 

Foi mal aí pelo up...

Compartilhar este post


Link para o post
Compartilhar em outros sites

O conceito de campo multivalorado é o seguinte, por exemplo, o usuário poderá ter N telefones, em vez de eu criar uma linha para cada telefone eu os separo de alguma maneira e coloco todos na mesma linha.

 

Se esse é o seu problema, o que você está fazendo nunca vai funcionar, pois você terá que atualizar tudo de uma vez mesmo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se um usuário pode ter vários telefones então é uma relação 1-N, logo você deveria ter uma tabela apenas com os telefones, onde cada linha é um telefone e obviamente você faria a ligação do telefone com o usuário que deveria estar em outra tabela.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Isso não é um campo multivalorado... Para facilitar a sua vida então, quando a pessoa disparar o formulário, delete todos os registros do id_user, após isso insira novamente.

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • 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 lezão
      Boa tarde, galera!
      Td bem com vcs?
       
      Estou precisando de um UPDATE que qnd eu seleciono o checkbox e clico no botão submit ele chama para a pagina que ira fazer a alteração.
      Tenho um exemplo só que  em asp, vejam abaixo:
      Imagem UPDATE
       
      espero ter explicado certo.
       
      obrigado!
       
    • Por Samuel Pietro
      Estou com a seguinte situação.
       
      Preciso que o Update só aconteça nos campos vazios. Por exemplo, tenho no CSV 
      id;a;b;c 1;1;;3 1;1;2;;  
      |id | a | b | c |
      | 1 | 1 |    | 3 |
      | 1 | 1 | 2 |  |
       
      Na primeira linha tenho o campo da coluna b em branco, logo ele irá inserir no banco de dados o conteúdo da primeira linha, quando ele ler a segunda linha irá ver que a minha key, que é a coluna id, já existe e irá atualizar, o problema é que eu preciso que  atualize apenas os campos em branco, pois se atualizar todos os campos ele iria substituir o campo da coluna c que ficaria em branco !
       
      O código que fiz até o momento! 
      INSERT INTO tabela (id, a, b, c) VALUES ('$column[0]','$column[1]','$column[2]','$column[3]') on duplicate key UPDATE id='$column[0]',a='$column[0]', b='$column[0]', c='$column[0]'  
      Gostaria da ajuda de vocês para saber como posso adequar esse código na minha necessidade, seria tipo adcionar is null UPDATE.. sei lá, tentei várias opções mas sem sucesso ainda! 
       
       
       
       
    • Por FERREIRA FILHO
      Estou tentando fazer um update de vários registros com checkbox, mais não está atualizando no banco de dados MySQL. Segue o meu código, desde já agradeço!
       
      <?php 
      include_once("../config/conexao.php");

      $nivel = $_SESSION['nivel'];
         
      if ($_SESSION['nivel'] == 4)
          {
      $sql = "SELECT ID, NOME, VOLUNTARIO FROM cidadao ORDER BY NOME";
      $res = mysql_query($sql) or die (mysql_error() );
      if (mysql_num_rows($res) > 0 )
      echo '<form method="post">';
      ?>
      <table width="431" border="0" align="center" cellpadding="0" class="bordaFina">
          <tr bgcolor="#999999" >
            <td width="302" align="center" valign="middle" bgcolor="#F0F0F0" class="style27">Nome  </td>
            <td width="123" align="center" valign="middle" bgcolor="#F0F0F0" class="style27">Voluntário</td>
          </tr>
          <?php
      while ($row = mysql_fetch_assoc($res))
          {     
          ?>
          <tr >
            <td><?php echo $row["NOME"];?></div></td>
        <td ><div align="center"> 
       <input type="checkbox" name= "VOLUNTARIOS[<?php  $row["ID"] ?>]" value="1" <?php if($row["VOLUNTARIO"] == 1){ echo "checked";} ?>> 
       <input type="hidden" name= "VOLUNTARIOS[<?php $row["ID"] ?>]" value="0" <?php if($row["VOLUNTARIO"] == 0){ echo ""; }  ?>>
        </div></td>
        </tr>
          <?php 
        }  //End While
        ?>
      </table>
        
      <p><div align="center"><?php echo '<input type="submit"name= "submit" value= "Salvar">';?></div>
        <?php
      if (isset ($_POST["submit"]))
      {        
              foreach($_POST['VOLUNTARIOS'] as $ID => $VOL) 
                {mysql_query("update cidadao SET VOLUNTARIO ='$VOL' WHERE ID='$ID'")or die(mysql_error()); }                    
                 echo "<meta HTTP-EQUIV='refresh' CONTENT='1;URL=teste.php'>";
      }
      ?>
      <?php
      echo'<br>';
      echo '</form>';
      }//endif
      ?>
       

    • Por FabianoSouza
      Pessoal, tenho uma lista com 100.000 nomes.
      Preciso colocar o campo sexo para esses registros.
       
      Os colegas sabem dizer se há alguma técnica, ferramenta ou função para realizar esse trabalho?
       
      Tive uma ideia de fazer uma comparação usando  um "dicionário de nomes". Isso seria um caminho viável? Alguém teria um dicionário para disponibilizar?
       
       
      Grato.
       
×

Informação importante

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