Как я могу POST все нажатые кнопки на странице? - PullRequest
0 голосов
/ 28 апреля 2011

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

Структура страницы выглядит следующим образом:

<!-- questions.php -->

<form action="submitquestions.php" method="post">
   <div>
      <span>This is a question</span>
      <button name="question" value="question1">Ask the question</button>
      <span>This is the answer</span>
   </div>
   <div>
      <span>This is a question</span>
      <button name="question" value="question2">Ask the question</button>
      <span>This is the answer</span>
   </div>
   <div>
   ....
   </div>
   <button name="submit">Go to the next page</button>
</form>

<!-- submitquestions.php -->
<?php if (isset($_POST['submit'])) {

        var_dump($_POST);

} ?>

Как я могу поместить все нажатые кнопки в массив $ _POST и таким образом отправить данные в мою базу данных?

Ответы [ 3 ]

1 голос
/ 28 апреля 2011

Рассмотрено использование флажков? Вы также можете красиво их оформить с помощью jQuery. Вы действительно не должны использовать <button> s в любом случае.

Просто используйте <input type="checkbox" name="question1">, а затем кнопки jQueryUI и флажки , чтобы оформить его. Убедитесь, что вы отключили его, как только он был проверен, чтобы он не был отменен.

Затем в PHP отметьте if(isset($_POST['question1'] )) {, чтобы увидеть, установлен ли флажок.

Спасибо за отзывы от комментариев.

0 голосов
/ 28 апреля 2011

Вот мое решение:

<form action="submitquestions.php" method="post">
   <div>
      <span>This is a question</span>
      <input type="checkbox" name="question[]" value="question1" style="display:none">
      <button>Ask the question</button>
      <span>This is the answer</span>
   </div>
   <div>
      <span>This is a question</span>
      <input type="checkbox" name="question[]" value="question2" style="display:none">
      <button>Ask the question</button>
      <span>This is the answer</span>
   </div>
   <div>
   ....
   </div>
   <button name="submit">Go to the next page</button>
</form>
<script>
  $(document).ready(function(){
    $("form button").click(function(){
       $(this).prev(":checkbox").attr("checked", true);
    });
  });
</script>

<!-- submitquestions.php -->
<?php if (isset($_POST['submit'])) {
    if(!isset($_POST['question'])) $_POST['question'] = array(); //Just in the case no button is pressed
    //$_POST['question'] will have an array of all clicked questions.
    var_dump($_POST);

} ?>

Как видите, мы используем «скрытые» флажки «позади» каждой кнопки, которые проверяют, когда кнопка нажата.И поскольку наши кнопки не имеют названия, а флажки имеют, мы отправляем на сервер только отмеченные флажки.

$_POST['question'] будет иметь массив всех нажатых вопросов.Не требуется isset для каждого вопроса

0 голосов
/ 28 апреля 2011

Если вы используете <button type="submit" name="this button's unique name goes here" value="1">Button text goes here</button>, вы можете проверить кнопку, которая вызвала отправку, с помощью $_POST ['this button's unique name goes here'] == 1

По крайней мере, теоретически вы можете. Internet Explorer до версии 8 неправильно обрабатывает тег <button>. В Internet Explorer 6 фактически невозможно определить, какая кнопка была нажата, если вы используете тег <button>.

http://www.w3schools.com/tags/tag_button.asp

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...