警告php中出现非数字值[重复]

问题描述 投票:-1回答:1

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

$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"){

enter image description here

请帮助我

php arrays post
1个回答
0
投票

首先,这些是注意和警告,而不是错误。如您所见,在这些情况下,代码执行将继续,而在发生错误的情况下,脚本执行将终止。

这里至少有两个不同的问题:

  1. 您正在访问不存在的数组索引(行66)
  2. 您正在对非数值使用算术运算符(第67行)

对于1,您应在访问$_POST数组之前检查该密钥是否存在。我假设因为请求中不存在,所以“保存”参数是可选的。由于不存在,因此将null分配给$save,因此,这可能是以后逻辑所需的值。您可以简单地使用array_key_existsarray_key_exists添加条件以防止发出通知。如果您使用的是php 7或更高版本,则可以使用isset

isset

OR

"null coalesce" operator(??)

对于2,我需要有关其价值和意图的更多信息。从加法运算符和逗号替换来看,您似乎正在接受以某种方式设置格式的数值。在这种情况下,PHP会将数字字符串隐式转换为数字。您可能需要删除其他格式。取决于输入数据,??$save = array_key_exists($g, $_POST)?$_POST[$g]:null; 可能适用。最终,您需要从字符串中提取所需的数字并将其转换为数字值,然后再执行加法运算(除非您尝试进行字符串连接,在这种情况下,请参见$save = $_POST[$g]??null; 运算符)

© www.soinside.com 2019 - 2024. All rights reserved.