Avatar billede fbb Nybegynder
28. december 2003 - 22:35 Der er 36 kommentarer og
1 løsning

Menusorteting op ned

Hej, jeg har en menu jeg godt vil kunne styre op og ned altså hvor de skal stå.

Jeg har et felt i min database der hedder sort.
fx.:
page    | sort
---------------
forside | 1
info    | 2
om      | 3
og har tænkt på at den skal kunne gøre sådan at når man klikker på op så rykker den en op.

Altså har man fat i info og klikker på op, så kommer den til at have 1 i sort og forside for 2.

håber i forstår.. og håber i kan hjælpe ;)
Avatar billede fbb Nybegynder
29. december 2003 - 17:38 #1
Ingen der kan hjælpe mig??... plz..
Avatar billede myplacedk Nybegynder
30. december 2003 - 08:44 #2
1) Find ud af hvilken der står før den, der skal rykkes op
2) UPDATE tabel SET sort = sort-1 WHERE page='info';
3) Læg én til på den, der skal rykkes ned
Avatar billede cpfrande Nybegynder
30. december 2003 - 10:55 #3
Hej FBB !

Systemet du ønsker at lave er ikke decideret svært.

Du skal egentlig blot gøre som myplacedk siger.
Han har dog ikke uddybet punkt 3 nok efter min mening. Jeg har forståelsen af, at det er der dit største problem ligger.


Når du ved, hvilken menu der skal rykkes, og om den skal rykkes op eller ned er resten ganske enkelt.
For at kunne forklare enklere er:
Menu1 = Den menu du ønsker at rykke
Menu2 = Den menu, der skal rykkes, for at Menu1 bliver rykket. (Dvs. skal Menu1 en plads op, skal Menu2 en plads ned)

Du finder Menu1 i din MySQL. Her henter du "sort" fra dens informationer.

Hvis du så har valgt at rykke Menu1 en plads op (i dette tilfælde, vil IDet blive en mindre), finder du Menu2, som rykkes ned, ved at sige: Menu1s sort + 1 (Det må jo være Menu2s sort, ikk?)
Hvis det var omvendt, altså Menu1 skulle en plads ned, fandt du Menu2s sort

Ved hjælp af Menu2s sort kan du finde Menu2s ID igennem et opkald til tabellen. Herefter kan du rette Menu2s sort til en lavere eller en højere.

Du laver en update til Menu1s sort, sådan, at Menu1s "sort" bliver en større eller en mindre, alt efter om den skulle rykkes op eller ned.

Du laver en update til Menu2s sort, sådan, at Menu2s "sort" bliver en større eller en mindre, alt efter om den bliver rykket op eller ned.

Det er vigtigt, at der først updates til sidst, da der ellers vil være forvirring når du skal finde Menu2s ID.

Håber det hjalp en smule, trods min svære forklaring sikkert. :)

Godt nytår!

Mvh.
cpfrande
Avatar billede fbb Nybegynder
30. december 2003 - 11:01 #4
Meget god forklaring, men jeg forstår ikke helt hvordan jeg skal finde den der er op over eller nede under.
Avatar billede myplacedk Nybegynder
30. december 2003 - 11:05 #5
Den der kommer lige før nummer 2:
SELECT page FROM tabel WHERE sort < 2 ORDER BY sort DESC LIMIT 1

Altså: Find den højeste af dem, der er mindre end 2.
Avatar billede fbb Nybegynder
30. december 2003 - 11:08 #6
nu spørg jeg sikkert dumt, men der er fx 34 menu punkter skal den så også hedde 2?
Avatar billede myplacedk Nybegynder
30. december 2003 - 11:10 #7
Den SQL var til at finde den, der kommer lige før 2. Hvis du skal finde noget der kommer lige før noget andet, skal du skrive det tal i stedet.
Avatar billede fbb Nybegynder
30. december 2003 - 11:11 #8
ok, jeg prøver lige lidt
Avatar billede fbb Nybegynder
30. december 2003 - 11:18 #9
Er det her rigtigt eller er jeg helt galt på den?
if (isset($_GET['PageNed'])) {
$data = mysql_query("SELECT sort FROM cms WHERE sort < $PageNed ORDER BY sort DESC LIMIT 1");
$row = mysql_fetch_array($data);
$sort = $row[sort] + 1;
mysql_query("update cms set sort = '$sort' where menu = '$PageNed'");
}
Avatar billede myplacedk Nybegynder
30. december 2003 - 13:35 #10
$_GET['PageNed'] og $PageNed er ikke nødvendigvis det samme. Desuden laver du et alvorligt sikkerhedsproblem ved at forudsætte, at det er et tal. Forslag:

$PageNed = (int)$_GET['PageNed'];

