1. Wystarczy, że fetch_assoc wywołasz jeden raz, później będziesz już operować jedną zmienną. Bez sensu jest co powtórzenie na nowo robić fetcha.
2. Zamiast for użyj foreach.
Aby wykrywać który z guzików został użyty, można dla każdego takiego guzika zrobić osobny formularz, oczywiście generowany automatycznie w pętli. W tym formularzu znajdzie się button (type="submit") oraz input type="hidden", który w parametrze value będzie trzymał id konkretnego elementu z bazy.
Wygląda to mniej więcej tak:
$elements = $stmt->fetchAll();
$output = '';
foreach ($elements as $element) {
$output .= '<form method="post">';
$output .= '<input type="submit" name="button" value="Kliknij mnie">';
$output .= '<input type="hidden" name="elementId" value="' . $element['id'] . '">';
$output .= '</form>';
}
echo $output;
A żeby sprawdzić id rekordu z bazy, który reprezentował przycisk, wystarczy użyć $_POST['elementId'] (name inputa typu hidden).