$bookid = $_POST['bookid'];
$name = trim(strip_tags($_POST['name']));
$author = trim(strip_tags($_POST['author']));
$categoryid = trim(strip_tags($_POST['category']));
$year = trim(strip_tags($_POST['year']));
$pages = trim(strip_tags($_POST['pages']));
$lang = trim(strip_tags($_POST['lang']));
$desc = trim(strip_tags($_POST['desc']));
if ($pages == '') {
$pages = 'Неизвестно';
};
$resadd = mysql_query("UPDATE books SET name='$name', author='$author', year=$year, pages='$pages', lang='$lang', description='$desc', categoryid=$categoryid WHERE id=$bookid") or die(mysql_error());
$_POST
дрянь всякая лежит и мешает своим присутствием."UPDATE books SET name='$name', author='$author', year=$year, pages='$pages', lang='$lang', description='$desc', categoryid=$categoryid WHERE id=$bookid"
в отдельную переменную засунуть и посмотреть что получилось и от этого уже мыслить. Может в готовой строке запроса проблема будет очевидней.