Forum Pplware

Versão Completa: update mysql data base com select list menu
Está de momento a ver uma versão reduzida do nosso conteúdo. Ver versão completa com o formato adequado.
BOM DIA, JA CONSEGUI COM QUE A ULTIMA LINHA QUE ME SAI DA BASE DADOS SEJA ALTERADA....MAS SÓ NA ULTIMA.....POIS NOS RESTANTES NAO FUNCIOINA......ALGUEM ME PODE AJUDAR? EU PRETENDIA ALTERAR O ESTADO DAS ENCOMENDAS ...


<?php
if(isset($_REQUEST['alterar'])){

require 'LIGACAO_bd.php';

// $id = $_POST['id'];

$alterar ="UPDATE encomendas SET estado='".$_POST['alterar_estado']."' WHERE id='".$_POST['id']."' ";

 $estado = mysql_query($alterar);
 
 }
 
?>







<?php
require 'LIGACAO_bd.php';

$escolher ="SELECT * FROM encomendas";
$consulta = mysql_query($escolher);
?>
<form action="ver_encomendas.php" method="post" name="alterar dados">
<table width="1000" border="0" cellspacing="0" align="center">

  <tr align="center" class="tabAZUL1">
    <td width="20">ID</td>
    <td width="81">USUARIO</td>
    <td width="87">PRODUTO</td>
    <td width="42">QTD</td>
    <td width="103">DOSE</td>
    <td width="96">DIA ENTREGA</td>
    <td width="109">HORA ENTREGA</td>
    <td width="127">DATA ENCOMENDA</td>
    <td width="121">ESTADO</td>
    <td width="107">ATUALIZAR</td>
    <td width="85"><input type="submit" value="ALTERAR" disabled="disabled" /></td>
  </tr>
  <?php while($mostrar = mysql_fetch_array($consulta)){ ?>
 
  <tr align="center" class="corTABELA" >
    <td class="texto"><?php echo $mostrar['id'] ;?></td>
    <td class="texto"><?php echo $mostrar['nome'];?></td>
    <td class="texto"><?php echo $mostrar['produto'];?></td>
    <td class="texto"><?php echo $mostrar['quantidade'];?></td>
    <td class="texto"><?php echo $mostrar['dose'];?></td>
    <td class="texto"><?php echo $mostrar['dia_entrega'] ;?></td>
    <td class="texto"><?php echo $mostrar['hora_entrega'] ;?></td>
    <td class="texto"><?php echo $mostrar['data_encomenda'] ;?></td>
    <td class="texto"><?php echo $mostrar['estado'] ;?></td>
    <td><select name="alterar_estado">
      <option value="pendente">pendente</option>
      <option value="feita">feita</option>
      <option value="esgotado">esgotado</option>
      </select></td>
    <td><input type="submit" name="alterar" value="ALTERAR" style="cursor:pointer" /><input type="hidden" name="id" id="id" value="<?php echo $mostrar ['id'] ; ?>" /></td>
    <?php  } ?> 
  </tr>
</table>
</form>
Tu crias uma tonelada de botões submit e hidden inputs com o nome id... o form vai ignorar todos excepto o último de cada. Por isso é que só consegues editar o último registo obtido da base de dados.

(E por favor, usa as tags de [ code ] e [/ code ] (sem espaços dentro) para delimitar o código. Fica muito mais legível)
(13-03-2014 15:06)Corvus Escreveu: [ -> ]Tu crias uma tonelada de botões submit e hidden inputs com o nome id... o form vai ignorar todos excepto o último de cada. Por isso é que só consegues editar o último registo obtido da base de dados.

(E por favor, usa as tags de [ code ] e [/ code ] (sem espaços dentro) para delimitar o código. Fica muito mais legível)
então no meu caso ...como posso dar volta á questão ?
Uma maneira que estou a ver de dares a volta à situação seria concatenares o id do registo ao nome da form. Assim ficas com nomes diferentes para cada registo. A complicação é que terás de fazer um split ao nome quando fores processar o post no servidor.

Algo deste género (atenção que não testei o código, é apenas uma ideia tirada da cabeça):

Ao criar a form:
Código:
...
...
<td><input type="submit" name="alterar_<?php echo $mostrar['id'] ?>" style="cursor: pointer;" /></td>

Ao processar o post:
Código:
foreach ($var in $_POST) {
  if ('alterar_' === substr($var, 0, 8)) {   // verifica se o campo começa por 'alterar_'
    $id = substr($var, -1 * (strlen($var) - 8));  // obtem o id

    // aqui processas o update da tabela

    break;
  }
}


Uma última nota: não adianta mandares mensagem privada pois não é isso que me faz vir aqui ao fórum. Aliás, só vejo se tenho mensagens privadas quando cá venho... e nota bem a minha assinatura dos posts Wink
(13-03-2014 21:47)Corvus Escreveu: [ -> ]Uma maneira que estou a ver de dares a volta à situação seria concatenares o id do registo ao nome da form. Assim ficas com nomes diferentes para cada registo. A complicação é que terás de fazer um split ao nome quando fores processar o post no servidor.

Algo deste género (atenção que não testei o código, é apenas uma ideia tirada da cabeça):

Ao criar a form:
Código:
...
...
<td><input type="submit" name="alterar_<?php echo $mostrar['id'] ?>" style="cursor: pointer;" /></td>

Ao processar o post:
Código:
foreach ($var in $_POST) {
  if ('alterar_' === substr($var, 0, 8)) {   // verifica se o campo começa por 'alterar_'
    $id = substr($var, -1 * (strlen($var) - 8));  // obtem o id

    // aqui processas o update da tabela

    break;
  }
}


Uma última nota: não adianta mandares mensagem privada pois não é isso que me faz vir aqui ao fórum. Aliás, só vejo se tenho mensagens privadas quando cá venho... e nota bem a minha assinatura dos posts Wink

tá...muito obrigado pela dica, e desculpa qq coisa, pois sou novato nestas coisas Smile
URL's de Referência