Skal indsættes som første linje efter "if"-linjen. Det løser begge problemer. Ellers tror jeg vist at det skulle virke. Du mangler så lige at flytte en anden side den modsatte vej. Ellers risikerer du at flere sider får samme nummer i "sort".
Avatar billede fbb Nybegynder
30. december 2003 - 13:39 #11
ok, kan jeg få dig til at lave lidt kode?
Forstår ikke den med at flytte den anden vej?
Avatar billede fbb Nybegynder
30. december 2003 - 13:48 #12
if (isset($_GET['PageNed'])) {
$PageNed = (int)$_GET['PageNed'];
$data = mysql_query("SELECT * FROM cms WHERE sort < $PageNed ORDER BY sort DESC LIMIT 1");
$row = mysql_fetch_array($data);
$sort = $row[sort] + 1;
$id = $row[id];
mysql_query("update cms set sort = '$sort' where id = '$id'");
}

og linker sådan her: <a href="?PageNed='.$row['sort'].'">Ned</a>]
Avatar billede myplacedk Nybegynder
30. december 2003 - 14:07 #13
Jeg kom lige til at tænke på noget. Der bliver problemer, hvis der er "huller" i rækkefølgen. Eksempel: Et punkt med sort-nummer 15 skal rykkes op. Den lige oven over har nummer 13. Så vil de begge få nummer 14.

Løsning:
1) Find navnet på den, der skal byttes plads med. (Dvs. den lige før, eller den lige efter.)
Du har nu to navne, der skal bytte plads. (Fx. $anavn og $bnavn)
2) Find sort-nummeret på den begge. (Fx. $asort og $bsort)
3) Indsæt sort-numrene ombyttet.
Fx:
UPDATE tabel SET sort='$asort' WHERE page='$bnavn'
og
UPDATE tabel SET sort='$bsort' WHERE page='$anavn'
Avatar billede fbb Nybegynder
30. december 2003 - 15:21 #14
Jeg være godt dum, for jeg kan ikke finde rundt i det, kan ikke få den til at det :(
Avatar billede myplacedk Nybegynder
30. december 2003 - 15:37 #15
Du skal nok være lidt mere præcis i din forklaring, for at jeg kan hjælpe dig. :)
Sidst jeg skrev, skrev jeg 3 punkter. Har du fået den første til at fungere? Hvis ikke, hvad er problemet?
Avatar billede myplacedk Nybegynder
30. december 2003 - 15:49 #16
Hmm... Måske vil det nemmeste være, at jeg bare skriver koden. Men vil du lære noget af det?
(Jeg vil gerne lære fra mig, men jeg vil ikke bare gøre arbejdet for dig.)
Avatar billede fbb Nybegynder
30. december 2003 - 15:56 #17
Ville være det nemmeste, jah, men jeg vil jo helt lære det så jeg kan bygge lave det selv
Avatar billede myplacedk Nybegynder
30. december 2003 - 15:58 #18
OK, jeg laver lige noget til dig.
Hvad indeholder $PageNed? Er det et id, teksten under "page" eller tallet under "sort"?
Avatar billede fbb Nybegynder
30. december 2003 - 16:07 #19
min database hedder:
cms
har felt:
id  | menu  | sort
1  |forside| 2

ved ikke om det er bedst at gå ud fra ;)
Avatar billede myplacedk Nybegynder
30. december 2003 - 16:11 #20
Det er fint. $PageNed (eller $PageOp) skal så indeholde id. Det laver jeg lige...
Avatar billede fbb Nybegynder
30. december 2003 - 16:13 #21
ok ;)
Avatar billede myplacedk Nybegynder
30. december 2003 - 16:21 #22
Sådan. Jeg har ikke testet det. Desuden er det lang tid siden jeg har brugt mysql_* funktionerne (de er så besværlige, jeg bruger PEAR::DB i stedet), så jeg er ikke sikker på om jeg bruger dem helt rigtigt. Der mangler i hvert fald fejlhåndtering, det er der ikke noget af.

Sig endelig til, hvis der er noget, du ikke forstår.


// Hent id på det menupunkt der skal flyttes.
// Hvis der ikke er noget der skal flyttes, vil de begge indeholde 0.
$PageOp = (int)@$_GET['PageOp'];
$PageNed = (int)@$_GET['PageNed'];

if ($PageOp>0) {

  // $PageOp skal flyttes op.
  $id1 = $PageOp;

  // Find nuværende "sort";
  $sql = "SELECT sort FROM tabel WHERE id=$id1";
  $result = mysql_query($sql);
  $row = fetch_row($result);
  $sort1 = $row[0];

  // Find punkt der skal byttes med
  $sql = "SELECT id, sort FROM tabel WHERE sort>$sort1 ORDER BY sort ASC LIMIT 1";
  $result = mysql_query($sql);
  $row = fetch_row($result);
  $id2 = $row[0];
  $sort2 = $row[1];

} elseif ($PageNed>0) {

  // $PageNed skal flyttes ned.
  $id1 = $PageNed;

  // Find nuværende "sort";
  $sql = "SELECT sort FROM tabel WHERE id=$id1";
  $result = mysql_query($sql);
  $row = fetch_row($result);
  $sort1 = $row[0];

  // Find punkt der skal byttes med
  $sql = "SELECT id, sort FROM tabel WHERE sort<$sort1 ORDER BY sort DESC LIMIT 1";
  $result = mysql_query($sql);
  $row = fetch_row($result);
  $id2 = $row[0];
  $sort2 = $row[1];

}

