-1

エコーを含む if ステートメントを含むページがあり、条件が満たされているにもかかわらず、エコーが画面に出力されません。$invoicedetails のデバッグのスケジュールtrue の場合

ここに私の見解からの関連情報があります

<?php

    if($invoicedetails['Invoice']['scheduled']==1)
    {
        $status = 'Scheduled';  
        $fcol = 'Black';
        $bgcol = '#EBD8E8';
        $pay = NULL;
        $dispute = NULL;
    }
    else if($invoicedetails['Invoice']['paid']==1)
    {
        $status = 'Paid';
        $fcol = 'Black';
        $bgcol = '#B9FAEA';
        $pay = NULL;
        $dispute = NULL;
    }
    else if($invoicedetails['Invoice']['sender_id']==$accountid)
    {
        $status = 'Sent';
        $fcol = 'Black';
        $bgcol = '#F8FAC0';
        $pay = NULL;
        $dispute = NULL;
    }
    else if($invoicedetails['Invoice']['receiver_id']==$accountid)
    {
        $status = 'Received';
        $fcol = 'Black';
        $bgcol = '#FAB9B9';


        $pay = $this->Html->link('Pay', array('controller' => 'Invoices','action'=>'pay_admin',$invoicedetails['Invoice']['id'] )) ;
        $dispute = $this->Html->link('Dispute', array('controller' => 'Disputes','action'=>'add_admin',$invoicedetails['Invoice']['id'] ));

    }



?>  


    <tr>
            <th>Actions: </th>
            <td>
            <?php 
            if($invoicedetails['Invoice']['scheduled']=='true'){ 
                echo $pay; 
            }
            ?> 
            <?php echo  $dispute; ?></td>
            </tr>   
4

1 に答える 1

0

まず第一に、ビューにロジックが多すぎます。そのようなものはコントローラーに入ります。何も表示されないのは、表示しないように指示したためです。

まず、次のことを行います。

if($invoicedetails['Invoice']['scheduled']==1) {
    // (...)
    $pay = NULL;
    $dispute = NULL;
}

そして、これらの NULL 値をエコーするように指示します。

if($invoicedetails['Invoice']['scheduled']=='true') { 
    echo $pay; 
}
echo  $dispute;

そうです、それはこれらのヌル値をエコーし​​ています。何を期待していましたか?

さらに、最初のチェックでは、整数 1 と照合しています。2 番目のチェックでは、文字列 (ブール値ではない) true と照合しています。どちらですか?0/1 フィールドの場合、 の周りの引用符を削除するとtrue、次のようになります。

if($invoicedetails['Invoice']['scheduled'] == true) { 

または(さらに短く)真のビット全体を削除するだけです:

if($invoicedetails['Invoice']['scheduled']) {
于 2012-10-28T10:44:17.143 に答える