Avatar billede snigeren Nybegynder
23. august 2005 - 15:51 Der er 30 kommentarer og
1 løsning

tutorial eller anden hjælp til næste/forrige side

Hej Eksperter

Jeg har brug for at lave et system der:
hvis der er flere end 20 tråde på en side laver den "næste side" knap og antal sider står ved siden af som man også skal kunne trykke på, hvis der er 5 sider og man trykker på side 4 hopper den til de tråde der befinder sig på side 4.

Det er helt magen til det system der er her på eksperten ved hver kategori,..

Hvis nogen har et sådanne script liggende, vil jeg meget gerne se dette. Eller hvis der er et sted jeg kan finde det vil jeg også gerne vide det.

/Snig

ps.: er der et sted allá flashkit.com til php? hvor man kan finde scripts og tutorials...
Avatar billede dustie Mester
23. august 2005 - 16:15 #1
Du kan finde scripts til alt muligt på fx. www.hotscripts.com
www.zend.com er også et kig værd. Jeg er næsten sikker på du kan finde den slags script du søger der :)
Avatar billede jaw Nybegynder
23. august 2005 - 16:20 #2
Kig her, måske du kan mit tidligere svar til en anden bruger på faktisk samme spørgsmål:

http://www.eksperten.dk/spm/632180
Avatar billede Slettet bruger
23. august 2005 - 16:53 #3
<?php
$pr_side = 5;
if (!isset($page)) { $page = "0"; }

$query = mysql_query("SELECT felt1, felt2 FROM tabel ORDER BY id DESC LIMIT $page,$pr_side") or die(mysql_error());
while ($foo = mysql_fetch_assoc($query)) {
    echo "blablalba";
}

$antal = mysql_result(mysql_query('SELECT COUNT(*) FROM tabel'),0);
if($antal > $pr_side) {
// forrige side
if ($page == 0) {
    echo "";
    } else {
    $forrige = $page-$pr_side;
    echo "<a href=\"?page=$forrige\">Forrige</a> ";
}

// sidetal
$startpage = 1;
for($start=0; $antal > $start; $start=$start+$pr_side){
    if ($start != $page) {
        echo "<a href=\"?page=$start\">" . $startpage . "</a> ";
    } else {
        echo $startpage;
    }
    $startpage++;
}

// næste side
if ($antal > $page+$pr_side) {
    $naeste = $page+$pr_side;
    echo "<a href=\"?page=$naeste\">Næste</a>";
}
}
?>
Avatar billede snigeren Nybegynder
23. august 2005 - 17:12 #4
Hmmm jeg er totalt spasser i php,.. jeg skal simpelthen ha fat i en bog,.. hvilken kan du anbefale jaw? En bog der starter fra bunden med en masse små opgaver dertil for at øve de ting man læser...

Men indtil da hvad skal jeg så ændre i dit script for at det snakker sammen med mit?

Jeg ved ikke om det kan bruges men mit starter pt. med:
<?php



    // This page will list all of the items

    // from the items table. Each item will have

    // a link to add it to the cart



    include("db.php");

   

    // Get a connection to the database

    $cxn = @ConnectToDb($dbServer, $dbUser, $dbPass, $dbName);

    $where = "";
    if ($_GET['mainId']) {
    $where = 'WHERE mainId = ' . $_GET['mainId'];
    }
    $start = 0;
    $prside = 10;
    $result = mysql_query("select * from items " . $where . " order by itemName asc LIMIT $start, $prside");
   
    ?>


Hvis du skal bruge andet end det jeg lige skrev så sig endelig til,.. jeg skal gerne lave et nyt spørgsmål med flere points hvis det hjælper... det haster bare en anelse med det site jeg er ved at bygge :|
Avatar billede snigeren Nybegynder
23. august 2005 - 17:27 #5
hvis jeg smider dit script ind i en tabel i mit scripts virker det egentlig fint,.. den mangler bare de rigtig input,..

Min MySQL db ser således ud,..: http://www.triodimenzionale.dk/misc/jernbanemaerker/mysql_db.jpg
Avatar billede jaw Nybegynder
23. august 2005 - 20:30 #6
Jamen sådan set skal du jo bare have 3 variabler:

