1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

[PHP] - Input é executada duas vezes

Discussão em 'Web Development' iniciada por Majin Vegeta, 9 de Junho de 2008. (Respostas: 13; Visualizações: 1497)

  1. Majin Vegeta

    Majin Vegeta Power Member

    boas pessoal e o seguinte, tenho uma input dentro de um ciclo for e a cada linha de dados listada tenho a aparecer um botao. o meu problema e que ao carregar nesse botao ele chama-me um scrip duas vezes em vez de chamar apenas uma. e ainda por cima se eu meter letras em bez de um input ou um input do tipo text, ele so executa uma vez :(

    help please


    Código:
    for($i=0;$i<$nleiloes;$i++) {
    $leilao = mysqli_fetch_assoc($result);
       $cod=$leilao['cod_leilao'];
       echo "<form action=\"index.php?pagina=meus_leiloes\" method=\"post\" enctype=\"multipart/form-data\">";
       echo '<tr><td align="center" ><font size="-1">' .$leilao['titulo'].    '</font></td>';
       echo '<td align="center" ><font size="-1">' .$leilao['descricao']. '</font></td>';
       echo "<td align=center><img src=\"imagem_leilao.php?pp=$cod\" width=30 height=30></td>";
       echo '<td align="center" ><font size="-1">' .$leilao['data_limite']. '</font></td>';
       echo '<td align="center" ><font size="-1">' .$leilao['valor']. '</font></td>';
       echo '<td align="center" ><font size="-1">' .$leilao['nick_cliente']. '</font></td>';
       echo '<td align="center" ><font size="-1">' .$leilao['estado_leilao']. '</font></td>';
       echo "<input type='hidden' value='".$leilao['cod_leilao']."' name='cod_leilao'>";
       echo "<td align='center'><input type='text' size='7' value='".$leilao['valor']."' name='valor'></td>";?>
       <td align="center">
      [COLOR=Red] <a href="javascript:confirmaExclusao('index.php?pagina=limpar_carrinho&id=<?php echo "$log";?>')"><input type="submit" name="cancelar" value="Cancelar"></a>[/COLOR]
        </td>
        <?php echo "</tr>";
    echo "</form>";
    }

    esta ai codigo da pagina onde se encontra o botao para o caso de ajudar a resolver o problema.

    cumps
     
    Última edição pelo moderador: 9 de Junho de 2008
  2. napalm

    napalm Power Member

    Porque é que não pões o código javascript tb? Não se perceber ao certo o que queres fazer...
     
  3. MPalhas

    MPalhas Power Member

    e o que é faz a função confirmaExclusao ?

    e no parametro dessa função ('index.php?pagin a=limpar_carrinho&id=<?php echo "$log";?>'), o que é a variavel $log?
    é que não a estou a ver em mais lado nenhum, e assim todos esses botões (um por cada execução do for) vão ficar exactamente com o mesmo parametro. acho que não faz muito sentido. não seria antes $cod?

    a tua duvida, já que se trocares o input por letras isso funciona, cheira-me que é porque tens o botão como submit, que vai obrigar a carregar novamente uma página
     
  4. hostmake

    hostmake Power Member

    Também acho que deve ter a ver com o facto de teres um input submit e não apenas button.
     
  5. Majin Vegeta

    Majin Vegeta Power Member

    eu nao queria postar o codigo todo da pagina que era para nao parecer maçador mas eu posto.
    a variavel $log e a variavel que leva o nick da pessoa com login efectuado.

    aqui vai a pagina:

    Código:
    <head>
    </head>
    <body>
    <?php
    $ligax=mysqli_connect('localhost','root');
    if (!$ligax){
        echo '<p>Falha  na ligação';exit;
    }
    ?>
    
    [COLOR=Red]<script language="javascript">
                    function confirmaExclusao(aURL) {
                    if(confirm('Você tem a certeza que deseja cancelar este leilão')) {
                    location.href = aURL;
                    }
                    }
                </script>[/COLOR]
    <?php
    //$nick=$_SESSION['login'];
    //echo $log;
    mysqli_select_db($ligax,'diagonalley');
    $sqlstm="select * from leilao, licitacoes where leilao.nick_cliente = '$log' and leilao.cod_leilao=licitacoes.cod_leilao order by leilao.cod_leilao"; 
    //echo $sqlstm;
    $result=mysqli_query($ligax,$sqlstm);
    $nleiloes=mysqli_num_rows($result);
    
    
            
    
    
    
    ?>
        <table border="1" align="center" width="86%" cellpadding="1" cellspacing="1" rules="rows"> 
            <tr>
                <td align="center">
                    <font size="-1"><font face="Lucida Fax"> Título </font></font>
                </td>
                <td align="center">
                    <font size="-1"><font face="Lucida Fax"> Descrição </font></font>
                </td>
                <td align="center">
                    <font size="-1"><font face="Lucida Fax"> Imagem </font></font>
                </td>
                <td align="center">
                    <font size="-1"><font face="Lucida Fax"> Data Limite </font></font>
                </td>
                <td align="center">
                    <font size="-1"><font face="Lucida Fax"> Última Licitação (€) </font></font>
                </td>
                <td align="center">
                    <font size="-1"><font face="Lucida Fax"> Último Licitador </font></font>
                </td>
                <td align="center">
                    <font size="-1"><font face="Lucida Fax"> Estado </font></font>
                </td>
            </tr> 
    <?php 
    
    for($i=0;$i<$nleiloes;$i++) {
    $leilao = mysqli_fetch_assoc($result);
       $cod=$leilao['cod_leilao'];
       echo "<form action=\"index.php?pagina=meus_leiloes\" method=\"post\" enctype=\"multipart/form-data\">";
       echo '<tr><td align="center" ><font size="-1">' .$leilao['titulo'].    '</font></td>';
       echo '<td align="center" ><font size="-1">' .$leilao['descricao']. '</font></td>';
       echo "<td align=center><img src=\"imagem_leilao.php?pp=$cod\" width=30 height=30></td>";
       echo '<td align="center" ><font size="-1">' .$leilao['data_limite']. '</font></td>';
       echo '<td align="center" ><font size="-1">' .$leilao['valor']. '</font></td>';
       echo '<td align="center" ><font size="-1">' .$leilao['nick_cliente']. '</font></td>';
       echo '<td align="center" ><font size="-1">' .$leilao['estado_leilao']. '</font></td>';
       echo "<input type='hidden' value='".$leilao['cod_leilao']."' name='cod_leilao'>";
       echo "<td align='center'><input type='text' size='7' value='".$leilao['valor']."' name='valor'></td>";?>
       <td align="center">
       [COLOR=Red]<a href="javascript:confirmaExclusao('index.php?pagina=limpar_carrinho&id=<?php echo "$log";?>')"><input type="submit" name="cancelar" value="Cancelar"></a>[/COLOR]
        </td>
        <?php echo "</tr>";
    echo "</form>";
    }
    //mysqli_close($ligax);
    ?>
    </table>

    cumps
     
    Última edição pelo moderador: 9 de Junho de 2008
  6. Majin Vegeta

    Majin Vegeta Power Member

    hostmake, ja experimentei com o button e com o submit mas acontece com os dois o mesmo problema


    cumps
     
  7. hostmake

    hostmake Power Member

    Mudei href para onclick no <a> e mudei de submit para button, e funcionou as mil maravilhas.
     
  8. napalm

    napalm Power Member

    Várias coisas que não consigo perceber:

    1. Pq é que tens a form a apontar para um url e depois o tentas mudar (erradamente) com um javascript? Pq é que não usas logo o url de 'limpar_carrinho' na action?
    2. Donde vêm o $log? Não tá no ciclo nem fora dele.
    3. Porquê location.href? Se alguma coisa, devias passar o objecto da form para a função de confirmação e aí mudar-lhe o endereço com form.action = url? Vide http://www.devguru.com/Technologies/ecmascript/QuickRef/form.html

    Estão-te a escapar várias coisas.
     
  9. Majin Vegeta

    Majin Vegeta Power Member

    ya!
    funcionou mesmo as mil maravilhas hostmake.

    obrigadao:):):):):):):):):)

    cumps

    problema resolvido:):)
     
  10. napalm

    napalm Power Member

    Isso é bom e tal mas não deixas de ter aí um fantástico "spaghetti code".
     
  11. MPalhas

    MPalhas Power Member

    o que ele quer dizer é que, apesar de funcionar, isso fica muito confuso, e haveria maneiras mais simples e lógicas de fazer a mesma coisa

    por exemplo, eu continuo a não perceber porque é que cada ciclo do for vai escrever um botão diferente, visto que todos esses botões serão iguais (o $log nunca muda por isso têm sempre o mesmo parametro). qualquer dos botões vai ter o mesmo resultado, porque não por apenas um botão no final de tudo?
     
  12. hostmake

    hostmake Power Member

    Verdade que a variável $log não está declarada.

    Quanto ao método do form, não é bem spaghetti, não tem nenhum inconveniente, fazer um redirect ou mudar o form action, porque a form só é processada depois de fazeres ok no prompt, e um sobrepõe-se ao outro.


    Edit: Mas eu acho que o $log é o $_SESSION, que ele tem comentado e atribuido ao nick que depois vai mudar.
     
    Última edição: 9 de Junho de 2008
  13. Majin Vegeta

    Majin Vegeta Power Member

    isto e o seguinte. o $log vinha de outro codigo semelhante que eu estava a usar noutra pagina e que servia para me levar o nome do cliente que tinha login efectuado.porque aqui ja nao estou a usar o $log mas outra variavel que me vai levar nao o nick mas um codigo que corresponde a cada produto.
    eu sei que podia fazer um botao para percorrer o ciclo todo mas neste caso nao da para fazer isso porque o que eu quero e fazer um update, e posso so querer fazer um update de um certo produto percebem?

    espero ter sido esclarecedor

    cumps
     

Partilhar esta Página