калькулятор — PHP: всякий раз, когда я использую if! isset, я получаю эту ошибку: & quot; неопределенный индекс & quot;

Это мой php-код для моего калькуляторного приложения. Я пытаюсь сделать так, чтобы всякий раз, когда пользователь не проверял один из нескольких (4) переключателей, чтобы использовать метод подсчета, было бы предупреждение, которое говорит пользователю, что он должен использовать метод подсчета.
Но что происходит вместо этого:

Обратите внимание на неопределенный индекс: введите C: \ xampp \ htdocs \ labb1 \ miniraknare.php в строке 13
Мата в ett räknesätt!

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

Это мой код:

<?php

$miniraknare1 = $_POST['siffra1'];
$miniraknare2 = $_POST['siffra2'];
$miniraknaretyp = $_POST['typ'];

if (is_numeric($miniraknare1) && is_numeric($miniraknare2)){

if (!isset($miniraknaretyp)) {
echo("Mata in ett räknesätt!");
}

if($miniraknaretyp=="addition"){
echo $miniraknaretyp . " " . "Resultatet är:" . " " .
($miniraknare1+$miniraknare2);
}

if($miniraknaretyp=="subtraktion"){
echo $miniraknaretyp . " " . "Resultatet är:" . " " .
($miniraknare1-$miniraknare2);
}

if($miniraknaretyp=="multiplikation"){
echo $miniraknaretyp . " " . "Resultatet är:" . " " .
($miniraknare1*$miniraknare2);
}

if($miniraknaretyp=="division"){
echo $miniraknaretyp . " " . "Resultatet är:" . " " .
($miniraknare1/$miniraknare2);
}
}
else {
echo "Ditt inmatade värde är felaktigt";
}

?>

</body>
</html>

Строка 13 — это строка: $miniraknaretyp = $_POST['typ'];

Это мой HTML

<!DOCTYPE html>

<html>
<head>
<meta charset="utf-8">
<title>Inlämningsuppgift 1 – miniraknare.php</title>
</head>

<body>

Ange två siffror och välj beräkningssätt:
<form action="miniraknare.php" method="post">
<input type="text" name="siffra1" />
<input type="radio" name="typ" value="addition" />+
<input type="radio" name="typ" value="subtraktion" />-
<input type="radio" name="typ" value="multiplikation" />*
<input type="radio" name="typ" value="division" />/
<input type="text" name="siffra2" /><br />
<input type="submit" name="skicka" />
</form>
<br />
<br /></body>
</html>

1

Решение

Sidenote: это я проверял перед публикацией.

В вашем коде нет ничего плохого.

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

Либо вы разделяете эти коды, чтобы быть их собственным файлом, либо используете isset() в сочетании с именованной кнопкой отправки, также проверяя, установлен ли переключатель, и что поля, в которые вы вводите номер, не пусты.

Если вы используете весь код в одном файле и хотите оставить его как таковой, измените кнопку отправки на эту: (Я только добавил слово «Отправить» к нему)

<input type="submit" name="skicka" value="Submit" />

затем сделать, и с помощью empty() для siffra1 а также siffra2 элементы:

<?php

if(isset($_POST['skicka'])
&& isset($_POST['typ'])
&& !empty($_POST['siffra1'])
&& !empty($_POST['siffra2']) ){

$miniraknare1 = $_POST['siffra1'];
$miniraknare2 = $_POST['siffra2'];
$miniraknaretyp = $_POST['typ'];

if (is_numeric($miniraknare1) && is_numeric($miniraknare2)){

if (!isset($miniraknaretyp)) {
echo("Mata in ett räknesätt!");
}

if($miniraknaretyp=="addition"){
echo $miniraknaretyp . " " . "Resultatet är:" . " " .
($miniraknare1+$miniraknare2);
}

if($miniraknaretyp=="subtraktion"){
echo $miniraknaretyp . " " . "Resultatet är:" . " " .
($miniraknare1-$miniraknare2);
}

if($miniraknaretyp=="multiplikation"){
echo $miniraknaretyp . " " . "Resultatet är:" . " " .
($miniraknare1*$miniraknare2);
}

if($miniraknaretyp=="division"){
echo $miniraknaretyp . " " . "Resultatet är:" . " " .
($miniraknare1/$miniraknare2);
}
}
else {
echo "Ditt inmatade värde är felaktigt";
}

} // brace for if(isset($_POST['skicka']))

