Я пытаюсь встроить самоссылающийся скрипт PHP в форму HTML со следующим кодом:
Неопределенный индекс: conv
<form action = "<?php $_SERVER['PHP_SELF'] ?>" method = "post">
<input type = "number" id = "temp2" name = "temperature2" placeholder = "28">
<label for = "temp2"> degrees </label>
<select>
<option name = "conv" value = "f"> Fahrenheit </option>
<option name = "conv" value = "c"> Celsius </option>
</select>
<input type = "submit" value = "equals">
<?php
$type = $_POST["conv"];
$tmp = $_POST["temperature2"];
if ($type == "f") {
$newTmp = (9/5 * $tmp) + 32;
echo $newTmp . " degrees Celsius.";
}
elseif ($type == "c") {
$newTmp = (5 * ($tmp - 32)) / 9;
echo $newTmp . " degrees Fahrenheit.";
}
?>
</form>
И я получаю эти сообщения:
Примечание: неопределенный индекс: conv Примечание: неопределенный индекс: температура2
Все работало нормально, когда скрипт PHP был в другом файле.
Кто-нибудь знает, что я делаю не так?
Вы должны убедиться, что вы отправили страницу и $ _POST существует. И исправьте выбранный элемент
<form action = "<?php $_SERVER['PHP_SELF'] ?>" method = "post">
<input type = "number" id = "temp2" name = "temperature2" placeholder = "28">
<label for = "temp2"> degrees </label>
<select name = "conv">
<option value = "f"> Fahrenheit </option>
<option value = "c"> Celsius </option>
</select>
<input type = "submit" value = "equals">
<?php
if(isset($_POST["temperature2"])) {
$type = $_POST["conv"];
$tmp = $_POST["temperature2"];
if ($type == "f") {
$newTmp = (9/5 * $tmp) + 32;
echo $newTmp . " degrees Celsius.";
}
elseif ($type == "c") {
$newTmp = (5 * ($tmp - 32)) / 9;
echo $newTmp . " degrees Fahrenheit.";
}
}
?>
</form>
Переменная ($type = $_POST["conv"];
) не устанавливается, пока форма не будет обработана. Делать
if (!empty($_POST["conv"])) {
$type = $_POST["conv"];
}
Ваш код PHP будет работать каждый время загрузки страницы, а не только когда кто-то нажимает отправить. Это означает, что он ищет там $_POST['conv']
а также $_POST['temperature2']
но ничего не находит, потому что форма не была опубликована.
Вам нужно назвать свою кнопку отправки и затем окружить всю вашу обработку PHP if
как это:
<input type = "submit" name="mysubmit" value = "equals">
<?php
if (@$_POST['mysubmit']) {
$type = $_POST["conv"];
$tmp = $_POST["temperature2"];
if ($type == "f") {
$newTmp = (9/5 * $tmp) + 32;
echo $newTmp . " degrees Celsius.";
}
elseif ($type == "c") {
$newTmp = (5 * ($tmp - 32)) / 9;
echo $newTmp . " degrees Fahrenheit.";
}
}
?>
Теперь он будет смотреть на этот код PHP только тогда, когда кто-то действительно что-то отправил. Помещение @ перед @ $ _ POST [‘mysubmit’] делает так, чтобы вы не получили ту же ошибку, что и раньше, для этого нового ключа массива.