Примечание: я на самом деле думаю, что ваша проблема в итерации по массиву результатов, поэтому метка должна быть php или / и HTML, но давайте посмотрим:
Обычно полезно отделять извлекаемые записи от представления, например, так:
$mysqli = new MySQLi($db_host, $db_user, $db_pass, $db_name);
$cart_q = "SELECT card_name FROM products WHERE product_cat = 'HPC' LIMIT 12";
$result = $mysqli->query($cart_q) or die($mysqli->error);
$card_names = array();
while ( $row = $result->fetch_assoc() ){
$card_names[] = $row['card_name'];
}
Выше будет создан массив $card_names => array('card_name1', 'card_name2' ... etc)
Теперь вы можете использовать foreach для перебора этого массива и создания выходного HTML. Из того, что я понял, вы хотите создать таблицу HTML с 4 ячейками на строку и одним именем карточки на ячейку.
echo '<table><tr>';
$i = 1;
foreach ( $card_names as $name ){
echo "<td>$name</td>";
if ( $i % 4 == 0) echo '</tr><tr>';
$i++;
}
($i - 1) % 4 == 0 ? echo '</tr></table>'; : echo '</table>';