$prside som du selv sætter, f.eks. til 20.
$num_rows som skal indeholde det totale antal rækker der er, f.eks.
$q = mysql_query("SELECT COUNT(*) FROM jernbanemaerker_dk");
$num_rows = mysql_result($q, 0);
$basename er det navn på den side den skal "hoppe til". F.eks. er det index.php.
$s som er hvad der skal startes fra. F.eks. kan $s være 20, hvis den skal starte på række 20. Hentes fra $_GET['s'] så url-linien vil være index.php?s=20 (f.eks.)

Forståeligt? :)
Avatar billede snigeren Nybegynder
23. august 2005 - 20:59 #7
øhm,.. når jeg har følgende:
<?php
    include("db.php");
    $cxn = @ConnectToDb($dbServer, $dbUser, $dbPass, $dbName);

    $where = "";
    if ($_GET['mainId']) {
    $where = 'WHERE mainId = ' . $_GET['mainId'];
    }
    $start = 0;
    $prside = 20;
    $result = mysql_query("select * from items " . $where . " order by itemName asc LIMIT $start, $prside");
   
    $q = mysql_query("select count(*) from items " . $where);
    num_rows = mysql_result($q, 0);
    ?>

får jeg fejl i denne række: num_rows = mysql_result($q, 0);

Jeg syntes da ellers det giver lidt mening det du siger,.. jeg kan bare stadig ikke hitte ud af det =)

Er det ikke nogenlunde rigtigt at jeg skal have $where ind i din $q? vi skal jo kun tælle de rækker der har noget med mainId = x at gøre...
Avatar billede snigeren Nybegynder
23. august 2005 - 21:01 #8
jeg har i øvrigt lånt det lille blå hæfte "start på php" til kr. 69,- af en kammerat... det er meget fint lige at blive sat ind i de forskellige termer og hvad har vi =)
Avatar billede jaw Nybegynder
23. august 2005 - 21:01 #9
Joh, lige umiddelbart er det ikke så tosset. Men start med at smide et $-tegn foran num_rows så det bliver $num_rows :)
Avatar billede jaw Nybegynder
23. august 2005 - 21:03 #10
og så din $start = 0 bør f.eks. være:

if(isset($_GET['s'])) {
  $start = $_GET['s'];
} else {
  $start = 0;
}

ellers vil du altid hente fra række 0 - 19 lige meget hvad der står i adresselinien.
Avatar billede snigeren Nybegynder
23. august 2005 - 21:55 #11
ja flot med det $-tegn :P så kan man måske lære at se ordentlig efter :)

uhm, men med hensyn til mainId skal det jo oxo med på "næste" og "forrige" knapperne... jeg har prøvet med følgende men det synes ikke at virke:

<td width='20' align='center'><a class='style2' href='".$basename."$where"."&"."?s=0'>&laquo;</a></td>

<td width='50' align='center'><a class='style2' href='".$basename."$where"."&"."?s=".($now * $prside - 2 * $prside)."'>forrige</a>

Jeg spørger ikke OM der er noget galt men HVAD der er galt =)

Men jeg håber da at fatte lidt af det her inden vi er færdige...
Avatar billede jaw Nybegynder
24. august 2005 - 00:16 #12
Well, jeg tror vi har snakket forbi hinanden. Et eller andet sted havde jeg fået opfattelsen af, at det var mit script du snakkede om.

Anyhoo så er jeg lige pt. for træt til at hjælpe dig, men lad os se på det i morgen hvis du ikke er kommet længere...
Avatar billede snigeren Nybegynder
24. august 2005 - 14:36 #13
ehem,.. det er da oxo dit script jeg prøver at bruge,.. jeg har bare ændret en smule i det...

på en eller anden måde skal jeg jo have mit eget mainId som findes her i starten af mit script, med i dit script så dit script ved hvilke produkter den skal have med:

