Avatar billede kimox Nybegynder
05. april 2007 - 15:29 Der er 6 kommentarer og
1 løsning

Hjælp til omplaciring?

Hej eksperter.

Jeg har denne kode, som går ind i min db og ændre alle tallene i felterne "plac" med -1 eller +1, det gør så jeg kan bestemme hvilken rækkefølge nogen priser skal lægge i, men nu vil jeg gerne be om hjælp til at lave så den gør præcis det samme med feltet "id" i min tabel.

koden ser sådan ud:

if(is_numeric($_GET['id']) && !empty($_GET['plac']))
{
    $currentSort = 0;
    $currentID = mysql_real_escape_string($_GET['id']);
   
    $moveSort = 0;
    $moveID = 0;
   
    $query = mysql_query("SELECT plac FROM priser WHERE id = " . $currentID . " LIMIT 1");
    if(mysql_num_rows($query)>0)
    {
        $currentSort = mysql_result($query,0);
    }
   
    switch($_GET['plac'])
    {
        case "op":
            $query = mysql_query("SELECT id, plac FROM priser WHERE plac < ".$currentSort." ORDER BY id DESC LIMIT 1");
            break;
        case "ned":
            $query = mysql_query("SELECT id, plac FROM priser WHERE plac > ".$currentSort." ORDER BY id ASC LIMIT 1");
            break;
        default:
            $moveSort = 0;
            $moveID = 0;
    }
   
    if(mysql_num_rows($query)>0)
    {
        $row      = mysql_fetch_assoc($query);
        $moveID  = $row['id'];
        $moveSort = $row['plac'];
    }
   
    if($moveSort > 0)
    {
        $query = mysql_query("UPDATE priser SET plac = ".$moveSort." WHERE id = ".$currentID." LIMIT 1");
        $query = mysql_query("UPDATE priser SET plac = ".$currentSort." WHERE id = ".$moveID." LIMIT 1");
    }
}

echo "<table width=\"100%\" cellpading=\"0\" cellspacing=\"0\" border=\"0\" align=\"center\">";
echo "<tr bgcolor=\"$bgcolor\" onMouseOver=\"this.bgColor='$over';\" onMouseOut=\"this.bgColor='$bgcolor';\">";
        echo "<td width=\"10%\" class=\"main_txt\"><b>Nr.:</b></td>";
        echo "<td width=\"75%\" class=\"main_txt\"><b>Varer:</b></td>";
        echo "<td width=\"15%\" class=\"main_txt\"><b>Placering:</b></td>";
echo "</tr>";
$query = mysql_query("SELECT * FROM priser ORDER BY plac");
if(mysql_num_rows($query)>0)
{
      $a = 0;
    while($row = mysql_fetch_assoc($query)) {
    $a++;
    if($a%2 == 0) {
    $bgcolor = "#f4f3f3";
    }else{
    $bgcolor = "#EBEBEB";
    }
$over = '#ded7c7';
        echo "<tr bgcolor=\"$bgcolor\" onMouseOver=\"this.bgColor='$over';\" onMouseOut=\"this.bgColor='$bgcolor';\">";
        echo "<td width=\"7%\" class=\"main_txt\"><b>" . $row['nr'] . "</b></td>";
        echo "<td width=\"83%\" class=\"main_txt\">" . $row['vare'] . "</td>";
        echo "<td width=\"10%\" class=\"main_txt\"><div align=\"right\"><a href=\"".$_SERVER['PHP_SELF']."?id=".$row['id']."&plac=op\"><img src=\"images/op.gif\" border=\"0\" alt=\"Flyt op\"></a>&nbsp;<a href=\"".$_SERVER['PHP_SELF']."?id=".$row['id']."&plac=ned\"><img src=\"images/ned.gif\" border=\"0\" alt=\"Flyt ned\"></a>&nbsp;&nbsp;&nbsp;</div></span></td>";
        echo "</tr>\n";
    }
   
}
else
{
    echo "<tr><td>Ingen priser</td></tr>\n";
}
echo "</table>";

på forhånd tusind tak for hjælpen
Avatar billede johan.o Nybegynder
06. april 2007 - 19:06 #1
Jeg forstår ikke helt hvad det er du gerne vil have, kan du ikke fortælle lidt mere om hvad der skal ske. F.eks. vise et eksempel på output.

Det kunne også være rart hvis du kan vise et par linjer fra tabellen priser.

Mvh. Johan
Avatar billede kimox Nybegynder
07. april 2007 - 19:10 #2
Outputtet ser sådan herud: http://www.gratishost.dk/fil.php?id=1937 der viser den "ORDER BY plac"

Tabellen ser sådan ud:

  `id`
  `nr`
  `mal`
  `antal`
  `vare`
  `pr`
  `ekskl`
  `inkl`
  `kateg`
  `plac`

når jeg trykker på pilen op eller ned som du kan se på billedet, så bliver alle tallene +'set eller -'set med 1 så man kan placeringen bliver korrekt.

Men problemet er at hvis jeg tilføjer en ny vare, så lægger den sig jo i bunden fordi at den får det højeste tal i `plac` og når jeg så rykker den op så skifter den fint placeringen på hjemmesiden, men den vil stadig lægge i bunden i min db pga id'et er det højeste, og hvis jeg så tilføjer en ny vare igen, og trykker den vare op også så forvirre den sig selv og bliver et tal højere end den sidste nye vare.

DVS:

1: Jeg tilføjer den første vare som får tallet '50' i `plac` og id '50'
2: Den første vare rykker jeg op til plads nr. 8. dvs der står '8' i `plac` og '50' i id
3: Så tilføjer jeg den anden vare og den får nr '51' i `plac` og '51' i id
4: Jeg vil nu rykke den anden vare op til plads '16'
5: Men så fordi den tager efter det tal der står `plac` i id '50' (fordi det er den som er over id '51') så får den tallet nr '9' i `plac`.
: Og det vil så sige at det hele fucker op :(

Derfor hvis man kunne +'se eller -'se i feltet `id` samtidig med at man +'ser eller -'ser i `plac` så ville den jo rykke feltet med op eller ned i min db. Og så skulle problemet vel være løst eller ?


Håber at du forstod det jeg skrev hehe, det  kan vist ikke forklares meget bedre :/
Avatar billede johan.o Nybegynder
07. april 2007 - 21:16 #3
NÅÅHH :), nu tror jeg at jeg er med og det undre mig at du sortere på id overhovedet i dine query's. Skal du ikke bare lave ORDER BY plac i dine op/ned query's (Switchen) ?

Mvh. Johan
Avatar billede kimox Nybegynder
17. april 2007 - 15:09 #4
cool det var lige hvad der skulle til.. nu virker det fint.

Smid et svar :D
Avatar billede johan.o Nybegynder
17. april 2007 - 17:02 #5
Det kommer her :)

Mvh. Johan
Avatar billede kimox Nybegynder
17. april 2007 - 17:31 #6
mange tak for hjælpen.

-lukket-
Avatar billede johan.o Nybegynder
17. april 2007 - 19:44 #7
Velbekomme og tak for points :)

Mvh. Johan
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester