or die(mysql_error()); - так можно писать в каком-то отдельном примере, когда нужно выяснить что-то. На реальных страницах такого быть не должно - нельзя вываливать ошибки запросов к базе на клиенте, это богатая пища для размышлений тем, кому эти ошибки как манна небесная. Если таким образом контролировать запросы, то нужно выводить ошибки по условию - включен режим отладки, значит ошибка, иначе сообщение "мол извиняйте, но...".
Плевать кусками тоже нет ни смысла не выгоды:
echo '<table class="table"><tr>
<th>Наименование</th>
<th>Рекомендуемая цена</th>
<th>Фактическая цена цена</th>
</tr>
</thead>';
Самое интересное дальше - $id_s = $smeta["id_pc_price"];, объявление этих промежуточных переменных для чего, облегчить жизнь интерпретатору? Ну так тогда зачем вы вгоняете эти переменные в строку, заставляя интерпретатор парсить ее, когда в этом нет никакой надобности? Не нужны эти "посредники" в коде если они не используются кроме этого цикла нигде более. А вогнав переменные в строку, даже не контролируете что получится:
echo "<td>$min_price-$max_price</td>"; //что в итоге получится?
И формы у вас нет, у вас бардак, потому, что открывающий тег формы выводится в цикле, а закрывающий вне его.
В JS тоже полный швах, но сперва наведите порядок в серверной части.