Возможно, есть более элегантный способ ведения дел, но это было бы моим решением. Я обернул ваши флажки и радио в теги <label></label>
, чтобы текст можно было нажимать (это также хорошая рекомендация по доступности) РАДИО генерируются с уникальным идентификатором для каждого продукта.
<?php
echo '<label><input type="checkbox" name="product_' . $row['ProdID'] . '" id="product_' . $row['ProdID'] . '" onclick="javascript:showhide_div(' . $row['ProdID'] . ')" /> ' . $row['ProductName'] . '</label>';
echo <<<EOT
<div id="div{$row['ProdID']}" style="display:none;">
<label><input type="radio" name="productquality_{$row['ProdID']}" value="1" /> Poor</label>
<label><input type="radio" name="productquality_{$row['ProdID']}" value="2" /> Fair</label>
<label><input type="radio" name="productquality_{$row['ProdID']}" value="3" /> Good</label>
<label><input type="radio" name="productquality_{$row['ProdID']}" value="4" /> Excellent</label>
</div>
EOT;
А на бэкэнде все рейтинговые поля анализируются и вставляются в таблицу.
<?php
foreach ( $_REQUEST as $k=>$v){ // Step through each _REQUEST (_POST or _GET) variable
if ( strpos( $k, 'productquality' ) !== false ){ // Only parse productquality_X variables
$parts = explode( '_', $k ); // Split at the underscore
$id = $parts[1]; // ID is the part after the underscore
// Do something, like insert into MySQL. In reality best to escape the values, to make sure to prevent injection.
mysql_query( ' INSERT INTO `quality` ( ProdID, Rating ) VALUES ( ' . $id . ', ' . $v . '); ');
}
}