变量存在,但if语句否认其存在


Variable exists but the if statement denies its existence

我在votes_allvotes.tpl.php.中有语句if(isset($votes))

如果我在该语句之前检查同一行上的值,它会告诉我该值是2,但由于某些原因,If语句拒绝承认这一点。

如果($voices>0)也尝试过,但不起作用。我在两个页面上使用了这个,在另一个页面上它工作得很好,尽管这个页面上没有任何内容应该与这个有任何冲突(删除了页面上的所有内容,但它仍然不起作用。

使用Joomla 1.5.21和Virtuelmart 1.1.6

这是代码:

<div class="rating" style="margin: 0px 0px 15px -9px">  
<?php
    $product_flypage = $_SERVER['REQUEST_URI'];
    echo ps_reviews::allvotes( $product_flypage );
?>

ps_reviews::allvots:

    function allvotes( $product_id ) {
    if (strstr($product_id, '&')) {
        $arr = explode('&amp;', $product_id);
        $pro_arr = explode('=', $arr[2]);
        $cat_arr = explode('=', $arr[3]);
        $product_id = $pro_arr[1];
        $category_id = $cat_arr[1];
    }
    global $db;
    $tpl = new $GLOBALS['VM_THEMECLASS']();
    $dbc = new ps_DB;
    $q = "SELECT votes, rating FROM #__{vm}_product_votes "
        . "WHERE product_id='$product_id' ";
    $dbc->query( $q );
    $votes = $dbc->f("votes");
    $rating = $dbc->f("rating");
    if( $votes != 0)
        $tpl->set('votes', $votes );
    $tpl->set('rating', $rating );
    $tpl->set('product_id', $product_id );
    $tpl->set('category_id', $category_id );
    return $tpl->fetch( 'common/votes_allvotes.tpl.php' );
}

votes_allvotes.tpl.php(实际问题所在):

    if (isset($votes)) { ?>
<img src="<?php echo VM_THEMEURL ?>images/stars/<?php echo $rating ?>.gif" align="middle" border="0" alt="<?php echo $rating ?> stars" />&nbsp;
<?php echo $VM_LANG->_('PHPSHOP_TOTAL_VOTES').": ". $votes;
}
else { 
  if (!empty($my->id)) {
    if( $_GET['flypage']){
        echo "<li class='reviews'><a href='javascript:void(0)' style='color:#000;'><b>Wees de eerste om een recensie te schrijven!</b></a></li>";
    }else{
    echo "<a href='/index.php?page=shop.product_details&flypage=flypage.tpl&product_id=". $product_id ."&category_id=". $category_id ."&option=com_virtuemart&Itemid=1&lang=nl&review=yes'><b>Wees de eerste om een recensie te schrijven!</b></a>";
    }
  }else {
    echo $VM_LANG->_('PHPSHOP_REVIEW_LOGIN'); // Login to write a review!
  }
}

isset可能不会返回您所期望的结果。

$votes = 0;
if(isset($votes)){
    echo 'Ooer missus ...';
}

我不确定,但也许你想。。。

if((int)$votes > 0){
    echo 'well you got at least one vote ...';
}

无论如何,如果一个条件没有像你预期的那样发挥作用,那么

var_dump()

将该变量保存到页面或日志文件中并进行检查。

更好的是,在编写条件测试之前先检查一下。