Не работают условия во внешних функциях

0

Это меня раздражало, и я не могу понять, как обойти это. Скажем, у меня есть index.php, который включает другую страницу dostuff.php, которая представляет собой просто большую функцию. На моей индексной странице у меня есть условие, которое вызывается кнопкой в форме:

---index. php---

<?php
include 'dostuff.php';

if (isset($_POST['test'])) {
    test();
}

echo '<form id="test" method="post" action="'.htmlentities($_SERVER['PHP_SELF']).'">'.PHP_EOL;
echo '<button name="test" form="test" type="submit" value="test">Test</button>'.PHP_EOL;
echo '</form>'.PHP_EOL;

В моей включенной функции у меня есть другая форма, которая вызывает другое условие внутри функции.

---dostuff. php---

<?php
function test() {
    if (isset($_POST['dostuff'])) {
        echo '<h1>Testing Do Stuff.</h1>';
    }

    echo '<form id="dostuff" method="post" action="'.htmlentities($_SERVER['PHP_SELF']).'">'.PHP_EOL;
    echo '<button name="dostuff" form="dostuff" type="submit" value="dostuff">Do Stuff!</button>'.PHP_EOL;
    echo '</form>'.PHP_EOL;
}

Когда я нажимаю кнопку на индексной странице, вызывается include и заполняет страницу своей формой. Однако, когда я нажимаю кнопку из функции, форма исчезает, и условие не выполняется.

Теперь, если я добавлю на индексную страницу следующее:

print "CONTENT_TYPE: " . $_SERVER['CONTENT_TYPE'] . "<br>";
$data = readfile('php://input');
$contents = file_get_contents('php://input');
print "<br>";
print "DATA: <pre>";
var_dump($contents);
var_dump($data);
var_dump($_POST);
print "</pre>";

Очевидно, что кнопка формы вызывается как проверенная вызовом var_dump, но условие никогда не выполняется.

CONTENT_TYPE: application/x-www-form-urlencoded
dostuff=dostuff
DATA:

string(15) "dostuff=dostuff"
int(15)
array(1) {
  ["dostuff"]=>
  string(7) "dostuff"
}

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

  • 0
    Я не могу ответить почему, но я могу хотя бы подтвердить, что вы правы.
  • 0
    Почему вы выполняете HTML-контент дважды? Если вы действительно хотите просто выполнить HTML-контент, который находится в функции test, то просто поместите функцию exit() после функции test()
Показать ещё 1 комментарий
Теги:
conditional
forms
function
external

2 ответа

0

Вопрос не изменился, см. Ниже, поскольку то, что я должен показать, не соответствует комментариям.

Если я в index.php, и я просматриваю свой источник, я получаю следующее:

<form id="test" method="get" action="/test/index.php">
    <button name="test" form="test" type="submit" value="test">Test</button>
</form>

Если я нажму тест, я теперь получаю:

<form id="dostuff" method="get" action="/test/index.php">
    <button name="dostuff" form="dostuff" type="submit" value="dostuff">Do Stuff!</button>
</form>
<form id="test" method="get" action="/test/index.php">
    <button name="test" form="test" type="submit" value="test">Test</button>
</form>

Если я использую условие для вызова своей функции, я ничего не получаю. Если я исключил условие на index.php и просто вызовет test(); Я вернусь:

<form id="dostuff" method="get" action="/test/index.php">
    <button name="dostuff" form="dostuff" type="submit" value="dostuff">Do Stuff!</button>
</form>
<form id="test" method="get" action="/test/index.php">
    <button name="test" form="test" type="submit" value="test">Test</button>
</form>

Теперь, если я нажму "Do Stuff!" Я вернусь:

<h1>Testing Do Stuff.</h1>
<form id="dostuff" method="get" action="/test/index.php">
    <button name="dostuff" form="dostuff" type="submit" value="dostuff">Do Stuff!</button>
</form>
<form id="test" method="get" action="/test/index.php">
    <button name="test" form="test" type="submit" value="test">Test</button>
</form>

Таким образом, вопрос остается тем же. Почему это не работает?

  • 0
    Я объяснил, почему он делает то, что делает. Вы до сих пор не объяснили, что вы хотите случиться!
  • 0
    Я хочу получить доступ к функции (или другим функциям) в зависимости от состояния нажатия кнопки (ий). Я думал, что кратко проиллюстрировал это своим примером, но, видимо, нет.
0

Это просто чистая логика - будет намного яснее, если вы создадите свои формы method="GET" вместо POST.

Когда вы загружаете его вначале, вы нажимаете кнопку с именем "test", поэтому при загрузке в следующий раз вы получаете значение $ _POST ['test'].

Ваш код выглядит так: index.php:

if (isset($_POST['test'])) {
    test();
}

поэтому, конечно, вызывается test(), и вы видите свой HTML из dostuff.php.

Кнопка в dostuff.php называется "dostuff", поэтому, когда вы нажимаете эту кнопку, форма снова загружается со значением в $ _POST ['dostuff'] '' НО НО ЗНАЧЕНИЕ В $_POST['test'] !! ''

Еще раз ваша логика в верхней части index.php такова:

if (isset($_POST['test'])) {
    test();
}

и поскольку в $ _POST ['test'] нет значения, ваша функция test() никогда не будет вызвана, и вы никогда не увидите кнопку, которую вы ожидаете.

На самом деле - измените свои формы на GET (вам придется использовать $ _GET или $ _REQUEST вместо $ _POST), чтобы вы могли точно видеть, что задается каждый раз, не прибегая к просмотру всех фантазийных файлов, и я думаю, что это будет быть действительно ясным.

  • 0
    Я изменил на GET, и я вижу, что вы говорите, но я все еще не понимаю, как сделать логику, чтобы получить вещи в index.php. Я немного обессилен, пытаясь заставить себя вести себя так, как мне бы хотелось, поэтому, может быть, я не вижу леса за деревьями.
  • 0
    Эм, ваш вопрос, как указано, спрашивает, почему ваша форма не отображается («мой вопрос - почему ничего не работает внутри условных выражений») - на это я и ответил. Если у вас есть другой вопрос, вы не сформулировали его выше ... (И это нехорошо менять свой вопрос после факта ...)
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню