View Full Version : Caixas select em PHP


Crisis
14-09-2005, 19:21
Boa tarde, gostaria que me dessem a vossa opinião num empasse a que cheguei se for possivel, passo a explicar.

A ideia é ter um pedaço de codigo que me apaga um utilizador de uma base de dados mysql, o codigo esta estruturado da seguinte maneira e com o seguinte interface:

Uma caixa drop-box (select) com um botão OK a dta.
Depois de carregar no botão OK em baixo aparece uma frase de confirmação de eliminação de utilizador com 2 botões SIM e NÃO.

pseudo-codigo:
<?php
ligação a base de dados
ler base de dados para drop box
desenhar botão OK
if request ok desenha frase de confirmação e botões SIM e NÃO
if SIM faz outra ligação a base de dados e apaga o utilizador
?>

O problema é o seguinte. escolho o utilizador e carrego em OK, aparece-me em baixo a confirmação de eliminação do utilizador escolhido e a drop box selecciona o 1º utilizador automaticamente, parece q faz refresh e volta para o 1 utilizador da lista e quando carrego em SIM é apagado o primeiro utilizador da lista sempre, a questão é, como fazer que a drop box mantenha o valor seleccionado inicialmente depois de carregar no OK.

Não sou grande programador de php mas vou-me safando.

cumprimentos e obrigado
Rafael Silva

Marsupillami
14-09-2005, 23:57
Deves ter um ciclo while que te faz os <option></option>, não tens? Basta comparares dentro do ciclo, o valor com o $_POST['valor']. Se for igual, acrescentas o selected à tag <option>, senão fica sem nada. Ex:

while($linha = mysql_fetch_array($qid)) {

$var = '';

if($linha['nome'] == $_POST['nome'])
$var = 'selected';

echo '<option value="...." name="...." ' . $var . '>lalalala</option>';

}

Não sei se tá suficientemente explícito nem se está totalmente correcto (deve ter uns errozitos pequenos por aí) pois foi feito mesmo agora à pressa. De qq das formas tens aí a essência.

EDIT: Também tens como alternativa guardar o $_POST numa variavel temporaria que depois usas na confirmação, mas é melhor o método de cima.

dr_tuborg
16-09-2005, 10:34
Deves ter um ciclo while que te faz os <option></option>, não tens? Basta comparares dentro do ciclo, o valor com o $_POST['valor']. Se for igual, acrescentas o selected à tag <option>, senão fica sem nada. Ex:

while($linha = mysql_fetch_array($qid)) {

$var = '';

if($linha['nome'] == $_POST['nome'])
$var = 'selected';

echo '<option value="...." name="...." ' . $var . '>lalalala</option>';

}

Não sei se tá suficientemente explícito nem se está totalmente correcto (deve ter uns errozitos pequenos por aí) pois foi feito mesmo agora à pressa. De qq das formas tens aí a essência.

EDIT: Também tens como alternativa guardar o $_POST numa variavel temporaria que depois usas na confirmação, mas é melhor o método de cima.



Deves utilizar uma variável temporária para a confirmação!
Senão olha aqui:
Escolhes o utilizador 2 da drop-down para apagar. Aparece-te a cena para confirmar e o utilizador que está escolhido é o segundo...até aqui tudo bem...
so que depois, e antes de confirmares, escolhes o terceiro utilizador....
adivinha qual vai ser o utilizador que vais apagar? adivinha lá.... pois....é claro...o terceiro...
tens de ter no HTML um input hidden:
<input type="hidden" name=id_utiizador_escolhido value=[id_utilizador_na_base_de_dados]>
e quando fazes confirmar apagas o utilizador com o id que é passado nesta variável e não o que vem da drop-down!


compreendido?

Nazgulled
16-09-2005, 11:04
tens varias hipoteses... fazes o que o Marsupillami disse, mas aconselho-te depois a desactivares esse campo select pk n tem logica aparecer a pergunta sim/não e permiter mudar de utilizador de novo... ou então fazes mais ou menos o que dr_tuborg disse... usas um hidden field com o id do utilizador que selecioanste previamente na select e na apgina onde aparece a pergunta sim/não, escusas de voltar a mostrar o form com o select...

tens ainda outra opção que é a maneira como eu uso sempre... um bocadinho de javascript que ao fazer click no botão ele faz uma pergunta com sim e não, ao clciar em sim ele processa o codigo do form, ao clicar em não, n faz nada, é como se n tivesses clicado no botão.

Crisis
18-09-2005, 11:15
Obrigado desde já a todos pela ajuda, consegui resolver o problema graças a ajuda do Marsupillami, e consegui tirar tambem 2 boas ideias, como a utilização de hidden fields e de javascipt cuja utilização vai ficar para o fim, ja que escolhi fazer este programa de gestão de clientes em php vou aproveitar para explora-lo ao maximo ja que é uma linguagem que estou a aprender sozinho e desde o inicio :)

Cumprimentos e obrigado
Rafael Silva