Setta attivo a 0 perche' :

$qs = "update banners set attivo=0 where id='".$curr["id"]."' limit 1 " ;

Questa query viene eseguita quando entri nell'if

if( $curr["scadenza"]> $now )

quindi mettendo un po' di debug andiamo a controllare effettivamente che valori vengono controllati

Codice PHP:

function bannerChecker($opts)
{
    
$q "select * from  banners where attivo=1  order by scadenza desc" ;
    
// Carichiamo tutti i banner a partire da quelli con data di scadenza piu' alta
    
$ris mysql_query($q) ;

    if( !
$ris )
        return 
false ;
    
$now date(  "Y-m-d H:i:s" time() ) ;
    while( 
$curr mysql_fetch_array($ris) )
    {
        
// LE DATE in mysql se sono salvate di tipo datetime saranno in fomrato std unix YYYY-mm-dd HH:ii:ss e potrai fare controlli lessicografici
       
echo "Controllo : "$curr["codice"]." data scadenza : ".$curr["scadenza"]." data di controllo ".$now
        
// Banner scaduto
        
if(  $curr["scadenza"]> $now )
        {
            echo 
"   => [SCADUTO]
;
            
// update PER FAR SCADERE IL BANNER
            
$qs "update banners set attivo=0 where id='".$curr["id"]."' limit 1 " ;
            
$ris mysql_query($qs);
            
        }
        else
            echo 
"   => [OK]
;
    }
    return 
true ;

e controlla cosa stampa.