27. februar 2008 - 19:36Der er
37 kommentarer og 1 løsning
Hvordan laver man sidetal via php til en forumsoversigt
Hej eksperter
Sådan nu er jeg komme så langt med min hjemmeside at jeg har fået opbygget og nyheds system, samt et forum. - Her under har jeg lavet en oversigt som viser de sidste oprettede tråde samt sidste oprettede nyheder. Og har sat den til at den skal være mig de sidste 20 nyheder (hvilket virker korrekt).
Men nu vil jeg gerne have gjort så man kan gå videre til sidde 2 f.eks. og eller se hvilken side man er på.
- Hvordan gør man det?
Målet var af min hjemmeside automatisk skulle kunne gøre følgende:
Denne side indeholder artikler med forskellige perspektiver på Identity & Access Management i private og offentlige organisationer. Artiklerne behandler aktuelle IAM-emner og leveres af producenter, rådgivere og implementeringspartnere.
Det er godt nok tre år siden jeg sidst har kigget på en phpkode, men princippet er at du laver et sqludtræk med en count, dividerer med antallet af poster per side (her 20), og evt. bruger ceil() til at rund sidetallet op. Derefter laver du et SQl udtræk med LIMIT, og henter start og slut fra en GET variabel i adresselinjen. I bunden laver du en side vælger, der bruger samme info. Super smart. Du bruger LIMIT i dit mysql kald: (SELECT tråd FROM tabel WHERE id=id LIMIT 0,20) og derefter 20,40 :)
Spørg bare løs hvis der er mere. Kommer gerne med konkrete eksempler. -- men udfra dette kan det gøres.
Ja okay. Så lige dit svar igår. Og så har jeg brugt dagen i dag på at tænke selve metoden igennem. Rent teoretisk. Og det virker som om det er måden man skal gøre det på. Men har stadigvæk problemer med at se hvordan man skal få ens side til selv at finde ud af om man er på side 1, 2 eller 5? - Samt hvordan kan den selv vide hvad den skal vise, hvis man f.eks er på side. 5? Der skulle den jo gerne vise følgende:
"sider: 3 4 [5] 6 7 ... 14" (- hvis der vel og mærket er 14 sider i alt)
Men kan godt se at selve hovedmetoden er den rigtig måde at gøre det på.
Arh. Har siddet og kigget en del på den her til aften. (Kan godt lide og kigge tingene lidt igennem før jeg melder tilbage.) Og tror faktisk at jeg forstår hvordan det virker. eller burde virke.
Men kigger det lige igennem i morgen engang. Før jeg melder ydeligere tilbage. Så er der nemlig større chance for at jeg selv forstår det. Samt en større chance for at jeg ikke behøver stille lige så mange dumme spørgsmål.
Det er bare helt i orden. Efterhånden har jeg jo skrevet en stor del af koden, så mon ikke det er rimelig nemt at stykke sammen? Du spørger bare, hvis der er andet, så kan jeg genopfriske mine "skills" lidt.. :)
Ja desværre Limit virker på den måde at du angiver hvilken række som mysql skal tage fra og hvor mange rækker den skal hive ud. dvs LIMIT 80,20 starter med række 80 og giver dig 20 rækker ud, altså til og med række 99.
LIMIT 80,100 starter på række 80, men giver dig 100 rækker ud, dvs langt mere end ud vil vise på siden. Det kan selvfølgelig godt virke, men der er ingen ide i at hive de sidste 80 rækker ud af databasen når du ikke har brug for dem ;-)
Sidder lige og prøver mig lidt frem, ved at sætte lidt af koden ind i min egen kode. - Dette resulterer i at hvis der sker en fejl. så ved jeg hvor fejlen er.
Men ved virkelig ikke hvad der er galt her. Når jeg skriver følgende:
$query = mysql_query('SELECT `indlæg`, FROM `table` WHERE `xxx` = "'.$_SESSION["xxx"].'" ORDER BY `dato` DESC LIMIT 0, 20');
?>
Virker det perfekt. - Altså den går ind og henter de sidste 20 indlæg.
Men ændre jeg bare 20 om til $antal - viser den ikke noget? - hvordan kan det være:
$query = mysql_query('SELECT `indlæg`, FROM `table` WHERE `xxx` = "'.$_SESSION["xxx"].'" ORDER BY `dato` DESC LIMIT 0, $antal');
- Jeg gør da intet forkert? ps. har slettet en del i selve query for at den ikke skulle fylde for meget. Men som sagt så virker det korrekt hvis jeg direkte skriver 20, frem for $antal. - det burde da ikke betyde noget.
Det er fordi du ikke har forstået forskellen på ' og "
Når du kaver en streng med ', som er det du går med din sql, så bliver variabler ikke fortolket af php, dvs:
$antal = 5 echo 'Antal: $antal';
vil kun udskrive 'Antal: $antal' og ikke selv værdien af $antal.
Hvis du derimod bruger " til en streng, vil php fortolke variablen og bruge dens værdi i strengen. Dvs:
$antal = 5 echo "Antal: $antal";
vil give 'Antal: 5'
Du skal derfor sikre dig at du bruger " når du vil have værdien af en variabel med i en streng. I dit tilfælde: $query = mysql_query("SELECT `indlæg`, FROM `table` WHERE `xxx` = '".$_SESSION['xxx']."' ORDER BY `dato` DESC LIMIT 0, $antal"); Du kan også vælge at gå uden om variablen og bare lægge den til strengen: $query = mysql_query("SELECT `indlæg`, FROM `table` WHERE `xxx` = '".$_SESSION["xxx"]."' ORDER BY `dato` DESC LIMIT 0, ".$antal);
Øv. Nu troede jeg endelig lige at jeg havde forstået forskellen på ' og ". Men ja. Der kan man bare se. Men okay, man lærer jo lidt hver dag. Synes ellers at jeg er blevet ret god til at bruge det. Men hvordan kan det være at det virkede med $_SESSION['xxx'] - Når det ikke virkede med $xxx.?
Kigger lige videre på selve koden her senere i aften, eller i morgen når der er lidt mere fritid. Skal lige et smut på arbejde.
Ja, det begynder at hænge lidt mere sammen. Men stadigvæk ikke helt. Men synes det er tæt på. Forstår i hvert fald så meget af det at hele min side virker. ;) Selv om jeg lige havde misforstået det sidste der. hehe.
Men begynder lige og kigge på resten af koden. Så melder jeg tilbage om hvilke fejl er støder på undervejs :)
Sådan. Så har jeg fået følgende til at virke korrekt:
$poster = mysql_query("count(finder totalt antal poster)"); $sideantal = ceil($poster/$antal); // Runder opad
Måtte dog lige tilpasse poster, så den passede til min side. Og ikke bare talte alle de forumtråde som var ialt.
Nu er mit spørgsmål / problem følgende:
Jeg forstår ikke denne her while(). - Mener at du siger while($i >= $sideantal){..};
Hvilket som jeg har forstået betyder. Mens/while 1 er større eller ligmed 2 (i mit tilfælde da jeg i alt lige nu har 23 forumtråde). skal den gøre følgende {...}.
Men eftersom at 2 hverken er mindre eller ligmed 1. Så kommer den jo ikke til at udfører denne handling {...}; eller er det bare mig som har misforstået det?
Sådan. Så har jeg fået næste del til at virke korrekt.
Skal lige siges at jeg synes det er inponerende at du kan huske hvordan man laver sådan en kode efter en par år uden php ;)
Men med hensyn til $start = ($sidetal-1)*$antal; - så må der da været noget forkert?
- For det første så bruger jeg ikke $start noget steder i koden? Og hvis jeg skulle bruge den. skulle det så ikke være nede i:
dinside.php?sidetal=$start - eller hvad? For som det ser ud lige nu, så bliver sidetal=1 når man trykker på "side. 1) og så viser der fra tråd 2-20 og ikke fra 1-20.
Sådan. Så fik jeg det sku til at virke. Troede ellers lige at jeg havde fundet en anden løsning. Men det udgjorde i flere og flere under regnestykker til at få det hele til at gå op. :D så var din løsning sku bedre. Ved ikke hvorfor jeg ikke kunne få den til at virke første gang??
Nårh. Men nu kan min hjemmeside automatisk vise hvor mange sider der er. linke til de forskellige sider, samt vise hvilken side man er på.
- Så mangler der kun ÉN ting til. Nemlig det der 3... 8 9 [10] 11 12 ... 50
Hvordan løser jeg det problem? Kan jeg sinpelhen ikke finde ud af hvordan man skal kunne løse?
Jeg mener også min form for udregning er den mest simple, der kan forekomme til dette ^^ -- nogle gange kan det jo drille, og en lille bitte fejl kan få det hele til at se umuligt ud.
ja. Det må du nok sige. Men eftersom jeg ikke fik din kode til at virke første gang, begyndte jeg selv og lave om på den. Og for at løse det ene problem, opstod der sammen med løsningen et nyt problem. osv. Så efterhånden blev koden ret lang ;) Men så var det jo dejligt at du lige fik mig på sporet igen.
Arhh.. tænker lige et øjeblik. Det er straks lidt mere indviklet. Du får ikke koden lige nu, den kan du få i morgen, hvis ikke selv du kan strikke den sammen.
Dette kræver umiddelbart flere if sætninger: -- det kan være jeg finder på noget bedre i morgen..
Arh okay. Kigger det lige igennem her før jeg går i seng. Samt i morgen. Så kan jeg lige se om jeg kan finde ud af hvad det gør. Samt finde ud af om jeg kan få det til at virke :) Så melder lige tilbage, som altid ;) men sov godt :)
Ej det var dejligt. Den løsning var jeg aldrig kommet frem til hvis det ikke var for fine meget fine eksempler. Det eneste jeg manglede, var bare lige og rette lidt til i dine eksempler. Så fungere det hele perfekt. Der ud over oprettede jeg også to ekstra ting:
$minusto = $sidetal - 2; $plusto = $sidetal + 2;
som du nok kan se.
Men du skal have mange tak for den store hjælp / indsats du har ydet til mit spørgsmål/problem.
Husk også lige og lave et svar, så du kan få dine point.
Det var nemlig de regnestykker jeg tænkte på :) -- jeg kigger lige lidt på din kode, og det var en løsning i samme stil jeg havde i tankerne i går, kunne bare ikke overskue at lave den. God fornøjelse med det! :)
Kan jeg godt forstå. Men fedt at du lige "strikkede" noget sammen til mig alligevel. Gjorde jo at jeg selv kunne ordne det allersidste. så det bliver jo ikke bedre.
Men forstår godt at du ikke orkede det, jeg brugte 3-4 timer på at komme frem til den løsning.
Men jo tak. og endnu engang, tak for hjælpen!
Synes godt om
Ny brugerNybegynder
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.