Ваш цикл while перезаписывает $row
каждый раз.Разве вы не хотите этого делать?
$gosma = array();
while ($row=mysql_fetch_array($res)) {
$gosma[] = $row["idcategorias"];
}
Перед вставкой в запрос вы должны всегда избегать:
$sql = "UPDATE categorias SET ordem='".mysql_real_escape_string($value)."' WHERE idcategorias='".mysql_real_escape_string($gosma)."'";
Вы должны поместить mysql_error в функцию die (и нене используйте точку в имени)
$res = mysql_query($sql) or die ("Erro ao alterar: ".mysql_error());
Что вы пытаетесь сделать в этом цикле?
foreach ($_POST['ordem'] as $key => $value) {
$sql = "UPDATE categorias SET ordem='$value' WHERE idcategorias='$gosma'";
$res = mysql_query($sql) or die ("Erro ao alterar") . mysql.error();
}
Разве вы не хотите что-то подобное?
foreach ($_POST['ordem'] as $key => $value) {
$sql = "UPDATE categorias SET ordem='".mysql_real_escape_string($value)."' WHERE idcategorias='".mysql_real_escape_string($key)."'";
$res = mysql_query($sql) or die ("Erro ao alterar: ".mysql_error());
}
РЕДАКТИРОВАТЬ :
<form action="altera_ordem_cat.php" method="post">
<table>
<?php
include "conecta.php";
include "verifica.php";
$sql = "SELECT idcategorias, ordem FROM categorias ORDER BY ordem";
$res = mysql_query($sql) or die (mysql_error());
while ($linha = mysql_fetch_array($res)) {
?>
<tr>
<td><input name='ordem[<?php echo $linha[0]; ?>]' type='text' id='textfield' size='2' maxlength='2' value='<?php echo $linha[1]; ?>'/></td>
<td></td>
</tr>
<?php
}
?>
</table>
<!-- ........ -->
И впоследствии:
<?php
include "conecta.php";
include "verifica.php";
foreach ($_POST['ordem'] as $key => $value) {
$sql = "UPDATE categorias SET ordem='".mysql_real_escape_string($value)."' ".
"WHERE idcategorias='".mysql_real_escape_string($key)."'";
$res = mysql_query($sql) or die ("Erro ao alterar: ".mysql_error());
}