Не отрабатывает скрипт php на странице HTML

116
27 августа 2021, 13:00

Есть HTML-форма, которая отвечает за выбор валюты (для отображения цен в таблице). C формой работает скрипт PHP, который бы позволил сохранить последнюю валюту, которую выбирал пользователь. Написал скрипт, но не могу проверить его работу, так как не знаю почему скрипт не может отработать.

Файл lr3.html:

<form method="POST" action="lr4.php">
   <div id="radio">
      <input type="radio" name="currency" id="UAH" value="UAH" checked>UAH
      <input type="radio" name="currency" id="USD" value="USD">USD
      <input type="radio" name="currency" id="RUB" value="RUB">RUB
      <input type="submit">
   </div>
</form>

Файл lr4.php:

 <?php
if (isset($_POST['currency']) && $_POST['currency'] == "UAH") {
    setcookie('UAH', "true", 600, '/');
    setcookie('USD', "false", 600, '/');
    setcookie('RUB', "false", 600, '/');
    $UAH = 'checked="checked"';
    $USD = '';
    $RUB = '';
} else if(isset($_POST['currency']) && $_POST['currency'] == "USD") {
    setcookie('UAH', "false", 600, '/');
    setcookie('USD', "true", 600, '/');
    setcookie('RUB', "false", 600, '/');
    $UAH = '';
    $USD = 'checked="checked"';
    $RUB = '';
} else if(isset($_POST['currency']) && $_POST['currency'] == "RUB") {
    setcookie('UAH', "false", 600, '/');
    setcookie('USD', "false", 600, '/');
    setcookie('RUB', "true", 600, '/');
    $UAH = '';
    $USD = '';
    $RUB = 'checked="checked"';;
}
if (isset($_COOKIE['UAH']) && $_COOKIE['UAH'] == "true") {
    $UAH = 'checked="checked"';
    $USD = '';
    $RUB = '';
} else if (isset($_COOKIE['USD']) && $_COOKIE['USD'] == "true") {
    $UAH = '';
    $USD = 'checked="checked"';
    $RUB = '';
} else if (isset($_COOKIE['RUB']) && $_COOKIE['RUB'] == "true") {
    $UAH = '';
    $USD = '';
    $RUB = 'checked="checked"';
}?>
Answer 1

Мне немного интересно, зачем при имени поля name="currency" Вы проверяете наличие параметра с именем radio?

<input type="radio" name="currency" id="UAH" value="UAH" checked <?= $UAH; ?> />UAH
...
if (isset($_POST['radio']) && $_POST['radio'] == "UAH") ...

не могу проверить его работу, так как он не хочет срабатывать.

По этой причине и не срабатывает. Ознакомьтесь с руководством по работе с формами. А лучше - прочесть для начала все руководство с официального сайта, уверен - сразу станет проще отлаживаться.

P.S. Одна из самых полезных при отладке функций PHP - var_dump(). Она позволяет посмотреть, что же именно находится в переменной. Если, например, в код PHP включить

echo '<pre>$_POST = ';
var_dump($_POST);
echo '</pre>';

то можно увидеть переданные скрипту методом POST параметры. Очень пользительно при отладке.

Update

По обновленному вопросу. Файл lr3.php

<?php
$currencies = ['UAH', 'USD', 'RUB'];
// Если не установлено - установить начальное значение
$settedCurrency = $_COOKIE['currency'] ?? $currencies[0];
//если некорректное значение - установить начальное значение
$currentCurrency = in_array($settedCurrency, $currencies) ?
                   $settedCurrency : $currencies[0];
?>
<form method="POST" action="lr4.php">
   <div id="radio">
<?php
    foreach ($currencies as $currency) {
      echo "\t<input type=\"radio\" name=\"currency\" id=\"$currency\" value=\"$currency\"",
           $currency === $currentCurrency ? ' checked' : '', '/>', $currency, "\n";
    }
?>
   </div>
   <input type="submit">
</form>

Файл lr4.php

<pre>
<?php
echo '$_POST = ';
var_dump($_POST);
echo '$_COOKIES = ';
var_dump($_COOKIE);
$currencies = ['UAH', 'USD', 'RUB'];
// Если не установлено - установить начальное значение
$settedCurrency = $_POST['currency'] ?? $currencies[0];
//если некорректное значение - установить начальное значение
$currentCurrency = in_array($settedCurrency, $currencies) ?
                   $settedCurrency : $currencies[0];
if (($_COOKIE['currency'] ?? '') !== $currentCurrency) {
    setcookie('currency', $currentCurrency, time() + 600, '/');
}
echo "\n\nУстановлена валюта ", $currentCurrency;
?>
</pre>
<a href="lr3.php">Вернуться на lr3.php</a>
READ ALSO
Как правильно организовать парсер php?

Как правильно организовать парсер php?

Пишу парсер для одного сайтаНа сайте есть авторизация, это сильно усложняет, т

121
yii2 как передать во вью из контроллера переменную которая может быть null

yii2 как передать во вью из контроллера переменную которая может быть null

При рендеринге вида возникает ошибка Call to a member function isAttributeRequired() on nullКонтроллер:

215
В обход dependency injection symfony

В обход dependency injection symfony

Потихоньку осваивая symfony 4 возникли недопониманияИмеется абстрактный репозиторий в который inject-ица некий DriverManager объект-коннекшн к базе...

324
Map-merge при наличии List в качестве значений

Map-merge при наличии List в качестве значений

Задача следующая - есть мапа, которая хранит в себе Id и связанный с ним список значений

173