警告在 PHP 中遇到非数字值

保存发生错误的数据,但数据仍被存储。你如何摆脱这些错误?


$query1 = "SELECT * FROM t_ref_pokja WHERE status='1' ORDER BY id"; 

$hasil1 = mysqli_query($koneksi,$query1);

if ($num_rows1 = mysqli_num_rows($hasil1)) {

while($list1 = mysqli_fetch_array($hasil1)){


$no = $list1['id'];

$a= "wisuda_$no";

$b= "RT_$no";

$c= "OPR_$no";

$d= "PI_$no";

$e= "Strat_$no";

$f= "pagu_$no";

$g= "save_$no";


$nama=$_POST[$f];

$wisuda1 = $_POST[$a];

$wisuda = str_replace(",", "",$wisuda1);

$rt1 = $_POST[$b]; 

$rt = str_replace(",", "",$rt1);

$opr1 = $_POST[$c]; 

$opr = str_replace(",", "",$opr1);

$pi1 = $_POST[$d];

$pi = str_replace(",", "",$pi1);

$strat1 = $_POST[$e];

$strat = str_replace(",", "",$strat1);

$save = $_POST[$g];                    //line 66

$total =($wisuda+$rt+$opr+$pi+$strat); //line 67

$tahun = date("Y");

if($save == "save"){

在此处输入图像描述

请帮我


守着星空守着你
浏览 151回答 1
1回答

噜噜哒

首先,这些是通知和警告,而不是错误。如您所见,代码执行将在这些情况下继续,而脚本执行将在出现错误时终止。这里至少有两个不同的问题:您正在访问一个不存在的数组索引(第 66 行)您正在对非数字值使用算术运算符(第 67 行)对于 1,您应该在访问数组之前检查该键是否存在于$_POST数组中。我假设因为它在请求中不存在,所以“保存”参数是可选的。由于它不存在,null将被分配给$save,因此大概这是以后逻辑所需的值。array_key_exists您可以简单地使用或添加条件isset来阻止通知。如果您使用的是 php 7 或更高版本,则可以使用“null coalesce”operator( ??)。$save = array_key_exists($g, $_POST)?$_POST[$g]:null;或者$save = $_POST[$g]??null;对于 2,我需要更多关于其价值和意图的信息。从加法运算符和逗号替换来看,您似乎正在接受以某种方式格式化的数值。在这种情况下,PHP 会隐式地将数字字符串转换为数字。您可能需要删除进一步的格式。可能intval或floatval将适用,具体取决于输入数据。最终,您需要从字符串中提取所需的数字并在执行加法之前将它们转换为数值(除非您尝试进行字符串连接,在这种情况下请参阅运算符.)
打开App,查看更多内容
随时随地看视频慕课网APP