Menülistenpunkte hin & her schieben PHP & MySQL

Fragen zu allen Themen rund ums Programmieren außerhalb von phpBB können hier gestellt werden - auch zu anderen Programmiersprachen oder Software wie Webservern und Editoren.
Antworten
ChrizBMX
Mitglied
Beiträge: 1
Registriert: 05.08.2012 19:40

Menülistenpunkte hin & her schieben PHP & MySQL

Beitrag von ChrizBMX »

Hallo liebe Community!

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
Das Menü wird nach 'ordernum' sortiert und angezeigt.

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. :x

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);
        }
    }
} 
Der Fehler liegt in meinen Augen definitiv an der SQL-Query, ich habe die Funktion auch noch auf Papier gezeichnet um genau zu verstehen was da passiert, aber mir fällt leider keine andere Möglichkeit ein... :cry: Da bleibt mir gleich nur noch mein Frustessen :cookie: :D

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! :geek:
Antworten

Zurück zu „Coding & Technik“