Pregunta

El problema que tengo es que tengo varias entradas de presentar en un único formulario. Cada uno de éstos se someten entradas tiene un valor diferente y yo preferiría mantenerlos como enviar.

Cada vez que el usuario pulsa Intro , es como si el más elevado de entrada está siendo presionado presente, y los problemas por lo que está causando para la comprobación de código que se ha hecho clic entrada.

¿Hay una manera de PHP para determinar si se hizo clic en la entrada, o era sólo la entrada que fue seleccionada cuando el usuario pulsa el Enter ?

¿Fue útil?

Solución

Puede identificar qué botón se usa, siempre que la estructura de su HTML correctamente

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

La matriz $_POST (o $_GET/$_REQUEST) contendrá la tecla "acción" con el valor del botón promulgado (si hace clic o no).

Ahora, "clic" es explícitamente un comportamiento del lado del cliente -. Si se quiere diferenciar entre un clic y pulsar una tecla, tendrá que añadir algunas secuencias de comandos a su formulario para ayudar en la determinación de que

Editar

Como alternativa, puede ser "astuto" y utilizar un escondido sostienen que debe identificar correctamente una clave de prensado para la presentación, pero esto probablemente tiene algún impacto significativo en la accesibilidad.

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

Otros consejos

Roberto,

PHP es la tecnología del lado del servidor y por lo tanto se ejecuta en el servidor - lo que no hay manera de que para determinar qué teclas donde se presiona en el cliente (usuario). Esto es, por supuesto, a menos que se codifican específicamente el lado del cliente para incluir dicha información con las peticiones del servidor (la publicación de los datos del formulario es una forma de solicitud también).

Una forma de lograrlo es mediante el uso de Javascript en su código de cliente.

Vea esta página como punto de partida respecto a la forma de manejo presentar eventos usando Javascript. http://www.w3schools.com/jsref/jsref_onSubmit.asp

También puede tener que añadir un detector de eventos de pulsación de teclas en su página con el fin de capturar el usuario pulsa la tecla Enter y luego registrar esta información. http://www.howtocreate.co.uk/tutorials/javascript/domevents ofrece una discusión sobre el tema de añadir / quitar detectores de eventos en Javascript, pero hay que tener mucho cuidado al usar eventos debido a uso incorrecto pueden ser la fuente de pérdidas de memoria que son difíciles de depurar y motivo de usuarios descontentos:)

PHP por sí sola no puede determinar la forma presente evento se activó, debido a lo que sucede en el lado del cliente, mientras que PHP es un lenguaje de servidor. Habría que aplicar Javascript para escuchar - y conectarse a la del lado del servidor -. Pulsaciones de teclas y clics del ratón, y luego analizar los datos para encontrar lo que está buscando

Ahora, PHP puede decir que presenten entrada fue provocada, tal y como aparecerá en los datos del formulario, mientras que los otros no lo harán. La mayoría de los navegadores hacen la primera entrada de presentar el valor por defecto (el que se desencadena en un Intro pulsación de tecla). Se podría volver a ordenar todas sus somete a fin de controlar que presenten se activa.

PHP no puede saber realmente lo que ocurrió en el lado del cliente.

Me gustaría recomendar el uso de JavaScript. Cuando el usuario haga la acción, cogerlo y almacenarlo en un campo oculto que estará sometido a la forma. También puede realizar un seguimiento de lo que la entrada está activa y almacenarlo en un campo oculto.

El código podría ir un poco así (Yo aún no ha comprobado la sintaxis)

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

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

Creo que jugar un poco con los eventos de captura y campos ocultos que debe dar el resultado que desea.

Espero que ayude

Es la forma de escribir el marcado en el lado del cliente.

Por ejemplo, aquí es una (no XHTML) forma en que podría hacer esto:

En el archivo 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>

En miformulario.php:

if ($_POST['pressed_button']=='false') {
   // Logic for enter key
} else {
   // Logic for button press
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top