?>

</body>
</html>

Вы также можете добавить else

} // brace for if(isset($_POST['skicka']))

else{
echo "Nothing is set.";
}

Спасибо, просто мне нужно сообщение «Mata in ett räknesätt», чтобы показать, если пользователь не использует метод расчета. Но сообщение не появляется. Как я могу сделать это показать?

Редактировать:

Измените весь этот блок в моем коде выше:

if(isset($_POST['skicka'])
&& isset($_POST['typ'])
&& !empty($_POST['siffra1'])
&& !empty($_POST['siffra2']) ){

в

if(isset($_POST['skicka']) ){

2

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

$miniraknare1 = $_POST['siffra1'];
$miniraknare2 = $_POST['siffra2'];

if(isset($_POST['typ']))
$miniraknaretyp = $_POST['typ'];
else
echo("Mata in ett räknesätt!");
1

Вы в настоящее время проверяете, является ли переменная $miniraknaretyp установлен, но ранее в этом коде. Вы присваиваете эти переменные, ссылаясь на глобальный массив без использования isset поэтому PHP ожидает установки индексов. Рассматриваемые строки:

$miniraknare1 = $_POST['siffra1'];
$miniraknare2 = $_POST['siffra2'];
$miniraknaretyp = $_POST['typ'];

По сути, PHP думает:
Dev использует ключи массива, они должны быть установлены — но правда в том, что они не заполняются правильно из вашей HTML-формы. Таким образом, решение, чтобы остановить эту ошибку:

if (isset($_POST['typ'])){
$miniraknare1 = $_POST['typ'];
}

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

  1. Проверка на опечатки между формой HTML и проверкой PHP
  2. echo "<pre>"; var_dump($_POST); echo "</pre>"; на стороне проверки, чтобы проверить, что происходит с вашим post массив после отправки

Внесите изменения в соответствии с вашим сценарием. Неловко рассказывать, что происходит, поскольку мы не видим весь доступный код, т.е. HTML.

0

Если typ это ваш набор переключателей, и вы не можете продолжить работу, если ни одна из них не будет проверена, тогда первое, что должен сделать этот скрипт, это проверить, было ли передано значение в этом поле.

Помните, если ни одна из переключателей не проверена пользователем НИЧЕГО ТАКОГО отправляется в POST для этого имени поля, поэтому в массиве $ _POST для этого поля просто не будет вхождения.

if ( ! isset($_POST['typ']) ) {
echo 'You must click one of the radio buttons';
// exit or something like it as continuing would be pointless
}

Сделай это до того

$miniraknare1 = $_POST['siffra1'];
$miniraknare2 = $_POST['siffra2'];
$miniraknaretyp = $_POST['typ'];
0

Вам нужно проверить isset около $ _POST [‘typ’];

 if(isset($_POST['typ'])) {
$miniraknaretyp = $_POST['typ'];
}

Тогда вам нужно

if (!isset($miniraknaretyp)) {
echo("Mata in ett räknesätt!");
} else {

if($miniraknaretyp=="addition"){
echo $miniraknaretyp . " " . "Resultatet är:" . " " . ($miniraknare1+$miniraknare2);
}

if($miniraknaretyp=="subtraktion"){
echo $miniraknaretyp . " " . "Resultatet är:" . " " . ($miniraknare1-$miniraknare2);
}

if($miniraknaretyp=="multiplikation"){
echo $miniraknaretyp . " " . "Resultatet är:" . " " . ($miniraknare1*$miniraknare2);
}

if($miniraknaretyp=="division"){
echo $miniraknaretyp . " " . "Resultatet är:" . " " . ($miniraknare1/$miniraknare2);
}
}
0

или вы можете попробовать вот так:

  if (!isset($miniraknaretyp)) {
$miniraknaretyp = $_POST['typ'];
echo("Mata in ett räknesätt!");
}
-1
По вопросам рекламы [email protected]