Переменная $ _POST - PullRequest
       27

Переменная $ _POST

0 голосов
/ 11 июля 2009

Я столкнулся с проблемой. Я использую Wordpress, но это не вопрос Wordpress.

Я использую две формы, в одной форме у меня есть все поля ввода и одно скрытое поле ввода, которое я использую для проверки, какую форму отправил пользователь. Я сохранил его значение как «сохранить». Есть еще одна форма, которая предназначена только для сброса всех параметров, и ее значение - «сброс». В PHP я проверяю значение скрытого поля и предпринимаю соответствующие действия. Но проблема в том, что кнопка сброса не работает.

Вот мой HTML для форм:

<fieldset>
    <form method="post">
        <!-- Some input fields here-->
        <p class="submit">
            <input name="save" type="submit" value="Save changes" />
            <input type="hidden" name="action" value="save" />
        </p>
    </form>
</fieldset>
<fieldset>
    <form method="post">
        <p class="submit">
            <input name="reset" type="submit" value="Reset" />
            <input type="hidden" name="action" value="reset" />
        </p>
    </form>
</fieldset>

В PHP я проверяю их следующим образом:

// if I change the 'save' literal to something else like 'savea', $_POST variable will not be empty
// but if I dont, then $_POST variable is NULL
if ('save' == $_POST['action']) {
    foreach ($this->cp_options as $option) {
        if (isset($_POST[$option['id']])) {
            update_option($option['id'], $_POST[$option['id']]);
        }
        else {
            delete_option($option['id']);
        }
    }

    header("Location: themes.php?page=functions.php&saved=true");
    die;
}
// if I change the 'reset' literal to something else like 'reseta', $_POST variable will not be empty
// but if I dont, then $_POST variable is NULL

elseif ('reset' == $_POST['action']) {
    foreach($this->cp_options as $option) {
        delete_option($option);
    }

    header("Location: themes.php?page=functions.php&reset=true");
    die;
}

Проблема в том, что если я заменил литерал 'reset' или 'save' на что-либо еще, например 'reseta' или 'saveasdfasd', $_POST, переменная не будет пустой, но если я не буду, то переменная $_POST NULL.

Есть идеи, почему это происходит?

Ответы [ 5 ]

2 голосов
/ 11 июля 2009

[Старый ответ отредактирован]

EDIT

Попробуйте сначала изолировать среду тестирования. Это дало мне ожидаемые результаты.

<?php

if ( isset( $_POST['action'] ) )
{
  switch( $_POST['action'] )
  {
    case 'save':
      echo 'Save Action Requested';
      break;
    case 'reset':
      echo 'Reset Action Requested';
      break;
    default:
      echo 'Unknown action requested:';
      var_dump( $_POST['action'] );
  }
} else {
  echo 'No action parameter received';
}

?>
<fieldset>
    <form method="post">
        <!-- Some input fields here-->
        <p class="submit">
                <input name="save" type="submit" value="Save changes" />
                <input type="hidden" name="action" value="save" />
        </p>
    </form>
</fieldset>
<fieldset>
    <form method="post">
        <p class="submit">
                <input name="reset" type="submit" value="Reset" />
                <input type="hidden" name="action" value="reset" />
        </p>
    </form>
</fieldset>
0 голосов
/ 06 октября 2009

Это может произойти, потому что есть дубликаты элементов с одинаковыми именами. Можете ли вы попробовать ввести идентификатор или имя в форму?

0 голосов
/ 22 июля 2009

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

0 голосов
/ 13 июля 2009

Простые ... удалите скрытые входы и измените обе ваши кнопки "Отправить", чтобы иметь то же имя, но разные значения:

<input type="submit" name="action" value="Reset" />
<input type="submit" name="action" value="Save" />

Тогда вы можете проверить это так:

if ($_POST['action'] === 'Reset') {
    // Do a reset here
} else {
    // Do a save here
}

И вы, вероятно, хотите обернуть все это в:

if (isset($_POST['action'])) {
    // Put your form handling here
}
0 голосов
/ 11 июля 2009

Я знаю, что вы сказали, что $ _POST равен нулю, но вы предполагаете это или вы действительно проверяли $ _POST == null? Вы пытались сделать var_dump ($ _ POST), чтобы распечатать точно, что передается через? Просто закомментируйте свое направление и посмотрите, что в $ _POST. Может быть, это даст вам лучшую подсказку о том, что происходит.

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