Php 空MySQL字段时出错,即使有条件

Php 空MySQL字段时出错,即使有条件,php,mysql,Php,Mysql,当我在我的web应用程序中单击一个包含值的项目时,我没有得到任何错误,但我在MySQL中创建了另一个带有空字段的项目,我在我的web应用程序PHP应用程序中单击了它,因此我得到了以下错误: 未定义变量:总计 C:\wamp\www\architect\projDetails.php,第80行 我有以下PHP代码: $id = $_REQUEST['id']; $sql = "SELECT (SELECT SUM(total_pay) FROM workers) total,workers. *

当我在我的web应用程序中单击一个包含值的项目时,我没有得到任何错误,但我在MySQL中创建了另一个带有空字段的项目,我在我的web应用程序PHP应用程序中单击了它,因此我得到了以下错误:

未定义变量:总计 C:\wamp\www\architect\projDetails.php,第80行

我有以下PHP代码:

$id = $_REQUEST['id'];
$sql = "SELECT (SELECT SUM(total_pay) FROM workers) total,workers. * FROM workers WHERE projects_id = ".$id." ORDER BY date_of_pay DESC";
$stmt = mysqli_query($con, $sql) or die($sql."<br/><br/>".mysqli_error($con));
第80行附近的html和php代码:

 <tr>

      <?php while($rows = mysqli_fetch_array($stmt)){ $total = 0; ?>
    <tr>
    <?php if($rows['total']!=0){
        $total = $rows['total'];
    }
    else {
        $total = "غير متوفر";
    }
        ?>
      <td align="center"><?php echo $rows['total_pay']?></td>
      <td align="center"><?php echo $rows['date_of_pay']?></td>
      <td align="center"><?php echo $name['project_name'] ?></td>
      <td align="center"><!--<input class="imgClass_insert" type="submit" name="submit1" value="" />-->
        <input class="imgClass_dell" type="submit" onClick="return confirm('Are you sure you want to delete?')" name="delete_workers" value=""/>


    </td>
  </tr>

    </tr>
  <?php } ?>
  <tr>    

    <td colspan="3">مجموع تكاليف العمال في مشروع <?php echo $name['project_name']?></td>
    <td align="center"><?php echo $total ?></td>
  </tr>

因此,当total为空时,我会得到错误,当它不为空时,我不会得到任何错误,那么这里有什么问题吗?

尝试下面的方法

echo isset($total)? $total: 0;
变量$total当前仅在while块中有效。您将在语句处退出此块。这意味着您的变量不再分配在下面的代码行中。要在while块下方使用此总变量,请在while块上方添加变量的声明和初始化,例如:

<tr>
    <?php $total = 0;
          while($rows = mysqli_fetch_array($stmt)){ ?>
    <tr>
        <?php if($rows['total']!=0){      <-- Check this comparison (described below)
            $total = $rows['total'];
        }
        else {
            $total = "غير متوفر";
        }
        ?>
        <td align="center"><?php echo $rows['total_pay']?></td>
        <td align="center"><?php echo $rows['date_of_pay']?></td>
        <td align="center"><?php echo $name['project_name'] ?></td>
        <td align="center"><!--<input class="imgClass_insert" type="submit" name="submit1" value="" />-->
            <input class="imgClass_dell" type="submit" onClick="return confirm('Are you sure you want to delete?')" name="delete_workers" value=""/>
        </td>
    </tr>
</tr>
<?php } ?>
<tr>    
    <td colspan="3">مجموع تكاليف العمال في مشروع <?php echo $name['project_name']?></td>
    <td align="center"><?php echo $total ?></td>
</tr>

希望这对你有用。上面代码中带注释的行将比较字符串和整数值。请注意,$rows['total']将包含字符串类型的值。您的比较是针对整数值0进行的。PHP不应该抛出错误或警告,但在这个if语句中可能会产生不想要的结果。进一步信息:

这里,如果我们从数据库中获取任何数据,那么只有它才会进入while循环。现在,在while循环中,仅定义$total。 如果我们在while循环之外定义它,默认值将解决这个问题

<tr> <?php 
    $total = "0";
    while($rows = mysqli_fetch_array($stmt)){ $total = 0; 
      if($rows['total']!=0){
          $total = $rows['total'];
      }
      //.....
      //.....
    } ?>
</tr>
<tr>
    <td colspan="3">some text <?php echo $name['project_name']?></td>
    <td align="center"><?php echo $total ?></td>
</tr>

谢谢你

我相信你需要了解通知和错误之间的区别,你可以在你发布的第二个代码块底部找到你所需要的一切,你可以做一个echo$total。但是,如果顶部的sql查询不返回任何值,则$total永远不会定义,因此未定义。一个简单的解决方案是在while循环之前为$total设置一个安全默认值。谢谢你的帮助。