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

Это беспокоило меня, и я не могу понять, как обойти это. Скажем, у меня есть 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
ДАННЫЕ:

строка (15) "dostuff = dostuff" int (15)
массив (1) {
[ "DoStuff"] =>
string (7) "dostuff"}

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

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

Другие решения

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

Если я нахожусь в 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

По вопросам рекламы [email protected]