if ($PageOp>0 || $pageNed>0) {

  // Der skal byttes
  $sql = "UPDATE tabel SET sort='$sort2' WHERE id='$id1'";
  mysql_query($sql);
  $sql = "UPDATE tabel SET sort='$sort1' WHERE id='$id2'";
  mysql_query($sql);
}
Avatar billede fbb Nybegynder
30. december 2003 - 16:28 #23
for en fejl her:

  // Find nuværende "sort";
  $sql = "SELECT sort FROM cms WHERE id=$id1";
  $result = mysql_query($sql);
  $row = fetch_row($result);
  $sort1 = $row[0];
i $row...:
Call to undefined function: fetch_row()
Avatar billede fbb Nybegynder
30. december 2003 - 16:32 #24
CREATE TABLE `cms` (
  `id` int(11) NOT NULL auto_increment,
  `menu` varchar(50) NOT NULL default '',
  `overskrift` varchar(100) NOT NULL default '',
  `tekst` longtext NOT NULL,
  `image` varchar(100) NOT NULL default '',
  `hits` int(4) NOT NULL default '0',
  `sort` int(2) NOT NULL default '0',
  PRIMARY KEY  (`id`)
) TYPE=MyISAM AUTO_INCREMENT=26 ;
Avatar billede myplacedk Nybegynder
30. december 2003 - 23:10 #25
Prøv mysql_fetch_row i stedet for fetch_row ;-)
Avatar billede fbb Nybegynder
31. december 2003 - 01:29 #26
Sådan rettet det til det, nu kommer der ingen fejl, men der sker heller ikke noget når man klikke på op eller ned
Avatar billede myplacedk Nybegynder
31. december 2003 - 09:30 #27
Prøv at starte med "var_dump($_GET);" hvad kommer der så frem, når du har klikket "op" eller "ned"?
Avatar billede fbb Nybegynder
31. december 2003 - 12:50 #28
Hvor skal det sættes ind?..
Avatar billede myplacedk Nybegynder
31. december 2003 - 13:22 #29
Det er ligegyldigt, bare et sted, hvor det bliver kørt. Jeg vil foreslå at du sætter det ind i starten, dvs. øverst.
Avatar billede fbb Nybegynder
31. december 2003 - 14:06 #30
ok, når man kommer ind på siden:
array(0) { }
Når jeg klikker op:
array(1) { ["PageOp"]=> string(1) "1" }
og ned:
array(1) { ["PageNed"]=> string(1) "1" }
Avatar billede myplacedk Nybegynder
01. januar 2004 - 15:45 #31
Måske er der en SQL-fejl et sted. Prøv at indsætte noget MySQL fejl-håndtering. Det er MEGET lang tid siden jeg har rodet med sådan noget, men det er vist noget i stil med:
$result = mysql_query($sql) or die(mysql_error());
Hvis der er SQL-fejl, vil den så blive vist.

Efter hver linje, der starter med "$sql =", kan du bagefter indsætte dette:
echo "<p>SLQ: $sql</p>";
Så kan du se hvad det er, der bliver sendt til databasen.
Avatar billede fbb Nybegynder
01. januar 2004 - 16:10 #32
hmm den går i problem synes jeg når den kommer ned på 0
Men du kan jo prøve at klikke lidt rundt nu:
http://www.frederikbb.dk/CMS/admin/test2.php
login: test - test

ved ikke hvad der er galt ??
Avatar billede myplacedk Nybegynder
01. januar 2004 - 18:03 #33
Jeg ved heller ikke lige hvad der er galt, jeg synes den virker som den skal. Når jeg trykker "op" ved et menupunkt, så rykker det op. Når jeg trykker "ned", så rykker menupunktet ned...
Avatar billede fbb Nybegynder
01. januar 2004 - 18:05 #34
Hvis du trykker mange gange.. så kan et af punkterne finde på at blive siddene og derved blive sprunget over
Avatar billede fbb Nybegynder
01. januar 2004 - 18:09 #35
Tja det ser jo ud til at funke før synes jeg bare den satte sig fast, men points skal du jo have.. mange mange tak for hjælpen
Avatar billede myplacedk Nybegynder
01. januar 2004 - 18:14 #36
Måske er det din browsers cache der driller?
Avatar billede fbb Nybegynder
01. januar 2004 - 18:17 #37
Kan ske, men tak for hjælpen og godt nytår..
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