Hi!
eigenartiges Problem: ein Codeschnipsel, der in keiner Schleife liegt, sondern für sich allein steht, wird offenbar doppel durchlaufen.
Nur dieser? Und der Code davor und danach nicht? Woran genau merkst du, dass er doppelt ausgeführt wird? Was hast du unternommen um das "offenbar" zu überprüfen?
Abgesehen davon,
$categories_up_sort_order_query = mysql_query("SELECT categories_sort_order FROM categories WHERE categories_id = '$categories_up'");
while($row = mysql_fetch_object($categories_up_sort_order_query))
{
$categories_up_sort_order = $row->categories_sort_order;
}
was ist denn das für ein Konstrukt? Du führst eine Schleife aus, in der du stets den vorhergehenden Wert ungenutzt überschreibst? Was willst du damit wirklich anstellen? Soll nur der letzte Datensatz aus deiner noch dazu unsortierten Menge verwendet werden? Dann kann man die Query effektiver umschreiben. Oder existiert nur ein einziger Datensatz, dann brauchst du keine Schleife zum Abfragen.
// set category with sort order +1 to sort order -1
$categories_next_sort_order = $categories_up_sort_order + 1;
echo $categories_up_sort_order . $categories_next_sort_order;
$update_categories_next = "UPDATE categories SET categories_sort_order = '$categories_up_sort_order' WHERE categories_sort_order = '$categories_next_sort_order' && categories_parent = '$categories_parent'";
$update = mysql_query($update_categories_next);
Wenn die in die Query eingefügten Variablen garantiert Zahlen sind, warum notierst du sie in Anführungszeichen? Wenn nicht, warum verwendest du kein mysql_real_escape_string()?
Warum prüfst du nicht, ob deine Querys erfolgreich abgearbeitet wurden? mysql_query() gibt im Fehlerfall ein anderes Ergebnis zurück.
// nur zum testen, ob das Script doppelt durchlaufen wird, oder ob die db-operationen fehlerhaft sind
$fp = fopen('log.txt', 'a');
fputs($fp, 'X');
fclose($fp);
Schreib doch da mal den Inhalt des $_SERVER-Arrays rein:
fputs($fp, print_r($_SERVER, 1));
Dann kannst du dir ansehen, welche Requests (nebst Referrer und so weiter) dieses Script erreicht haben.
Lo!