Du måste göra ändringar i koden för list.php baserat på indata den får genom GET-parametern. något som:
if ($_GET['id'] == 'FREE'){
// do something like display FREE items
}
elseif($_GET['id'] == 'GIFT') {
// display GIFT items
}
else {
// perform some default action
}
Detta för att göra det ännu mer databasdrivet (nyttigt när det finns många kategorier):
$sql = "select * from categories where id = '".$_GET['id']."'";
if (mysql_results($sql)){
// do something
}
else {
// show error
}
Observera att detta endast är för demo och i din kod bör du använda PDO/MySQLI och förberedda satser och inte mysql_results-funktionen.
Mot bakgrund av mer information från OP:Ändra detta
$articles = $article->fetch_all();
till
$articles = $article->fetch_data($_GET['id']);
i list.php och se om du får rätt resultat.