Ciao,
il problema è che tu estrai sempre dal db tutte le pagine, per cui quando lanci il ciclo foreach passi sempre anche per la pagina delle news, quindi questa viene sempre stampata.
Così a naso direi che visto che passi il nome della pagina da caricare nella query string dell'url, dovresti recupererla con $_GET['id'] e eseguire una query che estragga solo la pagina richiesta, quindi:
$sql = $db->prepare("SELECT * FROM pagine WHERE id = $_GET['id']");
In questo modo non serve neanche il foreach, e addirittura se nel db salvi anche il nome della pagina, non serve neanche l'if, perché puoi fare qualcosa del tipo:
echo $result['nome_pagina'];
Comunque non ho capito a cosa servono i parametri $sql e $q della funzione, visto che il primo viene subito sovrascritto e il secondo mi pare non venga proprio usato.