CruellaDeVille Skrevet 14. mars 2006 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
trondes Skrevet 14. mars 2006 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 ?
kakkle Skrevet 14. mars 2006 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
CruellaDeVille Skrevet 14. mars 2006 Forfatter 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
trondes Skrevet 14. mars 2006 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
CruellaDeVille Skrevet 14. mars 2006 Forfatter 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)
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å