<?php
    include("db.php");
    $cxn = @ConnectToDb($dbServer, $dbUser, $dbPass, $dbName);

    $where = "";
    if ($_GET['mainId']) {
    $where = 'WHERE mainId = ' . $_GET['mainId'];
    }
    $start = 0;
    $prside = 20;
    $result = mysql_query("select * from items " . $where . " order by itemName asc LIMIT $start, $prside");
   
    $q = mysql_query("select count(*) from items " . $where);
    num_rows = mysql_result($q, 0);
    ?>




Herunder har jeg så prøvet at smide funktionen $where ind i dit script til knapperne så den foruden at forøge $s også ved at den skal have $where med mainId med:

<td width='20' align='center'><a class='style2' href='".$basename."$where"."&"."?s=0'>&laquo;</a></td>

<td width='50' align='center'><a class='style2' href='".$basename."$where"."&"."?s=".($now * $prside - 2 * $prside)."'>forrige</a>
Avatar billede jaw Nybegynder
24. august 2005 - 14:52 #14
$where skal du ikke smide i mit script. Sådan set skal du ikke pille i mit script (andet end layout-mæssigt burde i hvert fald ikke være nødvendigt). De eneste variabler vi skal have defineret er dem der står i "funktionens navn".

Altså:

function tele2_pages ($prside, $num_rows, $basename, $s) { <- disse 4 variabler skal defineres.

Og du har den stadig liggende som en funktion, ik? Eller har du pillet det hele ud og smidt ind i selve koden?
Avatar billede snigeren Nybegynder
24. august 2005 - 15:00 #15
yup har stadig det hele samlet,.. det eneste jeg har pillet ved er lidt layout og så lige $where ind i de 5 linier der står i tabellen =)

Dem fjerner lige igen så...

ahh så det er måske basename der skal defineres for at $where kommer med?
Avatar billede jaw Nybegynder
24. august 2005 - 15:04 #16
Jep, det er det nemlig. Men det er ikke $where du skal have med, men $_GET['manId'].

Og for at få det med, skal vi lige have lavet et par ganske små ændringer i funktionen, nemlig skal ?-tegnene udskiftes med &amp; (der er HTML's måde at skrive tegnet & på).

Derefter kan du definere din $basename som:
$_SERVER['PHP_SELF']."?manID=".$_GET['manID'];

Comprende? :)
Avatar billede snigeren Nybegynder
24. august 2005 - 15:08 #17
uhm,.. skal jeg så ikke have $where med overhovedet? er der alt hvad man skal bruge i følgende sætning?: $basename = $_SERVER['PHP_SELF']."?manId=".$_GET['manId'];
Avatar billede jaw Nybegynder
24. august 2005 - 15:10 #18
Ja, for din $where bliver jo konstrueret på baggrund af manID fra adresselinien.
Avatar billede snigeren Nybegynder
24. august 2005 - 15:29 #19
uhm,.. nu ser starten således ud men nu finder den åbenbart ikke mainId mere for den tager bare de 5 første i order by itemName:

<?php
    include("db.php");
    $cxn = @ConnectToDb($dbServer, $dbUser, $dbPass, $dbName);
   
    if(isset($_GET['s'])) {
      $start = $_GET['s'];
    } else {
      $start = 0;
    }
   
    $prside = 5;
    $basename = $_SERVER['PHP_SELF']."?mainId=".$_GET['mainId'];

    $result = mysql_query("select * from items order by itemName asc LIMIT $start, $prside");
   
    $q = mysql_query("select count(*) from items " . $where);
    $num_rows = mysql_result($q, 0);
    ?>
Avatar billede jaw Nybegynder
24. august 2005 - 15:31 #20
Ja, men den del skulle du ikke fjerne $where. Det skal jo se ud som du hele tiden har haft det, som 24/08-2005 14:36:04. Det var kun fra "mine" knapper at $where skulle fjernes.
Avatar billede snigeren Nybegynder
24. august 2005 - 15:37 #21
ehem ok,.. tilbage til start jeg inkasserer ikke 4000 kr.
Avatar billede snigeren Nybegynder
24. august 2005 - 15:46 #22
hvis $num_rows ellers er defineret rigtigt er det kun $s der mangler nu så:

    $q = mysql_query("select count(*) from items " . $where);
    $num_rows = mysql_result($q, 0);

nu henter den ihvert fald kun ting med mainId = 103 som jeg skriver i URL´en

