Если вы принимаете имя удаляемого файла из внешнего мира - вопрос валидации должен стоять на первом месте. Как минимум это так:
if (!empty($_POST['name'])) {
$name = basename($_POST['name']); //иначе беды огребете.
$file_path = $_SERVER['DOCUMENT_ROOT'].'/project/html/'.$name;
if (is_file($file_path)) {
@unlink($file_path);
}
}
По поводу самого алгоритма - все в топку, у вас по 1 форме на каждую запись с одинаковыми айдишниками, браузер с ума сходит, делайте rest, храните в базе физическое имя файла, из внешнего мира получайте только id файла, все остальное должно быть blackbox.
Допустим:
<? foreach ($nnn as $row) {
$v=$row['id'];
$n=$row['filename'];
?>
<div class="admph">
<?php
echo "$row[filename]";
?>
<button type="button" onclick="deleteRecord(<?=$v?>); return false;">Удалить</button>
</div>
<?php
}
<script>
function deleteRecord(id) {
console.log(id);
//Тут уже ajax post на action удаления, параметр del со значением id
}
</script>