我已经升级了我的测试服务器到PHP 8,我有一个问题,我的年度员工假期脚本(计算出多少小时/分钟已被占用和多少剩余),并首先给我以下错误信息;
Fatal error: Uncaught TypeError: Unsupported operand types: int - string in在Google之后,我认为这已经通过在字符串中添加(int)来解决了。
我现在收到以下错误信息;
Fatal error: Uncaught TypeError: Unsupported operand types: string / int in on line 169见下面第169行的代码。
我尝试过的任何东西--所以谷歌--似乎都不起作用。
第169行
$hours = floor($minutes/60).'.'. ($minutes % 60);原始代码
<?php
$time = $holiday_remain_time['total_year_holiday_hours_complete'];
$total_year_holiday_hours = $holiday_remain_time['total_year_holiday_hours'] * 60;
$remaining = ($total_year_holiday_hours - $holiday_remain_time['total_year_holiday_hours_complete']);
$minutes = $holiday_remain_time['total_year_holiday_hours_complete'];
$hours = floor($minutes/60).'.'. ($minutes % 60);
$showHours = floor($minutes/60).' Hour '. ($minutes % 60) . ' Minute';
$reminutes = $remaining;
$reshowHours = floor($reminutes/60).' Hour '. ($reminutes % 60) . ' Minute';
?>修正码
<?php
$time = $holiday_remain_time['total_year_holiday_hours_complete'];
$total_year_holiday_hours = $holiday_remain_time['total_year_holiday_hours'] * 60;
$remaining = ((int)$total_year_holiday_hours - (int)$holiday_remain_time['total_year_holiday_hours_complete']);
$minutes = $holiday_remain_time['total_year_holiday_hours_complete'];
$hours = floor($minutes/60).'.'. ($minutes % 60);
$showHours = floor($minutes/60).' Hour '. ($minutes % 60) . ' Minute';
$reminutes = $remaining;
$reshowHours = floor($reminutes/60).' Hour '. ($reminutes % 60) . ' Minute';
?>数据库
`id` int(11) NOT NULL,
`user_id` int(100) DEFAULT NULL,
`total_year_holiday_hours` int(100) DEFAULT NULL,
`total_year_holiday_hours_complete` int(100) DEFAULT NULL输出示例
Yearly Holiday : 40 Hours
Already Holiday Taken : 15 Hours
Remaining Holiday Hour: 25 Hours显示码
<tbody>
<?php foreach($holiday_activity as $record){
$hour = $record['hour'] * 60;
$minutes = $hour + $record['minute'];
$hours = intdiv($minutes, 60).' Hour '. ($minutes % 60) . ' Minute';
?>
<tr>
<td><?php $date = $record['date']; $bits = explode('-', $date); $date = $bits[2] . '/' . $bits[1] . '/' . $bits[0]; echo $date; ?></td>
<td><?php $date = $record['end_date']; $bits = explode('-', $date); $date = $bits[2] . '/' . $bits[1] . '/' . $bits[0]; echo $date; ?></td>
<td><?= $hours; ?></td>
<td><?php echo $record['status']; ?></td>
<td>
<?php if($record['status'] == 'active'){ echo 'cannot change'; } else{ ?>
<a href="" class="btn btn-primary" data-toggle="modal" data-target="#staticBackdrop<?php echo $record['id']; ?>">
Edit
</a> <!-- <a href="delete.php" class="btn btn-warning">Cancel</a> -->
<?php } ?>
</td>
</tr>我已经将数据库列更改为INT,并运行var_dump($hours);它在上面修改的代码之前显示为NULL。
如果运行var_dump($hours);在修改后的代码中,它不会显示任何内容。
发布于 2022-09-02 12:15:14
经过大量提示之后,您已经确认来自数据库的$minutes确实不是一个数字,它是一个空字符串。
因此,最简单的错误再现是:
$minutes = "";
echo $minutes / 60;就像你在这个方便的网站上看到的将在您现有的PHP7服务器上记录一个警告,这现在已经成为一个错误。
由您来决定如何处理空字符串(以及任何其他无效的输入)。您可以输出一个错误,告诉用户修复它,或者您可以将其视为零。也许空字符串应该是零,但是其他意外的输入应该被拒绝:
if ( $minutes === '' ) {
$minutes = 0;
}
elseif ( ! ctype_digit($minutes) ) {
// You probably want something more useful than a die()
// Maybe throw an exception, or log something somewhere and skip the item
die("total_year_holiday_hours_complete contains non-digit characters!");
}https://stackoverflow.com/questions/73581855
复制相似问题