Почему вы используете AND
s в своем запросе ОБНОВЛЕНИЯ?
mysql_query("update piecework set total_price=total_price-pricebalance+$totalprice, quota=quota-shortfall+$shortfall, shortfall=$shortfall, unit_price=$unitprice, pricebalance=$totalprice where piecework_id='$pieceworkid' and publisher=$memberid and (pricebalance-$totalprice)>=0")or die(mysql_error());
Или с лучшей читаемостью:
UPDATE piecework SET total_price = total_price - pricebalance + $totalprice,
quota = quota - shortfall + $shortfall,
shortfall = $shortfall,
unit_price = $unitprice,
pricebalance = $totalprice
...