PHP使用$_POST时出现Undefined index错误的解决方法
解决PHP中$_POST的Undefined index错误
我是编程和PHP的新手,每次运行代码时网页都会提示:
Notice: Undefined index: tiempos in C:\wamp64\www\pruebaaaa\Act 1.php on line 14
以下是我的代码:
<!doctype HTML> <HTML> <head> <title>Act 1</title> <meta charset="utf-8"> </head> <body> <form name="form1" method="POST" action="Act 1.php"> Digite los segundos : <input name="tiempos" type="text" id="tiempos"> <br> <input type="submit" name="submit" value="Calcular"> </form> <?php $segundos = $_POST['tiempos']; $horas = $segundos/3600; $minutos = $segundos/60; print 'Segundos : ' . $segundos; print '<br> Minutos : ' . intval($minutos); print '<br> Horas : ' . intval ($horas); ?> </body> </html>
错误原因
首次打开页面时,表单还未提交,$_POST数组里不存在tiempos这个键,直接访问该键就会触发Undefined index的提示。
解决方法
方法1:判断请求方式,仅在POST提交时执行逻辑
通过$_SERVER['REQUEST_METHOD']判断当前请求是否为POST,只有提交表单后才处理数据:
<?php if ($_SERVER['REQUEST_METHOD'] === 'POST') { $segundos = $_POST['tiempos']; $horas = $segundos/3600; $minutos = $segundos/60; print 'Segundos : ' . $segundos; print '<br> Minutos : ' . intval($minutos); print '<br> Horas : ' . intval ($horas); } ?>
方法2:用isset()检查键是否存在
赋值前先确认$_POST['tiempos']是否存在,避免直接访问不存在的键:
<?php $segundos = isset($_POST['tiempos']) ? $_POST['tiempos'] : ''; if ($segundos !== '') { $horas = $segundos/3600; $minutos = $segundos/60; print 'Segundos : ' . $segundos; print '<br> Minutos : ' . intval($minutos); print '<br> Horas : ' . intval ($horas); } ?>
方法3:使用PHP7+的null合并运算符(更简洁)
这是isset()三元判断的简化写法:
<?php $segundos = $_POST['tiempos'] ?? ''; if ($segundos !== '') { $horas = $segundos/3600; $minutos = $segundos/60; print 'Segundos : ' . $segundos; print '<br> Minutos : ' . intval($minutos); print '<br> Horas : ' . intval ($horas); } ?>
额外优化:添加输入验证
为了避免用户输入非数字导致计算错误,可以加上数值验证:
<?php if ($_SERVER['REQUEST_METHOD'] === 'POST') { if (isset($_POST['tiempos']) && is_numeric($_POST['tiempos'])) { $segundos = (int)$_POST['tiempos']; $horas = $segundos / 3600; $minutos = $segundos / 60; print 'Segundos : ' . $segundos; print '<br> Minutos : ' . intval($minutos); print '<br> Horas : ' . intval($horas); } else { print '请输入有效的数字'; } } ?>
内容的提问来源于stack exchange,提问作者Ark
相关产品推荐
相关产品推荐

