Botões Alterar e Cancelar - erro na funcionalidade

khaluh

Power Member
Viva

Estou aqui com um problema daqueles que devem ser básicos, mas de tanto procurar o erro, já me parece que está tudo bem feito.

Então o código é o seguinte:
PHP:
<?php
    include '../ligacao_bd.php';

    //Captura da opção
    $opcao == $_GET['submit'];
    //Captura do id da memoria
    $id = $_POST['id_memorias'];
    //Captura do estado da memoria
    $estado = $_POST['estado_alt'];
    
    if ($opcao = 'Alterar')
    {

         //Cria e executa consulta em SQL        
        $sql =     "
                UPDATE memorias 
                SET     
                    mem_estado = '$estado' 
                WHERE mem_id_mem = $id
                ";

        $resultado = mysql_query($sql) 
        or die ("Erro ao actualizar dados da memória.");
        
        //Envia para a página memórias
        header("location:../index.php?opcao=memorias");

    }
     
    else if ($opcao = 'Cancelar')
        {
        header("location:../index.php?opcao=memorias");
        }
    
?>
A parte do alterar está a funcionar, só que quando faço cancelar apaga os dados relativos campo mem_estado.

A variável
PHP:
 //Captura do estado da memoria
    $estado = $_POST['estado_alt'];
vem do seguinte código na página onde escolho a alteração
PHP:
<td width="250">
                <select name="estado"  onChange = "javascript:altera_estado_memorias();">
                <option value='se' selected > Escolher </option>
                <?php
                    while($row_mem=mysql_fetch_array($estado))
                    {
                          echo "<option value='$row_mem[ep_estado]'>$row_mem[ep_estado]</option>";
                    }
                ?>
            </select>
            <input type="hidden" name="estado_alt" id="estado_alt" size="3"> 
    </td>
Eu penso que o erro talvez esteja no que escrevi no
Código:
else if ($opcao = 'Cancelar')
        {
        header("location:../index.php?opcao=memorias");
        }
mas não sei qual será o erro.

Obs. Quando faço cancelar, se tiver alterado o campo, ele atribui o valor existente no campo alterado (em suma, fazem os 2 botões o mesmo)
 
Última edição:
boas,

1 - não me parece boa prática -> $row_mem[ep_estado] mas sim $row_mem['ep_estado'].
2 - else if ($opcao = 'Cancelar'), não funka. tens de ter: else if ($opcao == 'Cancelar'), idem idem...


abraço,
 
Última edição:
1 - não me parece boa prática -> $row_mem[ep_estado] mas sim $row_mem['ep_estado'].
Estou a usar o Dreamweaver MX 2004 e ele aceita apenas como sintaxe correcta este código
PHP:
echo "<option value='$row_proc[ep_estado]'>$row_proc[ep_estado]</option>";
2 - else if ($opcao = 'Cancelar'), não funka. tens de ter: else if ($opcao == 'Cancelar'), idem idem...
Já tive else if ($opcao = 'Cancelar') e else if ($opcao == 'Cancelar') e dão-me todos o mesmo problema, ficam sempre no
PHP:
if ($opcao == 'Alterar')
    {

         //Cria e executa consulta em SQL        
        $sql =     "
                UPDATE processadores 
                SET     
                    pr_estado = '$estado' 
                WHERE pr_id_proc = $id
                ";

        $resultado = mysql_query($sql) or die ("Erro ao actualizar dados do processador.");
        
        //Envia para a página processadores
        header("location:../index.php?opcao=processadores");

    }
Ah, e se usar if ($opcao == 'Alterar') manda-me ir passear, se usar if ($opcao = 'Alterar') ele fica todo contente...

Obrigado na mesma
 
se calhar porque tens -> $opcao == $_GET['submit']; quando devias ter $opcao = $_GET['submit'];

... e porquê $_GET ?


Abraço,

ps - o teu DW deve tar marado... podes lixar no DW e 'forçar'' essa alteração.
 
Última edição:
se calhar porque tens -> $opcao == $_GET['submit']; quando devias ter $opcao = $_GET['submit'];
Essa era básica, fogo... >(
Resolvida a questão, continuo com o mesmo problema

... e porquê $_GET ?
Porque? Não te sei responder :-D mas como era só passar uma simples opção, nao me preocupei muito com o $_GET ou o $_POST, pois considerei que nao seria importante a nível de segurança usar um ou outro.

Penso que seja um erro na formulação dos if's, pois mesmo com as alterações efectuadas acontece-me o mesmo.

O que penso que poderei fazer é passar o valor actual (antes da alteração) e o alterado e caso seja escolhido o Alterar coloco o actual, se for o Cancelar, forço uma actualização, com o valor antes da alteração.

O DW é uma versão educacional, pois estou numa escola de formação
 
mas repara no seguinte:
se o teu form faz action POST como esperas o retorno de um GET ?

de qq forma if($opcao = 'Alterar') é que não pode ser. tens mesmo de utilizar o == .

abraço,

ps - podes sempre tentar uma aproximação mais directa. if($_POST['Submit']=='Alterar')... else if ($_POST['Submit']=='Cancelar') else ..... ou talvez se 'limpares' a variável $opcao antes: $opcao='' e depois $opcao=$_POST[Submit'].
 
Última edição:
mas repara no seguinte:
se o teu form faz action POST como esperas o retorno de um GET ?
Já o meu prof está-me sempre a avisar do mesmo :lol: E como vou tendo sorte, as coisas vão funcionando

de qq forma if($opcao = 'Alterar') é que não pode ser. tens mesmo de utilizar o == .
Fiz essa alteração

ps - podes sempre tentar uma aproximação mais directa. if($_POST['Submit']=='Alterar')... else if ($_POST['Submit']=='Cancelar') else ..... ou talvez se 'limpares' a variável $opcao antes: $opcao='' e depois $opcao=$_POST[Submit'].
Optei por fazer uma limpeza inicial da variável $opcao e agora como fiz as 3 alterações em simultaneo, nao sei qual era ou se eram as 3

Obrigado
 
Já.

Obrigado, era simples, como tinha dito inicialmente, só que de tanto ver, parecia tudo correcto.

Relativamente ao
scroll disse:
1 - não me parece boa prática -> $row_mem[ep_estado] mas sim $row_mem['ep_estado'].
ele apenas aceita como correcto o
PHP:
echo "<option value='$row_proc[ep_estado]'>$row_proc[ep_estado]</option>";
fazendo o pretendido desta forma e dando erro usando a formula recomendada.
 
Back
Topo