Update em campos Select

PHP

24/09/2012

Boa noite pessoal.. tenho uma Dúvida em relação a maneira como devo proceder em uma alteração de registros em PHP

tenho um Cadastro de Categorias, e um Cadastro de SubCategorias, que faz referencia a tabela categorias.. até ai tranquilo

no Cadastro de SubCategorias tenho as seguintes opções

Categoria (E Aqui um Campo do tipo <select com as opcoes que listo do BD)
Sub Categoria (E um input text que vai o nome da SubCategoria)

Quando vou altera o Registro, trago o Campo subcategoria, com a categoria que foi Cadastrada anteriormente

e para vir selecionado o campo select com o registro correto que ja havia cido cadastrado faço o seguinte
<?php
$id = $_GET["id"]; //Recupero o ID da subcategoria que estou alterando
include "conecta.php";
$subcategoria = mysql_query("select * from subcategorias where id = '$id'");
$exibenoform = mysql_fetch_array($subcategoria);
$categorias = mysql_query('select * from categorias'); //Busco todas as Categorias para Lista-las
$categoriaSelecionada = mysql_query("select * from categoria where id = '".$exibenoform["idcategoria"]."'"); //Busco a Categoria que foi cadastrada no Registro atual
$catselecionada = mysql_fetch_array($categoriaSelecionada);
?>
<form .......>
SubCategoria<input type="text" name="subcat"><br>
<select name="categoria">
<?php
while ($listacategorias = mysql_fetch_array($categorias)){
if ($listacategorias["id"]==$$catselecionada["id"]){
$selecionada = 'select="selected"';
}
echo '<option value="'.$listacategoria["id"].' $selecionada">'.$listacategoria["categoria"].'</option>'
}
?>
</select>


queria saber se alguém conhece uma maneira mais coerente de fazer essa listagem, com o item que ja esta gravado no BD selecionado, pois tenho a impressão de que essa maneira não é a correta de se fazer isso!

Abraços!
André Macedo

André Macedo

Curtidas 0

Melhor post

Eduardo Oliveira

Eduardo Oliveira

15/10/2012

Apenas uma correção, no FROM você especifica somente a tabela que possui o relacionamento.

FROM subCategoria
GOSTEI 1

Mais Respostas

Claudia Nogueira

Claudia Nogueira

24/09/2012

Eu também faço dessa forma, mas não sou a mais expert em PHP.
GOSTEI 0
André Macedo

André Macedo

24/09/2012

Eu também faço dessa forma, mas não sou a mais expert em PHP.


MAs parece estranho não?? você tem MSN ou SKYPE?
GOSTEI 0
Alisson Santos

Alisson Santos

24/09/2012

Verifique se esse procedimento lhe auxilia
<form action="altera.php" method="post">
<input type="hidden" name="id" value="<?php echo $id ?>">
SubCategoria<input type="text" name="subcat"><br>
<select name="categoria">
<?php
while ($listacategorias = mysql_fetch_array($categorias)){
if ($listacategorias["id"]==$$catselecionada["id"]){
$selecionada = 'select="selected"';
}
echo '<option value="'.$listacategoria["id"].' $selecionada">'.$listacategoria["categoria"].'</option>'
}
?>
</select><br />
<input type="submit" value="alterar">


Agora faça a pagina altera.php recebendo por post todo o formulario e fazendo update somente na subcategoria onde o ID é o que foi resgatado pelo Post.
GOSTEI 0
Eduardo Oliveira

Eduardo Oliveira

24/09/2012

Você quer editar uma sub-categoria se baseando em sua categoria???
Se sim, utilize join e junte suas tabelas e terás um código bem mais limpo e sem verificação(if~else) dentro do while.

  SELECT categoria.*, subCategoria.* FROM categoria, subCategoria
  JOIN categoria ON categoria.idCategoria = subCategoria.idCategoria
  WHERE
  categoria.idCategoria = '$id'
 


Essa consulta elimina boa parte de seu código, não sendo mais preciso fazer isso :
  $subcategoria = mysql_query("select * from subcategorias where id = '$id'");
  $exibenoform = mysql_fetch_array($subcategoria);
  $categorias = mysql_query('select * from categorias'); //Busco todas as Categorias para Lista-las
  $categoriaSelecionada = mysql_query("select * from categoria where id = '".$exibenoform["idcategoria"]."'"); //Busco a        Categoria que foi cadastrada no Registro atual
  $catselecionada = mysql_fetch_array($categoriaSelecionada);

 


Isso ficaria assim com a consulta que proponho que você faça:

$categoriaSelecionada = mysql_query('
                                     SELECT categoria.*, subCategoria.* 
                                     FROM categoria, subCategoria
                                     JOIN categoria ON categoria.idCategoria = subCategoria.idCategoria
                                     WHERE
                                     categoria.idCategoria = "$id"
                                    ');
$catselecionada = mysql_fetch_array($categoriaSelecionada);


Após seu while dentro do select, voce pode retirar isso também

if ($listacategorias["id"]==$$catselecionada["id"])


Pois a própria consulta já faz essa verificação.
GOSTEI 0
POSTAR