Eintrag Sortieren und alten ersetzen

xony

Erfahrenes Mitglied
Hallo Leute,

ich hab ein wenig kniffliges Problem.
Und zwar habe ich ein Mini-CMS gebaut mit dem man Boxen (links und Rechts) per Adminmenü anlegen kann.
NAch Links und rechts sortieren ist kein Problem.
Wie bekomm ich es aber hin das ich "SINNVOLL" nach oben und unten sortieren kann.
Ich habe es bereits mit einer neuen Spalte "sort" versucht.
Beim anlegen einer neuen Tabelle kann man dann eingeben wie man es sortiert haben möchte.
Das ist aber nicht die Wahre Lösung, da die Einträge nicht alleine aktualisiert werden wenn ich z.b. BOX 1 nach BOX 2 haben möchte muss ich dazu die restlichen Boxen um eine Zahl nach oben von Hand erweitern, weil es ja BOX 3 schon gibt.

Gibt es keinen weg um das z.b. per klick auf nen Pfeil zu Lösen ?.

DAnke für eure Denanstöße.
 
Ich verstehe das Problem jetzt nicht so ganz? Was stört dich denn an der Lösung mit dem zusätzlichen Tabellenfeld `sort`?
Eine andere Möglichkeit zur benutzerdefinierten Sortierung ist mir eigentlich nicht bekannt. Du könntest allerdings, statt sort immer nur um Eins zu erhöhen, mit Zehner- / Hunderter- / Tausenderschritten ( :rolleyes: ) arbeiten. So hast du problemlos die Möglichkeit, eine Box woanders einzuordnen, ohne mehrere Datensätze ändern zu müssen.
Bsp.:
Box 1 (sort = 10)
Box 2 (sort = 20)
Box 3 (sort = 30)
Wenn du nun Box 3 zwischen Box 1 und 2 schieben möchtest, so gibst du Box 3 einfach einen Wert zwischen 10 und 20.
Aber besonders elegant ist diese Methode glaube ich eher nicht ;)
 
Ich habe mir gedacht ich schiebe die Box immer eins hoch oder eins runter, dabei sollte der Wert der überschrieben wird einfach von dem anderen ersetzt werden.

Also:

Ich schiebe BOX 1 hoch an die zweitePosition(BOX 2), nun sollte der Wert den BOX2 hat einfach mit dem der BOX1 ersetzt werden.
Ist sowas nicht möglich in PHP.

Gruss
 
möglich ist in PHP eigentlich fast alles ausser Kaffeekochen, auf
deine Programmlogik kommt es an und auf dein DB Design.

Mit einem Pfeil auf den man klicken kann erreicht man nur das
man auf einen Pfeil geklickt hast.
 
Code:
<?

$id_3 = $_GET["status"];


$boxen_update = "SELECT * from $boxen WHERE id = '$id_3'";
$result = mysql_db_query ($dbname, $boxen_update, $dbverbindung);
$ausgabe = mysql_fetch_array ($result);

$eins_dazu = $ausgabe['sort']+1;

if ($status == "hoch=".$ausgabe['id']) {

$dbanfrage = "UPDATE $boxen SET id='$id_3', boxen_name='$boxen_name', boxen_inhalt='$boxen_inhalt', boxen_position='$boxen_position', boxen_sort='$eins_dazu' WHERE id = '$id_3' ";


if (mysql_db_query ($dbname, $dbanfrage, $dbverbindung)) {
print ("Datenbankeintrag erfolgreich.");
} else {
print ("Es traten Probleme auf.");
}

header('Location: boxen_neu.php');


}

?>

So habe ich es versucht, aber es will nicht.
Ich möchte dabei erreichen das die Spalte boxen_sort dessen ID=34 ist, mit klick auf einen Button(LINK:boxen_neu.php?status=34) um eins hochgezählt wird.

Hat vielleicht jemand einen Tipp was ich wiedermal falsch mache....?

Gruss
 
Original geschrieben von xony
$dbanfrage = "UPDATE $boxen SET id='$id_3', ...
Das kann ja nur ins Auge gehen, eine ID wird bei der Erstellung eines Datensatzes vergeben und hat so zu bleiben.
Was machst Du denn wenn sich irgend etwas anderes auf die ID bezieht und dann steht ein anderer Datensatz dahinter?

if (mysql_db_query ($dbname, $dbanfrage, $dbverbindung)) {
print ("Datenbankeintrag erfolgreich.");
} else {
print ("Es traten Probleme auf.");
}

header('Location: boxen_neu.php');
Das kann nicht funktionieren weil man vor einem header nix ausgeben darf.
Ich möchte dabei erreichen das die Spalte boxen_sort dessen ID=34 ist, mit klick auf einen Button(LINK:boxen_neu.php?status=34) um eins hochgezählt wird.
Deine Links müssen etwa so ausschauen:
PHP:
<a href="boxen_neu.php?id=34&sort=34&count=-1">down</a>
<a href="boxen_neu.php?id=34&sort=34&count=1">up</a>
und in der boxen_neu.php setzt Du dann diese beiden Queries ab:
PHP:
$newsort = $_GET['sort']+$_GET['count'];
$sql1 = "UPDATE table SET sort=".$_GET['sort']." WHERE sort=".$newsort;
$sql2 = "UPDATE table SET sort=".$newsort." WHERE id=".$_GET['sort'];
 
Danke für Deinen Beitrag.
habe es mal versucht, leider ohne Erfolg.
Vielleicht kannst es Dir nochmal anschauen.
Das ist der Code:
PHP:
        $newsort = $_GET['sort']+$_GET['count']; 

   if ($sort == "871" && $count == "1") {

$dbanfrage == ( $sql1 = "UPDATE $table_boxen SET sort=".$_GET['sort']." WHERE sort=".$newsort &&

$sql2 = "UPDATE $table_boxen SET sort=".$newsort." WHERE id=".$_GET['sort']);


if (mysql_db_query ($dbname, $dbanfrage,  $dbverbindung)) {
print ("Datenbankeintrag erfolgreich.");
} else {
print ("Es traten Probleme auf.");
}


}

und so sieht der Link aus:

boxen_neu.php?bearbeiten=871&sort=871&count=1


Sobald ich Deine DB Abfrage ($dbanfrage ) einfüge klappts nicht.
Bei meiner Testabfrage klappts allerdings.
Ich überseh sicher irgendwas....Ich wäre Dir dankbar wenn Du nochmal schauen könntest.
DAnke und Gruss
 
Zuletzt bearbeitet:
Blicke bei Deinem Code nicht ganz durch, wofür brauchst Du das?
PHP:
if ($sort == "871" && $count == "1")

== ist ein Vergleich, was soll das geben?
PHP:
$dbanfrage == ( $sql1 = "UPDATE ...

Soll das der Versuch sein, 2 Updates in einer Query zu schicken?
PHP:
... $newsort && $sql2 = "UPDATE...
Das geht nicht!

Die Links machst Du wie oben beschrieben.
Und dann:
PHP:
$newsort = $_GET['sort']+$_GET['count']; // Da $count positiv oder negativ sein kann brauchts kein if mehr
$sql1 = "UPDATE table SET sort=".$_GET['sort']." WHERE sort=".$newsort;
mysql_query($sql1 , $dbverbindung);
$sql2 = "UPDATE table SET sort=".$newsort." WHERE id=".$_GET['sort'];
mysql_query($sql2 , $dbverbindung);

Das setzt natürlich eine lückenlos durchnummerierte sort-Spalte voraus, die 0 und die höchst sort-Nummer fängst Du am Besten schon bei der Generierung der Links ab.
 
Zurück