Как PHP может определить, нажал ли пользователь клавишу Enter или кнопку Отправки?

StackOverflow https://stackoverflow.com/questions/795132

  •  18-09-2019
  •  | 
  •  

Вопрос

Проблема, с которой я сталкиваюсь, заключается в том, что у меня есть несколько входных данных в одной форме.Каждый из этих входных данных submit имеет разное значение, и я бы предпочел сохранить их как submit.

Всякий раз, когда пользователь нажимает Войти, это как если бы нажимался самый верхний ввод отправки, и поэтому это вызывает проблемы для кода, проверяющего, какой ввод был нажат.

Есть ли способ для PHP определить, был ли нажат ввод, или это был просто ввод, который был выбран, когда пользователь нажал кнопку Войти ключ?

Это было полезно?

Решение

Вы можете определить, какая кнопка была использована, при условии, что вы правильно структурируете свой HTML-код

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

Тот Самый $_POST массив (или $_GET/$_REQUEST) будет содержать клавишу "действие" со значением введенной в действие кнопки (независимо от того, нажата она или нет).

Теперь "щелчок" явно является поведением на стороне клиента - если вы хотите провести различие между щелчком и нажатием клавиши, вам нужно будет добавить некоторые сценарии в вашу форму, чтобы помочь в этом определении.

Редактировать

В качестве альтернативы, вы можете быть "хитрым" и использовать скрытую отправку, которая должна правильно идентифицировать нажатую клавишу для отправки, но это, вероятно, оказывает некоторое существенное влияние на доступность.

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

Другие советы

Роберто,

PHP является серверной технологией и поэтому работает на сервере, поэтому у него нет возможности определить, какие клавиши были нажаты клиентом (то есть пользователем).То есть, конечно, если вы специально не закодируете клиентскую сторону для включения такой информации в запросы сервера (отправка данных формы также является формой запроса).

Один из способов добиться этого — использовать Javascript в клиентском коде.

См. эту страницу как отправную точку для обработки событий отправки формы с использованием Javascript.http://www.w3schools.com/jsref/jsref_onSubmit.asp

Возможно, вам также придется добавить прослушиватель событий нажатия клавиш на вашей странице, чтобы фиксировать нажатие пользователем клавиши Enter, а затем записывать эту информацию.http://www.howtocreate.co.uk/tutorials/javascript/domevents предлагает обсуждение темы добавления/удаления прослушивателей событий в Javascript, но вы должны быть очень осторожны при использовании событий, поскольку неправильное их использование может стать источником утечек памяти, которые трудно отлаживать и вызывать недовольство пользователей :)

PHP сам по себе не может определить, как было вызвано событие отправки формы, поскольку это происходит на стороне клиента, а PHP является языком на стороне сервера.Вам придется реализовать Javascript для прослушивания и регистрации на стороне сервера нажатий клавиш и щелчков мыши, а затем проанализировать эти данные, чтобы найти то, что вы ищете.

Теперь PHP может сказать который Ввод отправки был активирован, так как он появится в данных формы, а остальные — нет.Большинство браузеров делают первый вход отправки по умолчанию (тот, который запускается при Входить нажатие клавиши).Вы можете изменить порядок всех ваших отправок, чтобы контролировать, какая из них будет запущена.

PHP не может знать, что произошло на стороне клиента.

Я бы рекомендовал использовать JavaScript.Когда пользователь выполняет действие, перехватите его и сохраните в скрытом поле, которое будет отправлено вместе с формой.Вы также можете отслеживать, какой ввод активен, и сохранять его в скрытом поле.

Код будет выглядеть примерно так (я не проверял синтаксис)

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

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

Я думаю, что игра с перехватом событий и скрытыми полями должна дать вам желаемый результат.

надеюсь, это поможет

Это то, как вы пишете разметку на стороне клиента.

Например, вот один (не XHTML) способ сделать это:

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

В myform.php:

if ($_POST['pressed_button']=='false') {
   // Logic for enter key
} else {
   // Logic for button press
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top