Pergunta

O problema que tenho é que eu tenho múltipla enviar entradas em um único formulário. Cada uma dessas entradas apresentar tem um valor diferente e eu prefiro mantê-los como submeter-se.

Sempre que o usuário pressiona Enter , é como se a entrada superior submeter está sendo pressionado, e por isso está causando problemas para a verificação de código que entrada foi clicado.

Existe uma maneira de PHP para determinar se ou não a entrada foi clicado, ou foi apenas a entrada que foi selecionada quando o usuário pressionou o Enter chave?

Foi útil?

Solução

Você pode identificar qual botão foi usado desde que você estruturar seu HTML corretamente

<input type="submit" name="action" value="Edit">
<input type="submit" name="action" value="Preview">
<input type="submit" name="action" value="Post">

A matriz $_POST (ou $_GET/$_REQUEST) irá conter a chave "ação" com o valor do botão promulgada (seja clicado ou não).

Agora, "clicar" é explicitamente um comportamento do lado do cliente -. Se você quiser diferenciar entre um clique e uma tecla, você vai precisar adicionar alguns scripts para o formulário aos auxílios estatais sob essa determinação

Editar

Como alternativa, você pode ser "sorrateira" e usar um escondido afirmam que deve identificar corretamente um para a apresentação, mas isso provavelmente tem algum impacto significativo sobre a acessibilidade pressionou-chave.

<?php

if ( 'POST' == $_SERVER['REQUEST_METHOD'] )
{
    echo '<pre>';
    print_r( $_POST );
    echo '</pre>';
}

?>
<form method="post">

    <input type="text" name="test" value="Hello World">

    <input type="submit" name="action" value="None" style="display: none">
    <input type="submit" name="action" value="Edit">
    <input type="submit" name="action" value="Preview">
    <input type="submit" name="action" value="Post">

</form>

Outras dicas

Roberto,

PHP é uma tecnologia do lado do servidor e, portanto, é executado no servidor - então não há nenhuma maneira para que possa determinar o que as chaves onde pressionadas no cliente (aka o usuário). Isto é, naturalmente, a menos que você especificamente código do lado do cliente a incluir tais informações com as solicitações do servidor (postagem de dados de formulário é uma forma de pedido também).

Uma maneira de fazer isso é usando o JavaScript no seu código do cliente.

Veja esta página como um ponto de partida sobre manipulação formulário enviar eventos usando Javascript. http://www.w3schools.com/jsref/jsref_onSubmit.asp

Você também pode ter que adicionar um ouvinte para eventos de imprensa chave em sua página, a fim de capturar o usuário pressiona a tecla Enter e, em seguida, gravar esta informação. http://www.howtocreate.co.uk/tutorials/javascript/domevents apresenta uma discussão sobre o tema de adicionar / remover ouvintes de eventos em Javascript mas você tem que ter muito cuidado ao usar eventos porque usadas de forma inadequada podem ser a fonte de vazamentos de memória que são difíceis de depurar e motivo de usuários insatisfeitos:)

PHP por si só não pode determinar como o formulário de envio evento foi disparado, porque o que acontece no lado do cliente, enquanto PHP é uma linguagem do lado do servidor. Você teria que implementar Javascript para ouvir - e log para o servidor-side -. Pressionamento de teclas e cliques do mouse, e em seguida, analisar os dados para encontrar o que você está procurando

Agora, PHP pode dizer que enviar entrada foi desencadeada, como ele aparecerá nos dados do formulário, enquanto os outros não. A maioria dos navegadores fazer a primeira enviar entrada padrão (aquele que é acionado em um Enter pressione a tecla). Você pode reordenar todos os seus submete de modo a controlar o que apresentar é acionado.

PHP não pode realmente saber o que aconteceu no lado do cliente.

Eu recomendo usar javascript. Quando o usuário fazer a ação, pegá-lo e armazená-lo em um campo oculto que serão submetidos com o formulário. Você também pode acompanhar o que de entrada é ativa e armazená-lo em um campo escondido.

O código seria um pouco assim (não funcionavam i verificado a sintaxe)

<input type="text" onfocus="setCurrent(this)" id="1" />
<input type="hidden" id="hid" />

function setCurrent(o){
  $('hid').value = o.id;
}

Eu acho que brincar com eventos captura e campos ocultos deve lhe dar o resultado que você deseja.

Espero que ajude

É como você escrever a marcação no lado do cliente.

Por exemplo, aqui é uma maneira (não XHTML), você poderia fazer isso:

No arquivo HTML:

<form method="post" action="myform.php" id="myform">
  ... form items here ...

<input type="submit" name="enter_key" value="true" style="display:none">
<input type="hidden" name="pressed_button" id="pressed_button" value="false">
<input type="button" value="Submit"
  onclick="document.getElementById('pressed_button').value='true';document.getElementById('myform').submit();">
</form>

Em myform.php:

if ($_POST['pressed_button']=='false') {
   // Logic for enter key
} else {
   // Logic for button press
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top