29. august 2004 - 18:34Der er
18 kommentarer og 1 løsning
Comment system med svar
Hej.
Jeg har lavet et nyhedssystem, som også har en comment del - den comment del har jeg nu bygget lidt videre på ved at gøre 'svar' mulige. Hvis man svarer på et indlæg dukker ens indlæg op under det man svarede på - det har jeg fået til at virke, sådan da.
Problemet: som det er lavet nu kan den kun håndtere et 'trin' svar. Altså, person x svarer på person y's indlæg, det bliver vist fint - hvis så der kommer en og svarer på person x's indlæg bliver det ikke vist. Det er bygget op således: jeg har en while sætning der spytter alle indlæg (som ikke er et svar) ud og inde i den en anden while sætning som skriver de svar der er til det pågældende indlæg - der er problemet, den tager kun svar til indlæg som bare er skrevet (som altså ikke er svar). Hvordan får jeg lavet en kode som forsætter med at spytte ud og ikke stopper efter første trin? Skal jeg have fat i en for sætning?
En løsning kunne naturligvis være at lave 1000 while sætninger magen til den der er lavet - men det holder jo ikke. :P
Hvis der er brug for noget kode poster jeg det med glæde - ser bare ikke umildbart grund til det, da jeg egentlig bare skal bruge måden det skal laves på (tror jeg i hvert fald ;)).
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
'svar' bliver bestemt af 'pri'. Når man svarer på et indlæg, bliver pri tallet sat ind i den celle - samtidig med indlægget naturligvis får 'sit eget' 'pri'-tal.
function visSvar($tal,$svarId='') { $query = mysql_query("SELECT * FROM news_comments WHERE tal=$tal AND svar=''"); while($row = mysql_fetch_array($query)) { // udskriv indlægget
// og skriv svar til pågældende indlæg visSvar($tal,$row['pri']); } }
Hm, kan ikke umildbart se hvordan det skulle komme til at virke. Hvor skal koden der viser indlægget ligge og hvor skal koden der viser svaret ligge? De kan vel ikke ligge i samme while sætning.. ?
Forresten.. udover de skal stå under hinanden, skal den også rykkes ind.. havde forestillet mig at gøre det ved at lave en tom <td> med et stigende antal pixels (alt efter hvor mange 'trin' man er inde').
Eftersom jeg er så krævende har jeg hævet pointtallet - kom så med nogle gode bud. ;)
Et indlæg er vel det samme som et svar. Forskellen er vel, at et svar refererer til et indlæg (eller et svar).
Derfor, i while(), viser du indlægget, og kalder visSvar funktionen (som så viser alle svar til indlægget - og evt undersvar.).. Men hvis du ikke har brugt rekursion før, så kan det godt være svært at overskue.
Du kan nok godt lave det med en for-sætning. For minder lidt om while..
while( en betingelse ) { kodeblok. }
.. som så bliver udført indtil betingelsen er falsk.
"for" minder lidt om den. Men den udmærker sig ved at man kan bruge den til at tælle.. fx
for($i=0;$i<10;$i++) { print "$i<br>"; }
Den vil skrive tallene fra 0 til 9.
$i=0 - delen bliver altid udført første gang. Det bruger man typisk til at initierer variabler, som eksemplet viser.
$i<10; er en betingelse, som bestemmer om kroppen af for() skal udføres. Hvis det returnerer sandt, forsætter den, hvis ikke stopper den.
Den sidste del, $i++, bliver udført efter hver interation. Så man kan tælle op eller ned.. eller hvad man nu ønsker.
Sætningen svarer til denne while:
$i=0 while($i<10) { print "$i<br>"; $i++ }
Så for kan ikke mere end while - men indimellem er det nemmere :)
Det var så lidt.. Som du kan se, er reskursive funktioner ret elegante :-) Man kan godt gøre det med løkker, men jeg foretrækker den rekursive løsning, da den er nemmere at læse..
Men held og lykke med projektet :)
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.