CruellaDeVille Skrevet 14. mars 2006 Del Skrevet 14. mars 2006 (endret) Jeg forsøker å lage en flat-file gjestebok med paginering. Dette er min kode <?php // Dagens dato $today = date('d/m-Y'); // filnavn $filename = 'myguestbook.txt'; // mode $mode = 'a+'; // Bruker har skrevet et innlegg if(isset($_POST['submit'])){ // variabler sjekkes $name = empty($_POST['name'])? "" : strip_tags($_POST['name']); $email = empty($_POST['email'])? "" : strip_tags($_POST['email']); $message = empty($_POST['message'])? "" : strip_tags($_POST['message']); // feilmelding skrives ut if(empty($name) || empty($email) || empty($message)){ header( 'refresh:2; url=guestbook.php' ); print ("Du må fylle ut alle feltene"); } // innhold til skriving til fil klargjøres $content = "Navn: $name | Dato: $today | Epost: $email | Melding: $message \n"; // filstrøm åpnes $fp = fopen($filename, $mode) or die("IO Error!"); // innhold skrives fwrite($fp, $content); // lukker strømmen fclose($fp); // redirigerer tilbake til utgangspunktet header( 'refresh:2; url=guestbook.php' ); print ("Meldingen din er lagt til!"); }else{ // skjema, script og stylesheet print <<<HTML <style type="text/css"> body{ background-color:#fff; color:#22dd33; } input{ width:100%; } </style> <script type="text/javascript"> <!-- function checkInput(){ var form = document.forms[0]; for(i=0; i<form.elements.length; i++){ if((form.elements[i].type=="text" || form.elements[i].type=="textarea") && !form.elements[i].value){ alert("Vennligst fyll ut "+ form.elements[i].name); form.elements[i].focus(); return false; } } return true; } --> </script> <h4>Welcome to my guestbook</h4> <form method="post" action="" onsubmit="return checkInput()";> <table> <tr> <td>Navn:</td><td><input type="text" name="name" value="$name"></td> </tr> <tr> <td>Dato:</td><td>$today</td> </tr> <tr> <td>Email:</td><td><input type="text" name="email" value="$email"></td> </tr> <tr> <td colspan="2"><textarea name="message" rows="20" cols="30" value="$message"></textarea></td> </tr> <tr> <td> </td><td><input type="submit" name="submit" value="Sign my guestbook!"></td> </tr> </table> </form> HTML; $antall=0; // hvis filen finnes er det entries i gjesteboken - åpne for lesing if(file_exists($filename)){ $fp= fopen($filename, 'r') or die("IO Error"); while(!feof($fp)){ // innhold plukkes ut og puttes i en array $entries[] = explode("|", fgets($fp)); // teller innlegg $antall++; } // skriver ut antall entries i gjesteboka print $antall . " meldinger i gjesteboka"; // Pagineringsscript - forsøksvis $limit=0; $prPage=4; function writeEntries(&$prPage, &$antall, &$entries, &$limit){ $noPages = ceil($antall/$prPage); // skriver ut entries for($i=$limit; $i<$prPage+$limit; $i++){ for($j=0; $j<count($entries[$i]); $j++){ print $i . " " . $entries[$i][$j] . "<br />"; } } // limit får ny verdi $limit += $prPage; // debugging - skriver ut skille mellom hver løkke print("<hr />"); // Her skal det inn neste>> siste>> if($limit <$antall) return writeEntries($prPage, $antall, $entries, $limit); } // funksjonskall writeEntries($prPage, $antall, $entries, $limit); }else{ // filen finnes ikke, antall entries = 0 print $antall . " meldinger i gjesteboka"; } } ?> Jeg klarer ikke helt å tenke hvordan paginering skal være her. Jeg skal hente ut $entries 5-9 neste gang og 10-14 tredje gang og 15 +4 neste gang der igjen. Noen smarte hoder som vil jobbe sammen med meg på denne? Edit: lagt til lenke til mer lesbar kildekode: http://nibbler.no/files/guestbook.php Endret 14. mars 2006 av CruellaDeVille Lenke til kommentar
trondes Skrevet 14. mars 2006 Del Skrevet 14. mars 2006 Jeg forsøker å lage en flat-file gjestebok med paginering. Dette er min kode[ Jeg klarer ikke helt å tenke hvordan paginering skal være her. Jeg skal hente ut $entries 5-9 neste gang og 10-14 tredje gang og 15 +4 neste gang der igjen. Noen smarte hoder som vil jobbe sammen med meg på denne? Edit: lagt til lenke til mer lesbar kildekode: http://nibbler.no/files/guestbook.php 5750968[/snapback] Er det ikke bare å sende page=2 feks med url for å hente ut blir det dag page*antall_pr_side eller tenker jeg feil ? Lenke til kommentar
kakkle Skrevet 14. mars 2006 Del Skrevet 14. mars 2006 Du må vel, som trondes sier, la $limit være bestemt fra url. Enten ved at du oppgir hvilken side i urlen, eller ved at du oppgir starten ($limit) Også må du fjerne $limit=0, da denne setter $limit til 0 uansett, og da vil jo alltid første side vises, eller ? $limit = isset($_GET["limit"])?$_GET["limit"]:0; i Funksjonen writeentries, så trenger du heller ikke gi $limit ny verdi Linkene setter du slik, f.eks nesteside: $nestestart = $limit+$prPage; echo "<a href='?limit=$nestestart'>neste side >>></a>"; btw: Trenger ikke bruke "a+" som mode, vel ? Du skriver vel bare til filen i det tilfellet ? skal holde med "a" da... Jeg for min del ville brukt file() for å lese filen istedetfor fopen, da jeg er mer komfortabel med denne : $limit = isset($_GET["limit"])?$_GET["limit"]:0; $guestfile = file("guest.txt") // F.eks $ant_innlegg = count ($guestfile); $teller = $limit; // Her starter den på den linjen som er angitt i urlen. while ($teller < $ant_innlegg) { $innlegg[] = explode("|", $guestfile[$teller]); } // For debug: print "<pre>"; print_r($innlegg); print "</pre>"; Men det er jo forsåvidt det samme du gjør, da... /k Lenke til kommentar
CruellaDeVille Skrevet 14. mars 2006 Forfatter Del Skrevet 14. mars 2006 (endret) jeg har endret litt på koden, paginering fremover fungerer (delvis- limit bare fortsetter å telle oppover, selv når maks antall innlegg er vist) Men paginering bakover har en logisk brist... noen som kan hjelpe her? Lenke: http://nibbler.no/files/guestbook.php Endret 14. mars 2006 av CruellaDeVille Lenke til kommentar
trondes Skrevet 14. mars 2006 Del Skrevet 14. mars 2006 (endret) jeg har endret litt på koden, paginering fremover fungerer (delvis- limit bare fortsetter å telle oppover, selv når maks antall innlegg er vist) Men paginering bakover har en logisk brist... noen som kan hjelpe her? Lenke: http://nibbler.no/files/guestbook.php 5752629[/snapback] function writeEntries(&$prPage, &$antall, &$entries, &$limit){ $noPages = ceil($antall/$prPage); // skriver ut entries for($i=$limit; $i<$prPage+$limit; $i++){ for($j=0; $j<count($entries[$i]); $j++){ print $entries[$i][$j] . "<br />"; } print("<hr style=\"width:95%\" />"); } if($limit < $antall){ $limit +=$prPage; }else{ $limit +=0; } $limit_back = $limit-$prPage*2; if($limit_back < 0) $limit_back = 0; print("<form method=\"get\" action=\"\"> <input type=\"hidden\" name=\"limit\">"); if($limit_back <= 0 AND $limit == $prPage) print "«Forrige "; else print "<a href=\"?limit=". ($limit_back). "\">«Forrige</a> "; if($limit > $antall) print "Neste»"; else print "<a href=\"?limit=$limit\">Neste»</a>"; print "</form>\n"; } Slik ville jeg ha løst det... EDIT: det største feilen din var at når du sende en limit med $_GET, feks 8. Så printet du ut det som skulle printes ut, så la du til $prPage til $limit.. når du skulle bla tilbake så tok du $limit - $prPage ... dvs samme som du igrunn så på nå.. løser dette problemet med å ta $limit - ( $prPage*2) EDIT2: Forandret en liten feil i koden. Endret 14. mars 2006 av trondes Lenke til kommentar
CruellaDeVille Skrevet 14. mars 2006 Forfatter Del Skrevet 14. mars 2006 jeg har endret litt på koden, paginering fremover fungerer (delvis- limit bare fortsetter å telle oppover, selv når maks antall innlegg er vist) Men paginering bakover har en logisk brist... noen som kan hjelpe her? Lenke: http://nibbler.no/files/guestbook.php 5752629[/snapback] function writeEntries(&$prPage, &$antall, &$entries, &$limit){ $noPages = ceil($antall/$prPage); // skriver ut entries for($i=$limit; $i<$prPage+$limit; $i++){ for($j=0; $j<count($entries[$i]); $j++){ print $entries[$i][$j] . "<br />"; } print("<hr style=\"width:95%\" />"); } if($limit < $antall){ $limit +=$prPage; }else{ $limit +=0; } $limit_back = $limit-$prPage*2; if($limit_back < 0) $limit_back = 0; print("<form method=\"get\" action=\"\"> <input type=\"hidden\" name=\"limit\">"); if($limit_back <= 0 AND $limit == $prPage) print "«Forrige "; else print "<a href=\"?limit=". ($limit_back). "\">«Forrige</a> "; if($limit > $antall) print "Neste»"; else print "<a href=\"?limit=$limit\">Neste»</a>"; print "</form>\n"; } Slik ville jeg ha løst det... EDIT: det største feilen din var at når du sende en limit med $_GET, feks 8. Så printet du ut det som skulle printes ut, så la du til $prPage til $limit.. når du skulle bla tilbake så tok du $limit - $prPage ... dvs samme som du igrunn så på nå.. løser dette problemet med å ta $limit - ( $prPage*2) EDIT2: Forandret en liten feil i koden. 5753903[/snapback] Hjertelig hjertelig! Da kan jeg endelig sove i natt. Var egentlig et script for en i html-forumet som ønsket et popup-script (derfor hr med width 95% - når viduet er 300px bredt ser det okay ut) Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå