Ich habe folgendes Problem:
Code: Alles auswählen
Tabelle menulist:
id | name | ordernum
1 | Link 1 | 1
2 | Link 2 | 2
3 | Link 3 | 3
4 | Link 4 | 4
5 | Link 5 | 5
Jetzt möchte ich per submit-Button Link 5 nach oben schieben, d.h. Link 5 besitzt dann ordernum 4 und Link 4 ordernum 5.
Das klappt soweit auch ganz gut, nur wenn ich jetzt, aus welchem Grund auch immer, die beiden Einträge wieder vertauschen will, passiert der Fehler, denn die Einträge werden nicht mehr vertauscht, sondern es geschieht ein Durcheinander in der Tabelle und die Listenpunkte sind an ganz anderen Stellen wie ursprünglich gewollt.

Mein Code für das Verschieben:
Code: Alles auswählen
function sortmenu($id, $direction)
{
$sql = mysql_query("SELECT count(id) as amount FROM universal_menulist");
while($row = mysql_fetch_object($sql))
{
$maxamount = $row->amount;
}
if($direction == 'up')
{
$sql = "SELECT ordernum FROM universal_menulist WHERE id = ".$id;
$sql = mysql_query($sql);
while($row = mysql_fetch_object($sql))
{
$ordernumsort = $row->ordernum;
}
$sql = "SELECT id FROM universal_menulist WHERE ordernum = ".($ordernumsort-1);
$sql = mysql_query($sql);
while($row = mysql_fetch_object($sql)) {
$newid = $row->id;
}
if(($ordernumsort-1) < 0 )
{
echo 'Sortierung nicht möglich, Element ist schon an höchster Stelle.';
}else
{
$upcheck = mysql_query("UPDATE menulist SET ordernum = ordernum -1 WHERE id = ".$id);
$downcheck = mysql_query("UPDATE menulist SET ordernum = ordernum +1 WHERE id = ".$newid);
return "sortiert<br>";
}
}
if($direction == 'down')
{
$sql = "SELECT ordernum FROM universal_menulist WHERE id = ".$id;
$sql = mysql_query($sql);
while($row = mysql_fetch_object($sql))
{
$ordernumsort = $row->ordernum;
}
$sql = "SELECT id FROM universal_menulist WHERE ordernum = ".($ordernumsort+1);
$sql = mysql_query($sql);
while($row = mysql_fetch_object($sql)) {
$newid = $row->id;
}
if(($ordernumsort+1)> ($maxamount-1))
{
echo 'Sortierung nicht möglich, Element ist schon an niedrigster Stelle.';
}else
{
mysql_query("UPDATE menulist SET ordernum = ordernum +1 WHERE id = ".$id);
mysql_query("UPDATE menulist SET ordernum = ordernum -1 WHERE id = ".$newid);
}
}
}



Hoffe jemand hat eine kleine Anregung auf Lager, damit ich dieses Problem lösen kann

Danke im Voraus
Chris
EDIT: Argh, mein Fehler. Habe nicht genau auf das HTML_formular geachtet und den falschen Namen übersehen, somit kam bei zurückstellen der Links keine ID an...
Sorry für meine Unachtsamkeit, ich werde in Zukunft drauf Acht geben!
