Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Из за чего ошибка в php

pluplregpl Мастер (1275), закрыт 1 месяц назад
Сам сайт работает и когда я ставлю галочку и нажимаю на кнопку, ошибка пропадает, но она меня так бесит, как её пофиксить и как убрать отображание ошибок
 <!DOCTYPE html> 
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<form action="index.php" method="post">
<div>Температура</div>
<input type="text" name="a"><br>
<div>Облачность</div>
<input type="checkbox" name="b" value="propertyValue"/><br>
<input type="submit" value="нажми"><br>
</form>
</body>
</html>

<?php
if($_POST["a"] >= 5 && $_POST["a"] <= 30){
echo "+++";
}
else{
echo "---";
}

if($_POST["b"] == true){
echo"<br>добольно облачно";
}
else{
echo "ясное небо";
}
?>
Лучший ответ
робот д24 Просветленный (24416) 1 месяц назад
Надо сделать проверку: isset($_POST["b"])
Остальные ответы
Александр Кайсин Мыслитель (6156) 1 месяц назад
из всего я заметил только "доБольно облачно?"
htserh hstrh Мыслитель (6177) 1 месяц назад
Ошибка возникает из-за попытки обратиться к несуществующим элементам массива `$_POST` при первом открытии страницы (когда форма ещё не отправлена). Вот исправленный код:

```php
<?php
// Отключаем вывод ошибок на экран (можно настроить в php.ini для продакшена)
error_reporting(0);
ini_set('display_errors', 0);

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$temperature = isset($_POST["a"]) ? (int)$_POST["a"] : null;
$cloudy = isset($_POST["b"]);

if ($temperature !== null && $temperature >= 5 && $temperature <= 30) {
echo "+++";
} else {
echo "---";
}

echo $cloudy ? "<br>довольно облачно" : "<br>ясное небо";
}
?>
```

**Исправления:**
1. Проверяем метод запроса (`POST`)
2. Используем тернарный оператор для безопасного получения данных
3. Приводим температуру к числу
4. Для чекбокса проверяем факт его существования в запросе
5. Добавлено подавление ошибок (лучше использовать только на продакшене)

**Для полного отключения ошибок (включить в начале скрипта):**
```php
<?php
error_reporting(0);
ini_set('display_errors', 0);
// ...остальной код
```

**Рекомендации:**
1. Всегда проверяйте существование ключей в `$_POST` через `isset()`
2. Для чекбоксов используйте проверку на существование, а не на значение
3. Валидируйте и санируйте пользовательский ввод
4. На продакшене держите `display_errors = Off` в php.ini
Лайт ЯгамиИскусственный Интеллект (329260) 1 месяц назад
Научи нейросеть использовать null coalesce operator, с ним проще и лучше читается
Лайт Ягами Искусственный Интеллект (329260) 1 месяц назад
Проверять существование переменной, или использовать оператор "??"
S.H.I. Оракул (72836) 1 месяц назад
 <?php 
// Убираем вывод ошибок (добавить в начало файла)
error_reporting(0);
ini_set('display_errors', 0);

// Проверяем, была ли отправлена форма
if($_SERVER['REQUEST_METHOD'] === 'POST') {
$temperature = isset($_POST["a"]) ? (int)$_POST["a"] : null;
$isCloudy = isset($_POST["b"]);

// Проверка температуры
if($temperature !== null && $temperature >= 5 && $temperature <= 30) {
echo "+++";
} else {
echo "---";
}

// Проверка облачности
echo $isCloudy ? "<br>добольно облачно" : "<br>ясное небо";
}
?>
Для полного отключения ошибок на продакшн-сервере лучше изменить эти настройки в php.ini:
 display_errors = Off 
error_reporting = E_ALL & ~E_NOTICE
Похожие вопросы