Ah... algo que estaba olvidando es que probablemente la consulta no te devuelva ningún registro (porque ninguno cumple la condición del WHERE). A veces nos complicamos mucho y la respuesta puede ser muy sencilla.
Prueba contar los registros:
Código PHP:
$sql_fecha = "SELECT fecha FROM dr_anuncio WHERE DATE_SUB('fecha', INTERVAL {$row['contra']} DAY) AND id='$id'";
$res_fecha = mysql_query ($sql_fecha) or die ("error en $sql_fecha :".mysql_error());
if(mysql_num_rows($res_fecha)>0){
$fecha_fin = mysql_fetch_array($res_fecha);
}else{
die("La consulta no devolvió registros");
}
Saludos