что передает поле $row['entry'] ? автоинкрементное значение?
переписанный вариант того что вы пытались сделать. Проверку введенных данных (GET/POST) желательно делать до передачи в какие-либо функции, это упростит понимание того что делает сама функция и отпадет надобность дополнительных проверок в самих функциях.
Код:
<?
function add_line($name){
global $row;
$query = sprintf(
"INSERT INTO `line` (`id_area`, `name`) VALUES ('%d','%s')",
$row['entry'],
mysql_real_escape_string($name)
);
$res = mysql_query($query);
if(!$res){
exit("<b>Query failed:</b> " . mysql_error());
}
return true;
}
if(isset($_POST['add_line'])){
$name = isset($_POST['name']) ? trim($_POST['name']) : null;
if($name){
add_line($name);
}
}
?>
<html><head><title>Сортировка по категориям</title>
</head>
<body>
<center>
<form method="post">
<select name="categories">
<option value=''>-- Выберите категорию --</option>
<?
$result = mysql_query ("SELECT * FROM area")
or die ("<b>Query failed:</b> " . mysql_error());
while ($row = mysql_fetch_array($result)){
$selected = (isset($_POST['categories']) && $row['entry'] == intval($_POST['categories'])) ? " selected" : "";
echo "<option value='".$row['entry']."'".$selected.">".$row['name']."</option>";
}
?>
</select>
</form>
</center>
<form method="POST" name="add_line">
<table>
<tr>
<td>поле</td>
<td><input type="text" name="name"></td>
</tr>
<tr>
<td><input type="submit" name="submit" value="save"></td>
</tr>
</table>
</form>
</body></html>
в приведенном мной примере переменная $row должна быть объявлена до вызова функции add_line($name).