首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP8和Holiday脚本的问题

PHP8和Holiday脚本的问题
EN

Stack Overflow用户
提问于 2022-09-02 11:26:46
回答 1查看 70关注 0票数 0

我已经升级了我的测试服务器到PHP 8,我有一个问题,我的年度员工假期脚本(计算出多少小时/分钟已被占用和多少剩余),并首先给我以下错误信息;

代码语言:javascript
复制
Fatal error: Uncaught TypeError: Unsupported operand types: int - string in

在Google之后,我认为这已经通过在字符串中添加(int)来解决了。

我现在收到以下错误信息;

代码语言:javascript
复制
Fatal error: Uncaught TypeError: Unsupported operand types: string / int in on line 169

见下面第169行的代码。

我尝试过的任何东西--所以谷歌--似乎都不起作用。

第169行

代码语言:javascript
复制
$hours      =   floor($minutes/60).'.'. ($minutes % 60);

原始代码

代码语言:javascript
复制
<?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';

?>

修正码

代码语言:javascript
复制
<?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';

?>

数据库

代码语言:javascript
复制
  `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

输出示例

代码语言:javascript
复制
Yearly Holiday : 40 Hours
Already Holiday Taken : 15 Hours
Remaining Holiday Hour: 25 Hours

显示码

代码语言:javascript
复制
        <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);在修改后的代码中,它不会显示任何内容。

EN

回答 1

Stack Overflow用户

发布于 2022-09-02 12:15:14

经过大量提示之后,您已经确认来自数据库的$minutes确实不是一个数字,它是一个空字符串。

因此,最简单的错误再现是:

代码语言:javascript
复制
$minutes = "";
echo $minutes / 60;

就像你在这个方便的网站上看到的将在您现有的PHP7服务器上记录一个警告,这现在已经成为一个错误。

由您来决定如何处理空字符串(以及任何其他无效的输入)。您可以输出一个错误,告诉用户修复它,或者您可以将其视为零。也许空字符串应该是零,但是其他意外的输入应该被拒绝:

代码语言:javascript
复制
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!");
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73581855

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档