og så selvfølgelig også lige antallet af entries som du pt. har sat til 100:
echo tele2_pages(10, 100, $_SERVER['PHP_SELF'], 0);

hvad er 10 og 100? 100 det er vel antallet af entries som med 10 pr side giver 10 sider ikke? dvs. jeg skal lave en lille formel for at finde det rigtig antal sider, ikke sandt?
Avatar billede jaw Nybegynder
24. august 2005 - 15:50 #23
Joh, men de tal (10, 100 og 0) var nogen jeg manuelt satte i det tidligere spørgsmål for at illustrere hvordan funktionen regner på tallene.

Det du sådan set bare skal gøre er at skrive:
echo tele2_pages($prside, $num_rows, $basename, $start);

Antallet af sider vil funktionen så selv regne ud - forhåbentlig :)
Avatar billede snigeren Nybegynder
24. august 2005 - 15:53 #24
ok,.. så $s skal ikke med i den?
Og hvordan definerer jeg $s... jeg må virkelig sige jeg er begyndt at fatte en del mere end da jeg startede på php her for ikke mange uger siden,..
Avatar billede jaw Nybegynder
24. august 2005 - 15:55 #25
Jeg håber det hjælper :)

$s bliver defineret i knapperne i funktionen og smidt op i adresselinien som f.eks. index.php?mainId=103&s=10.

Den $_GET['s']-variabel benytter vi, bare ikke direkte. Vi konverterer den om til $start i denne del, som du forhåbentlig stadig har med:

  if(isset($_GET['s'])) {
      $start = $_GET['s'];
    } else {
      $start = 0;
    }

Det trin kunne muligvis nok være udeladt, men det er for at sikre, at $start _altid_ har en værdi, da dit mysql udtræk ellers ville fejle med delen: LIMIT $start, $prside
Avatar billede snigeren Nybegynder
24. august 2005 - 15:57 #26
for søren,.. nu virker det jo =)  tænk at sådan en lille sætning kan gøre så meget :P
Avatar billede snigeren Nybegynder
24. august 2005 - 15:57 #27
yesh yesh har stadig isset med =)
Avatar billede jaw Nybegynder
24. august 2005 - 15:58 #28
Kanon jo :) Og en lille sætning kan man vel ikke tillade sig at kalde det, da det er den sætning der nærmest danner grundlag for alle beregninger og tabellen med "knapper" :)

Anyhoo så håber jeg du er tilfreds, og vil smide et lille svar ? :)
Avatar billede snigeren Nybegynder
24. august 2005 - 16:08 #29
yesh jeg er super tilfreds... fedt lille script du har der :P
Man kan jo nærmest ikke komme tættere på det jeg var ude efter,..

Jeg har et andet lille spørgsmål,.. men det vil næsten oprette uafhængigt...

Den admin side jeg har lavet der skal forestille at skrive mainId ned i databasen vil ikke rigtig tilføje noget,.. jeg ved ikke helt hvorfor. Jeg mener at have gjort nøjagtigt som Heine lennart christensen skriver i "lav dit eget CMS med dreamweaver, php og mySQL"

Skal jeg oprette et spørgsmål med et par ektra points til dig eller er det fjong med de 30 her?
Avatar billede jaw Nybegynder
24. august 2005 - 16:10 #30
Rent faktisk bør du jo oprette et nyt spørgsmål, især ud fra betragtningen om, at andre brugere skal kunne bruge svar til noget hvis de bruger søgemaskinen.

Men det er sådan set op til dig selv...

Og det script har også taget mig en del tid at komme frem til, og hvorfor så ikke dele det :D ?!
Avatar billede snigeren Nybegynder
24. august 2005 - 16:16 #31
Jeg opretter lige et andet spørgsmål så kan du jo hoppe med der hvis du lyster =)

Men so far siger jeg mange tak for hjælpen,.. det er helt gevær det du har hjulpet med!

Når jeg nu skal linke til en php fil, hvordan siger du så jeg bedst gør dette? for mit næste spørgsmål går på en dreamweaver oprettet php side, så den er sikkert lidt rodet, helt sikkert nemmere med selve filen =)
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