ilch Forum » Allgemein » HTML, PHP, SQL,... » Denkfehler bei Positionsfunktion

Geschlossen
  1. #1
    User Pic
    holz Hall Of Fame
    Registriert seit
    17.11.2005
    Beiträge
    4.606
    Beitragswertungen
    117 Beitragspunkte
    Hi ich hab ne kleine Funktion geschrieben mit der ich die Positionierung von datenbank einträgen ändere ...aber irgendwie hab ich total den denkfehler.

     #Aktuelle Position Holen -> positionold
        $abf = 'SELECT position FROM `prefix_tagcloud` WHERE id = "'.$pos.'"';
        $erg = db_query($abf);
        $positionold = db_result($erg);
        echo $positionold;
        #Id Holen
        $abf = 'SELECT id FROM `prefix_tagcloud` WHERE id = "'.$pos.'"';
        $erg = db_query($abf);
        $id = db_result($erg);
    
        #Spalten Zählen
        $count = (int)db_result(db_query("SELECT Count(*) FROM prefix_tagcloud"),0,0);
        #Hoch oder Runter zählen
        if($aktion == 1){
            $positionnew = $positionold-1;
            if($positionnew == "-1"){
                $error = 1;
            }
        } elseif($aktion == 2) {
            $positionnew = $positionold+1;
    
            if($positionnew >= $count+1){
                $error = 1;
            }
    
        } elseif ($aktion == 1 && $positionold == 0){
            $error = 1;
            echo '<script type="text/javascript">alert("error");</script>';
        }
        if ($error == 0) {
            echo "Neue Position: ".$positionnew;
            #Tag von neuer Position holen
            $abf = 'SELECT id FROM `prefix_tagcloud` WHERE position = "'.$positionnew.'"';
            $erg = db_query($abf);
            $temp = db_result($erg);		
            #Update1 -> Nach oben verschieben
            db_query('UPDATE `prefix_tagcloud` SET position = "'.$positionnew.'" WHERE id = "'.$id.'"');
            #Update1 -> Nach unten verschieben
            db_query('UPDATE `prefix_tagcloud` SET position = "'.$positionold.'" WHERE id = "'.$temp.'"');	
        }



    jetzt habich noch das problem dass wenn eine position zwischen drin fehlt weil der tag gelöscht wurde dann gibts einen error beim verschieben.

    Warning: mysql_result(): Unable to jump to row 0 on MySQL result index 38 in K:\Programme\xampp\htdocs\ilch\include\includes\func\db\mysql.php on line 68

    wie könnte ich das umgehen? muss ich beim löschen eines tags alle nachfolegenden positionen korrigieren oder habt ihr eine elegantere idee?


    Zuletzt modifiziert von holz am 27.09.2013 - 11:57:58
    0 Mitglieder finden den Beitrag gut.
  2. #2
    User Pic
    Lord|Schirmer Administrator
    Registriert seit
    21.03.2007
    Beiträge
    7.675
    Beitragswertungen
    1212 Beitragspunkte
    Du setzt nur die einzelne Position um.

    Hier mal ein Beispiel, so wie es teilweise in Ilch umgesetzt wird:

    if ($menu->get(1) == 'changepos') {
    	$id  = escape($menu->getE(2), 'integer');
    	$pos = db_result(db_query('SELECT `pos` FROM `prefix_table` WHERE `id` = '. $id),0);
    	$anz = db_result(db_query('SELECT COUNT(*) FROM `prefix_table`'),0);
    	if ($menu->getA(2) == 'd') {
    		$newpos = $pos + 1;
    	} elseif ($menu->getA(2) == 'u') {
    		$newpos = $pos - 1;
    	}
    	if ($newpos < 0) {
    		db_query('UPDATE `prefix_table` SET `pos` = '. $anz .' WHERE `id` = '. $id);
    		db_query('UPDATE `prefix_table` SET `pos` = pos -1');
    	}
    	if ($newpos >= $anz) {
    		db_query('UPDATE `prefix_table` SET `pos` = -1 WHERE `id` = '. $id);
    		db_query('UPDATE `prefix_table` SET `pos` = `pos` +1');
    	}
    	if ($newpos >= 0 AND $newpos < $anz) {
    		db_query('UPDATE `prefix_table` SET `pos` = '. $pos .' WHERE `pos` = '. $newpos);
    		db_query('UPDATE `prefix_table` SET `pos` = '. $newpos .' WHERE `id` = '. $id);
    	}
    }


    <a href="?modul-changepos-u{id}">UP</a>
    <a href="?modul-changepos-d{id}">DOWN</a>
    rules :: doku :: faq :: linkus
    0 Mitglieder finden den Beitrag gut.
  3. #3
    User Pic
    holz Hall Of Fame
    Registriert seit
    17.11.2005
    Beiträge
    4.606
    Beitragswertungen
    117 Beitragspunkte
    ja da kommt es dann aber zu doppelten positionsnummern odeR?
    0 Mitglieder finden den Beitrag gut.
  4. #4
    User Pic
    Lord|Schirmer Administrator
    Registriert seit
    21.03.2007
    Beiträge
    7.675
    Beitragswertungen
    1212 Beitragspunkte
    Normalerweise nicht, es wird ja jede um 1 Postion erhöht oder verringert.
    rules :: doku :: faq :: linkus
    0 Mitglieder finden den Beitrag gut.
  5. #5
    User Pic
    holz Hall Of Fame
    Registriert seit
    17.11.2005
    Beiträge
    4.606
    Beitragswertungen
    117 Beitragspunkte
    merci das hat mir geholfen zwinker
    0 Mitglieder finden den Beitrag gut.
  6. #6
    User Pic
    holz Hall Of Fame
    Registriert seit
    17.11.2005
    Beiträge
    4.606
    Beitragswertungen
    117 Beitragspunkte
    erledigt
    0 Mitglieder finden den Beitrag gut.
Geschlossen

Zurück zu HTML, PHP, SQL,...

Optionen: Bei einer Antwort zu diesem Thema eine eMail erhalten