Fehler beim Verschieben

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Fehler beim Verschieben

    Hallo miteinander!
    Nach viel nachforschen bei Dr. G und diversen Foren, muss ich jetzt doch ein eigenes Thema aufmachen.
    Ich schreibe zur zeit an einer "Dynamischen Speisekarte" für einen befreundeten Wirt. Grundlage ist eine Tabelle einer MySQL Datenbank mit den Feldern nr, besch, preis, sel. wobei nr eine Nummerierung darstellt, die manuell festgelegt wird und bei verschieben dementsprechend geändert wird.(1,2,3,...)
    Neue Einträge, Einträge löschen und bearbeiten funktioniert. Nur beim ändern der Sortierung kommt es manchmal, nicht immer(!) zu störungen bei der Sortierung, bei der dann nummer doppelt vergeben oder mehrere 2Lücken2 auftauchen oder alle Einträge die gleiche nr bekommen. Aber eben nur manhcmal. Eine regelmäßigkeit wann der Fehler auftritt, habe ich nicht erkennen können. Könnt ihr mir Helfen??

    PHP-Code:
    <?
    $newnr = $_POST['newnr'];
    $nr = $_POST['nr'];
    echo $nr . " an Position ";
    echo $newnr . " verschieben<br>";
    $alt = $nr;
    $neu = $newnr;
    $server='';
    $user='';
    $dbname = '';
    $pw='';
    $db = @mysql_connect($server, $user, $pw);
    mysql_select_db($dbname, $db);
    if (mysql_errno()) die ("MySQL-Error: " . mysql_error());
    if ($nr > $newnr){  echo "nr > newnr<br>";
    $sql="UPDATE speisekarte SET nr='0' WHERE nr='$nr'";
    $result = mysql_query($sql);
    $sql="SELECT * FROM speisekarte WHERE (nr >= '$newnr' AND nr < '$nr') ORDER BY nr DESC";
    $result = mysql_query($sql);
    while($ar = mysql_fetch_array($result))  {
    $nrr = $ar["nr"];
    $newnrr = $nrr+1;
    echo "Verschiebe: " . $nrr . " > " . $newnrr . "<br>";
    $query = "UPDATE speisekarte SET nr='$newnrr' WHERE nr='$nrr'";
    if (mysql_errno()) die ("MySQL-Error: " . mysql_error());
    mysql_query($query);
    }
    $sql="UPDATE speisekarte SET nr='$neu' WHERE nr=0";
    mysql_query($sql);
    echo "Ändere id in " . $neu . ".";
    }elseif($nr < $newnr){  echo "nr < newnr";
    $sql="UPDATE speisekarte SET nr='0' WHERE nr='$nr'";
    $result = mysql_query($sql);  echo "id[nr] > 0";
    $sql="SELECT * FROM speisekarte WHERE (nr <= '$newnr' AND nr > '$nr') ORDER BY nr ASC";
    $result = mysql_query($sql);
    while($ar = mysql_fetch_array($result))  {
    $nrr = $ar["nr"];
    $newnrr = $nrr-1;
    echo "Verschiebe: " . $nrr . ">" . $newnrr . "<br>";
    $query = "UPDATE speisekarte SET nr='$newnrr' WHERE nr='$nrr'";
    if (mysql_errno()) die ("MySQL-Error: " . mysql_error());
    mysql_query($query);
    }
    $sql="UPDATE speisekarte SET nr='$neu' WHERE nr=0";
    mysql_query($sql);
    echo "Ändere id in " . $neu . ".";
    }else{
    echo "Nix zu verschieben!";
    }
    ?>
    Die vielen echos, auch in den Schleifen, sind nur zur Kontrolle.

    Vielen Dank schonmal!

    MfG
    Harras

  • #2
    benutzst du etwa das sog. "nachrücken", wenn ein element aus der tabelle gelöscht wird?

    z.b.

    1
    2
    3
    4

    lösche 2:

    1

    3
    4

    "nachrücken":
    1
    2 (ehemals 3)
    3 (ehemals 4)

    das ist sehr schlecht, überdenke deinen ansatz, "nachrücken" ist ein äußerst inkonsistenter ansatz (daher die seltsamen fehler).

    Kommentar

    Lädt...
    X