Array
(
)

Update em campos Select

PHP
André Macedo
   - 24 set 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!

Claudiadnh
   - 24 set 2012

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

André Macedo
   - 25 set 2012


Citação:
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?

Alisson
|
MVP
Pontos: 3400
    26 set 2012

Verifique se esse procedimento lhe auxilia
#Código

<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.

Eduardo Oliveira
   - 15 out 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.

#Código

  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 :
#Código
  $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:

#Código
$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

#Código
if ($listacategorias["id"]==$$catselecionada["id"])


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

Eduardo Oliveira
   - 15 out 2012

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

#Código

FROM subCategoria