2015-11-23 57 views
0

當我點擊我的web應用程序中的一個項目,它包含的值,我沒有得到任何錯誤,但我創建了另一個項目與MySQL中的空字段,我點擊它在我的web應用程序(PHP應用程序),所以我得到這個錯誤:錯誤當空的MySQL字段,甚至條件

Undefined variable: total in C:\wamp\www\architect\projDetails.php on line 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)); 

在這裏,HTML和PHP代碼線附近80:

<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爲空時,我得到錯誤,當它不是空的時候,我沒有得到任何錯誤,所以這裏有什麼問題?

+0

我相信你需要學習一門**通知**之間和**錯誤differnce **,你可以找到你所需要的[這裏](http://stackoverflow.com/questions/4624474/php-difference-between-notice-and-warning) – Naruto

+0

在你發佈的第二個代碼塊的底部'echo $ total'。但是,如果頂部的sql查詢不返回_any_值,那麼'$ total'是_never_定義的,因此未定義。一個簡單的解決方案是在'while()'循環之前設置'$ total'的安全缺省值。 – arkascha

+0

[PHP:「Notice:Undefined variable」和「Notice:Undefined index」]的可能重複(http://stackoverflow.com/questions/4261133/php-notice-undefined-variable-and-notice-undefined-index) – Naruto

回答

0

您的變量$total當前只在while塊中存在。您在陳述</tr><?php } ?><tr>退出此塊。這意味着您的變量不再分配在下面的代碼行<td align="center"><?php echo $total ?></td>中。爲了使用,而塊下面這個總變量中添加聲明和而塊以上的變量初始化,e.g:

<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']將包含一個String類型的值。您的比較是針對整數值0。 PHP不應該拋出一個錯誤或警告,但它可能會在這個if語句中產生不需要的結果。 (更多信息:http://php.net/manual/de/language.types.type-juggling.php

+0

就是這樣。感謝幫助。 – am90

0

嘗試下面的內容。

echo isset($total)? $total: 0; 
0

這裏,如果我們從DB獲取任何數據,那麼只有它會進入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> 

謝謝

相關問題