Avatar billede rane Nybegynder
29. maj 2007 - 11:26 Der er 19 kommentarer og
2 løsninger

Link sortering - en udfordring

Skal lige sige at jeg er nogenlunde nybegynder i PHP men...:

Jeg er ved at lave et mindre admin-system hvor en bruger skal kunne administrere en link-samling. Det vil sige tilføje/redigere/slette links. 

MEN...de skal også kunne sortere i links. Forestiller mig at alle links bliver listet og så kommer der op/ned pile ud for dem hvor de så onclick bliver flyttet en tak op eller ned.

Hvordan laver man dette i PHP, når der også skal tages højde for at man kan slette links??

(eks. en linksamling på 10 links...sletter man link 3, skal link 4-10 automatisk rykke en plads frem på listen)
Avatar billede dmdisco Nybegynder
29. maj 2007 - 11:36 #1
lav et ekstra felt i din database hvor du har en tal værdi der indikere hvad linkets rækkefølge er og så når man klikker på op skal den tage den der har rækkefølge+1 og sætte til samme rækkefølge som den der er klikket på og den der er klikket på til rækkefølge+1
Avatar billede rane Nybegynder
29. maj 2007 - 11:47 #2
Ja, så langt er jeg også nået i mine overvejelser. Som jeg ser det, er der 2 problemer som jeg ikke umiddelbart er kompetent nok til at løse:

1. Hvordan man får de øvrige (et variabelt antal af links) til at ændre sorteringsværdi.
2. Hvordan man får alle links til at tilpasse deres sorteringsværdi, hvis man sletter et link midt i det hele.
Avatar billede pidgeot Nybegynder
29. maj 2007 - 11:50 #3
1.
Ved op: UPDATE tabel SET sorter=sorter+1 WHERE sorter=(ny sorteringsværdi); UPDATE tabel SET sorter=(ny sorteringsværdi) WHERE id=(id)
Ved ned: UPDATE tabel SET sorter=sorter-1 WHERE sorter=(ny sorteringsværdi); UPDATE tabel SET sorter=(ny sorteringsværdi) WHERE id=(id)

2.
DELETE tabel WHERE id=(id)
UPDATE tabel SET sorter=sorter-1 WHERE sorter>=(slettet sorteringsværdi);
Avatar billede rane Nybegynder
29. maj 2007 - 11:53 #4
Jeg er godt inde i SQL tingene - det er nærmere PHP koden (specielt loops) jeg ikke kan hitte ud af.
Avatar billede radion Nybegynder
29. maj 2007 - 11:55 #5
2'eren er nem.

function sortlinks(){
   
    $sql_sort= mysql_query("select link_ID from LINKSTABEL order by linksort");


  while($raekke = mysql_fetch_array($resultat)) {
    $sql_sort_array[] = $raekke;
  }
   
    for($i=0;$i<sizeof($sql_sort_array);$i++){
        extract($$sql_sort_array[$i],EXTR_PREFIX_ALL,'sorted');
       
        mysql_query("update LINKSTABEL Set linksort='$i' where link_ID='$sorted_link_ID'");
   
    }

}
Avatar billede radion Nybegynder
29. maj 2007 - 11:56 #6
æv, pidgetot's løsning til slutsortering er bedre :'(
Avatar billede dmdisco Nybegynder
29. maj 2007 - 12:54 #7
lav en forløbende sorterings værdi og så brug for ned:
<?php
$result = mysql_query("SELECT * FROM tabel WHERE id='".$_GET['id']."' LIMIT 1") or die(mysql_error());
$row = mysql_fetch_assoc($result);
mysql_query("UPDATE tabel SET sortering='".($row['sortering'])."' WHERE sortering='".$row['sortering']-1."' LIMIT 1") or die(mysql_error());
mysql_query("UPDATE tabel SET sortering='".($row['sortering']-1)."' WHERE id='".$_GET['id']."' LIMIT 1") or die(mysql_error());
?>
og for op:
<?php
$result = mysql_query("SELECT * FROM tabel WHERE id='".$_GET['id']."' LIMIT 1") or die(mysql_error());
$row = mysql_fetch_assoc($result);
mysql_query("UPDATE tabel SET sortering='".($row['sortering'])."' WHERE sortering='".$row['sortering']+1."' LIMIT 1") or die(mysql_error());
mysql_query("UPDATE tabel SET sortering='".($row['sortering']+1)."' WHERE id='".$_GET['id']."' LIMIT 1") or die(mysql_error());
?>
Avatar billede rane Nybegynder
29. maj 2007 - 13:41 #8
dmdisco, det ser lovende ud. Til gengæld er jeg stadig lidt blank på hvis man sletter et link midt i det hele....

radion, kan du måske kort kommentere din kode så en newbie forstår det lidt bedre? :)
Avatar billede dmdisco Nybegynder
29. maj 2007 - 13:51 #9
det jeg har gjort er at efter din query hvor du sletter en post så kører denne
mysql_query("UPDATE tabel SET sortering=sortering-1 WHERE sortering> ".$row['sortering']."") or die (mysql_error());
// $row['sortering'] er fra den post du lige har slettet så hent den før du sletter den
Avatar billede rane Nybegynder
29. maj 2007 - 13:58 #10
ahh..ok jeg var ikke lige klar over at den "looper" update-sætningen på den måde i php så. mener nemlig ikke det var sådan man gjorde i asp :)  prøver det lige og vender tilbage
Avatar billede radion Nybegynder
29. maj 2007 - 14:12 #11
det den gør, er at tildele nye numre til alle links, i den rigtige rækkefølge, men, brug pidgetot's løsning, den ser ud til at være mindre krævende
Avatar billede dmdisco Nybegynder
29. maj 2007 - 14:34 #12
ved nærmere gennemsyn er pidgeot's løsning jo stort set identisk med min så ja brug den, men den kræver hverken mere eller mindre af serveren
Avatar billede dmdisco Nybegynder
29. maj 2007 - 14:42 #13
det eneste jeg mener er at du skal lave 2 updates for at undgå huller i din sorterings tal række, det nytter ikke noget hvis de får samme tal eller hvis der er huller så den ikke vil ændre rækkefølge når du kører din update
Avatar billede rane Nybegynder
30. maj 2007 - 14:11 #14
dmdisco, din kode virker bare 100% ! Hvis den er lignende pidgeots, så smid et svar begge to :)
Avatar billede pidgeot Nybegynder
30. maj 2007 - 16:32 #15
Værsgo :)
Avatar billede dmdisco Nybegynder
30. maj 2007 - 18:41 #16
han kom jo med eksemplet først men op til dig
Avatar billede rane Nybegynder
31. maj 2007 - 15:45 #17
Deler det lidt op så - takker :)
Avatar billede skooter Nybegynder
04. juni 2007 - 09:15 #18
Synes ikke det fungere helt som det skal. Hvis jeg bruger pidgets eksempel virker det slet ikke. Hvis jeg bruger dmdiscos forslag og klikke det nederste element på listen en tand op - ryger den helt op i toppen af listen :-S ... Men det er dog den der virker bedst.
Avatar billede skooter Nybegynder
04. juni 2007 - 09:17 #19
... Desuden er jeg nogle gange nød til at klikke flere gange på op/ned knappen før elementet flytter sig.
Avatar billede dmdisco Nybegynder
04. juni 2007 - 10:08 #20
tror faktisk også jeg har et tjek med på så jeg undgår at den ændre den øverste eller nederste
Avatar billede dmdisco Nybegynder
04. juni 2007 - 10:09 #21
altså på den jeg bruger
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