Вызываю функцию PHP с обработчиками кнопок, а они срабатывают сами по себе

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

<?php
require "php/include_db.php";
$src = null;

$locationInfo = R::load('locationsdb', 1);
$src = $locationInfo->location_image;
echo $src;
setButton($locationInfo->location_travel);

function setButton($locationInfo_travel)
{
    $arr_travels = explode(' ', $locationInfo_travel);

    for ($i = 0; $i < count($arr_travels); $i++) {
        echo ", ", $arr_travels[$i];
    }

    echo '<pre>' . print_r($_POST, true) . '</pre>';

    if (!empty ($_POST['location_button_1'])) {
        $locationInfo = R::load('locationsdb', $arr_travels[0]);
        $src = $locationInfo->location_image;
        echo $src;
        setButton($locationInfo->location_travel);
    }
    if (!empty ($_POST['location_button_2'])) {
        $locationInfo = R::load('locationsdb', $arr_travels[1]);
        $src = $locationInfo->location_image;
        echo $src;
        setButton($locationInfo->location_travel);
    }
    if (!empty ($_POST['location_button_3'])) {
        $locationInfo = R::load('locationsdb', $arr_travels[2]);
        $src = $locationInfo->location_image;
        echo $src;
    }
    if (!empty ($_POST['location_button_4'])) {
        $locationInfo = R::load('locationsdb', $arr_travels[3]);
        $src = $locationInfo->location_image;
        echo $src;
    }
}

?>

Форма:

<div class="location_buttons_container">
    <div class="buttons_container">
        <form method="post" action="Game.php">
            <ul class="buttons_menu">
                <li>Локации</li>
                <li ><span ><button id="location_button_1" name="location_button_1" value="selected">Главные ворота</button></span><em>3 сек.</em></li>
                <li><span><button name="location_button_2" value="selected">Торговый квартал</button></span><em>2 сек</em></li>
                <li><span><button name="location_button_3" value="selected">Замок</button></span><em>5 сек</em></li>
                <li><span><button name="location_button_4" value="selected">Гильдия</button></span><em>4 сек</em></li>
            </ul>
        </form>
    </div>
</div>

Ответы (2 шт):

Автор решения: Improbus42

Попробуй заменить !empty, на isset. Чтобы было примерно так: if(isset($_POST['location_button_3'])) Это проверка на нажатие будет тогда

→ Ссылка
Автор решения: Daniel Protopopov

Насколько я понимаю вы делаете GET запрос на файл Game.php для показа самой формы. В этом случае добавьте проверку на пустой массив $_POST перед вызовом setButton на восьмой строке:

if(empty($_POST)) {
   setButton($locationInfo->location_travel);
 }

Аналогично можно проверить какой тип запроса пришёл через

 if($_SERVER['REQUEST_METHOD'] == 'GET') {
   setButton($locationInfo->location_travel);
 }

Объяснение

POST запрос отсылается при отсылке формы, а GET запрос - для получения HTML содержимого файла, которое выводится у вас через echo. Код выше решит вашу проблему с вызовом функции, которая должна быть вызвана только при GET запросе на указанном месте (остальные вызовы остаются как есть)

→ Ссылка