05. marts 2016 - 20:33Der er
10 kommentarer og 1 løsning
Hen kommentarer til blogindlæg
Jeg er i gang med at lave et forum/blog til en hjemmeside, og har et problem i forbindelse med at hente kommentarer til bloggens indlæg.
Blogindlæggene ligger i tabellen "blog" og kommentarer til blogindlæggene i tabellen "kommentarer"
Mit script, som viser indholdet i bloggen: if($stmt=$mysqli->prepare("SELECT * FROM `blog`")) { $stmt->execute(); $stmt->bind_result($opslagsnr, $id, $overskrift, $kategori, $tekst, $billede); while($stmt->fetch()) { ?> <div> Blogindlæggene udskrives</div>
Jeg burger dette til visText-funktionen: <script type="text/javascript"> function visText(objekt){ if (document.getElementById(objekt).style.display=="block") { document.getElementById(objekt).style.display="none"} else { document.getElementById(objekt).style.display="block" }} </script> I tabellen "kommentarer har jeg følgende kolonner: kommentar_nr, opslagsnr (refererer til opslagsnr i 'blog'), navn, kommentar, tid og id.
Hvordan sammensætter jeg en søgestreng, som kan hente kommentarer til de respektive blogindlæg - eller begge dele på en gang i denne opsætning?
Skal det forstås sådan, at du vil udskrive alle blogindlæggene på samme side efter hinanden, med alle kommentarer udskrevet under hver?
Det er lidt utraditionelt, men i så fald henter du jo bare alle kommentarerne med "select * from kommentarer" og bruger PHP til at udskrive dem de rigtige steder.
Det mere normale at gøre er jo at lade brugeren klikke sig ind på et enkelt blogindlæg, og først der hente kommentarerne for det indlæg.
De enkelte blogindlæg vises (pager kommer på), og der kan klikkes på kommentarlink, hvor kommentarer åbnes for det enkelte blogindlæg. Ses måske lidt her: http://riefart.dk/kunder/puck/blog/forum2.php
Og det er lige netop det med at få dem skrevet ud de rigtige steder, der er problemet, og til hvilket jeg søger hjælp.
Så der skal klikkes for at kommentarerne kommer frem. Så ville det normale være som jeg siger, at først hente dem ved klik. I dette tilfælde via AJAX i stedet for sideskift, men ikke den store forskel.
Ved at hente alle kommentarer samlet, kan det blive et temmelig tungt kald med mange indlæg og kommentarer. For ikke at tale om, at det er lidt mere besværligt.
Hvis du stadig vil hente dem alle samlet, så er den letteste måde at indlæse dem alle først.
$comments = []; $result = $mysqli->query("select * from kommentarer"); while ($row = $result->fetch_assoc()) $comments[ $row['opslagsnr'] ] = $row;
På denne måde har du alle kommentarerne indlæst og opdelt per opslagsnummer, og du kan udskrive dem efter hvert blogindlæg, ved at bruge f.eks.
foreach ($comments[$opslagsnr] as $comment) echo $comment['text'];
Ulempen ved denne metode er, at du indlæser det hele i hukommelse og beholder det der under eksekveringen af siden, hvilket bruger noget mere RAM. Det kan godt laves om at benytte streaming i stedet, men det er mere besværligt - og hvis du støder ind i nogen som helst RAM-problemer her, så vil jeg igen sige, at det er den forkerte måde at gøre det på at indlæse dem alle samtidig.
Og stadig har det ikke noget med en syntaksfejl eller lignende at gøre. Det kan være et uendeligt loop eller lignende, men det er der ikke i det jeg skrev, så jeg spørger igen: kan du vise hvad du har?
Jeg havde allerhelst ønsket at få indlæst kommentarene til de enkelte blogindlæg umiddelbart under disse, med "fold-ud"-funktion. I stedet valgte jeg løsningen; at medsende en variabel(indlægs-id) i url'en til en ny side hvor det aktuelle indlæg med kommentarer vises. Ganske lavpraktisk, men vist også den mest almindelige.
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.