Php 显示已批准的字符串

Php 显示已批准的字符串,php,mysql,Php,Mysql,我想显示一个广告,如果它被批准=1。我使用的是这个代码 $query = $db->query("SELECT * FROM ads WHERE approved = '1'"); $ad = $db->fetch_array($query); if (advert_available()) { for($id=1; $id < 4+1; ++$id) { if ($ad['spot_id'] == $id) {

我想显示一个广告,如果它被批准=1。我使用的是这个代码

$query = $db->query("SELECT * FROM ads WHERE approved = '1'");
$ad = $db->fetch_array($query);

if (advert_available())
{
    for($id=1; $id < 4+1; ++$id)
    {
        if ($ad['spot_id'] == $id)
        {
            // Approved ad
            $ads = '<td width="25%" valgn="middle" align="center"><a href="'.htmlspecialchars_uni($ad['link']).'" target=_blank><img src="'.htmlspecialchars_uni($ad['image']).'" alt="" title="" width="285px" height="114px" class="advert_image"></a></td>';
        }
        else
        {
            // If ad is not approved, show default <td>
            $ads = '<td width="25%" valgn="middle" align="center"><a href="misc.php?action=buy_ad&amp;spot_id='.$id.'"><img src="images/xf/ads1.gif" alt="Ad Spot" title="Click here to reserve this ad spot."></a></td>';
        }
        $ads_spot_bit .= $ads;
    }

    $ads_spot = '
        <table border="0" class="tborder">
            <tr>
                '.$ads_spot_bit.'
            </tr>
        </table>
    ';
}
$query=$db->query(“从已批准的广告中选择*='1'”);
$ad=$db->fetch\u数组($query);
如果(广告可用())
{
对于($id=1;$id<4+1;++$id)
{
如果($ad['spot_id']==$id)
{
//核准广告
$ads='';
}
其他的
{
//如果广告未被批准,则显示默认设置
$ads='';
}
$ads\u spot\u bit.=$ads;
}
$ads\u spot
“.$ads\u spot\u bit”
';
}
但问题是,它只显示一个批准的广告,但有2个批准的广告!我错过了什么


顺便说一下,我正在使用for循环显示4个广告点。

您需要在循环中获取结果。试试这样的

while( $ad = $db->fetch_array($query) ){
  //do your processing
}

您已在以下条件下输入

 if ($ad['spot_id'] == $id)

可能有2个活动广告,但来自数据库的spot\u id可能与for循环中的$id列不匹配。

您需要反复调用
$db->fetch\u array()
(或等效项),每次处理一个广告,直到没有更多记录/您拥有了所需的一切。您从db呼叫,其中approved为1。那么,为什么还要检查
$ad['spot\u id']=$id
?实际上,我不想对每个广告点使用新的sql查询进行检查。这将导致额外的服务器负载。还有其他选择吗?@aacanakin:因为我在使用for循环,如果spot_id==$id,那么它应该显示已批准的广告。否则它应该显示默认的Thankyu AD7six,我不知道这一点。但在这种情况下,我可能无法显示X个数量的广告点,我已经在后端设置了这个选项,顺便问一下,管理员希望在标题上显示多少广告点。这就是为什么我要坚持循环,你说得对,萨弗雷斯。不幸的是,我不得不在for循环中使用sql查询。虽然它提出了4个额外的问题,但我认为这是唯一的解决办法(