Wie der Betreff schon sagt geht es um das Verschieben von Datenbankwerten um eine Position rauf bzw runter. Die Tabelle is mit einer eindeutigen id (auto increment) und einem Feld pos für die position ausgestattet.
Habe mich durch die Suche gekämpft und auch ein paar Threads dazu gefunden und auch mit den gefundenen Schnipseln hin und herprobiert aber leider immernoch keine 100% Lösung gefunden.
Verschieben an sich geht meistens. Nur ab und zu kommt es vor dass er einen Eintrag statt um 1 position gleich um 2 verschiebt.
Habe die ECHOS verfolgt, die waren aber alle 100% korrekt.
Was hab ich da verbockt???
Habe mich durch die Suche gekämpft und auch ein paar Threads dazu gefunden und auch mit den gefundenen Schnipseln hin und herprobiert aber leider immernoch keine 100% Lösung gefunden.
PHP-Code:
elseif($_GET['action'] == "moveup")
{
// Position des nach oben zu verschiebenden Eintrages
$sql_query = $db->query("SELECT pos FROM ".$db_pre."_offer
WHERE id = '".$_GET[id]."'");
$pos_alt = mysql_fetch_object($sql_query);
$pos_alt = $pos_alt->pos;
// ID des Eintrages dessen Position kleiner ist als die des nach oben zu verschiebenden
$sql_up = $db->query("SELECT id FROM ".$db_pre."_offer WHERE pos < '$pos_alt'
ORDER BY pos ASC LIMIT 1");
$row_up = mysql_fetch_object($sql_up);
$id_up = $row_up->id;
// Position des Eintrages mit der kleineren Position
$sql_query = $db->query("SELECT pos FROM ".$db_pre."_offer
WHERE id = '".$id_up."'");
$pos_neu = mysql_fetch_object($sql_query);
$pos_neu = $pos_neu->pos;
// verschiebe den nach oben zu verschiebenden Eintrag auf seine neue Position
$db->query("UPDATE ".$db_pre."_offer SET pos = '$pos_neu'
WHERE id = '".$_GET[id]."'");
// verschiebe den anderen Eintrag auf die ehemalige Position des nach oben zu verschiebenden
$db->query("UPDATE ".$db_pre."_offer SET pos = '$pos_alt'
WHERE id = '".$id_up."'");
// Zeig dem dummen Deppen vorm PC an was ich gemacht habe :-P
echo "ID: ".$id_up." -> ".$pos_alt."<br>";
echo "ID: ".$_GET[id]." -> ".$pos_neu."<br>";
}
elseif($_GET['action'] == "movedown")
{
// Position des nach unten zu verschiebenden Eintrages
$sql_query = $db->query("SELECT pos FROM ".$db_pre."_offer
WHERE id = '".$_GET[id]."'");
$pos_alt = mysql_fetch_object($sql_query);
$pos_alt = $pos_alt->pos;
// ID des Eintrages dessen Position größer ist als die des nach unten zu verschiebenden
$sql_down = $db->query("SELECT id FROM ".$db_pre."_offer
WHERE pos > '$pos_alt' ORDER BY pos ASC LIMIT 1")
$row_down = mysql_fetch_object($sql_down);
$id_down = $row_down->id;
// Position des Eintrages mit der größeren Position
$sql_query = $db->query("SELECT pos FROM ".$db_pre."_offer
WHERE id = '".$id_down."'");
$pos_neu = mysql_fetch_object($sql_query);
$pos_neu = $pos_neu->pos;
// verschieben den nach unten zu verschiebenden Eintrag auf seine neue Position
$db->query("UPDATE ".$db_pre."_offer SET pos = '$pos_neu'
WHERE id = '".$_GET[id]."'");
// verschiebe den anderen Eintrag auf die ehemalige Position des nach unten zu verschiebenden
$db->query("UPDATE ".$db_pre."_offer SET pos = '$pos_alt'
WHERE id = '".$id_down."'");
echo "ID: ".$id_down." -> ".$pos_alt."<br>";
echo "ID: ".$_GET[id]." -> ".$pos_neu."<br>";
}
Habe die ECHOS verfolgt, die waren aber alle 100% korrekt.
Was hab ich da verbockt???
Kommentar