Domanda

Il problema che ho è che ho più input di invio in un unico modulo.Ciascuno di questi input di invio ha un valore diverso e preferirei mantenerli come invio.

Ogni volta che l'utente preme accedere, è come se venisse premuto l'input di invio più in alto e quindi si causano problemi al codice che controlla su quale input è stato fatto clic.

Esiste un modo per PHP di determinare se è stato fatto clic o meno sull'input o se era solo l'input selezionato quando l'utente ha premuto il pulsante accedere chiave?

È stato utile?

Soluzione

È possibile identificare il tasto che è stato utilizzato a condizione di strutturare correttamente il codice HTML

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

La matrice $_POST (o $_GET/$_REQUEST) conterrà il "azione" chiave con il valore del pulsante emanato (se cliccato o no).

Ora, "cliccando" è esplicitamente un comportamento lato client -. Se si vuole distinguere tra un clic e pressione di un tasto, è necessario aggiungere un po 'di scripting per il modulo per aiutare nella determinazione che

Modifica

In alternativa, si può essere "subdolo" e utilizzare un nascosta sostengono che dovrebbe identificare correttamente una chiave pressato per la presentazione, ma questo probabilmente ha un certo impatto significativo in materia di accessibilità.

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

Altri suggerimenti

Roberto,

PHP è una tecnologia server-side e quindi viene eseguito sul server - quindi non c'è alcun modo per poter determinare le chiavi cosa dove premuti client (cioè l'utente). Che è, naturalmente, a meno che non si codifica in particolare il lato client per includere tali informazioni con le richieste del server (la pubblicazione dei dati del modulo è una forma di richiesta di troppo).

Un modo per realizzare questo è quello di utilizzare Javascript nel codice client.

Si veda questa pagina come punto di partenza per quanto riguarda la movimentazione forma presentare eventi utilizzando Javascript. http://www.w3schools.com/jsref/jsref_onSubmit.asp

Si può anche essere necessario aggiungere un listener per eventi di pressione dei tasti sulla tua pagina al fine di catturare l'utente preme il tasto Invio e quindi la registrazione di queste informazioni. http://www.howtocreate.co.uk/tutorials/javascript/domevents offre una discussione sul tema di aggiungere / rimuovere i listener di eventi in Javascript, ma bisogna essere molto attenti quando si usano eventi perché impropriamente utilizzati possono essere la fonte di perdite di memoria che sono difficili da eseguire il debug e la causa per gli utenti insoddisfatti:)

solo PHP non è in grado di determinare come la forma pubblica un evento è stato attivato, perché ciò accade sul lato client, mentre PHP è un linguaggio lato server. Avresti per implementare Javascript per ascoltare - e accedere al server-side -. Tasti premuti e click del mouse, e poi analizzare i dati per trovare quello che stai cercando per

Ora, PHP può dire che presentare voce è stata innescata, come apparirà nei dati dei moduli, mentre gli altri non lo faranno. Maggior parte dei browser rendono la prima presentare ingresso di default (quello che viene attivato su un Invio premere il tasto). Si potrebbe riordinare tutte le sottomette in modo da controllare che presentano viene attivato.

PHP non può realmente sapere cosa è successo sul lato client.

Consiglierei di utilizzare JavaScript.Quando l'utente esegue l'azione, catturala e memorizzala in un campo nascosto che verrà inviato con il modulo.Puoi anche tenere traccia di quale input è attivo e memorizzarlo in un campo nascosto.

Il codice sarebbe un po' così (non ho controllato la sintassi)

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

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

Penso che giocare con la cattura di eventi e i campi nascosti dovrebbe darti il ​​risultato che desideri.

Spero possa aiutare

E 'come si scrive il markup sul lato client.

Per esempio, ecco uno (non XHTML) modo si potrebbe fare questo:

Nel file 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>

In myform.php:

if ($_POST['pressed_button']=='false') {
   // Logic for enter key
} else {
   // Logic for button press
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top