Sjark Skrevet 5. februar 2006 Del Skrevet 5. februar 2006 Hey, jeg har laget en gjestebok ved hjelp av en guide her på forumet, den bruker flatfil. Det jeg egentlig lurer på er hvordan kan jeg få neste 10/forige 10 linker? Koden til GB.php: <h2>Gnomen's Gjestebok </h2> <p> </p> <form method="post" action="gb_act.php"> <p><label for="name">Navn</label><br /> <input type="text" name="name" id="name" /> </p> <p><label for="email">E-post</label><br /> <input type="text" name="email" id="email" /> </p> <p><label for="message">Melding</label><br /> <textarea name="message" id="message" style="width: 400px; height: 150px;"></textarea> </p> <p> <input type="submit" name="submit" value="Lagre innlegget" /> </p> </form> Koden til GB_Act.php: <?php define ('ENTRIES_DB', 'entries.db.php'); $name = strip_tags(htmlspecialchars(trim($_POST['name']))); $email = strip_tags(htmlspecialchars(trim($_POST['email']))); $message = strip_tags(htmlspecialchars(trim($_POST['message']))); $MAX_INPUT_NAME = 16; $MAX_INPUT_MESSAGE = 200; // Hvis Magic Quotes er på så vil det automatisk settes på \, slash altså // på alle appostrofer. Koden under vil sørge for at det ikke skjer. if(get_magic_quotes_gpc) { $name = stripslashes($name); $email = stripslashes($email); $message = stripslashes($message); } // Fikser slik at det ikke blir noen linjeskift i fila. $replace = array("\r\n" => '<br />', "\t" => ''); $name = strtr($name, $replace); $email = strtr($email, $replace); $message = strtr($message, $replace); // Fjerner [{**--||--**}] fra alle felter hvis noen har prøvd det. Det kan være svært skadelig for // gjesteboka hvis noen gjør det. $replace = array('[{**--||--**}]' => ''); $name = strtr($name, $replace); $email = strtr($email, $replace); $message = strtr($message, $replace); // Sjekker om fila er skrivbar. Er den ikke det så blir det feilmelding. if (!is_writable(ENTRIES_DB)) { echo '<h2>Feil!</h2><p>Vi kan ikke skrive til entries.db.php.</p>'; } // Sjekker om navn og en melding er fylt ut. Hvis ikke blir det feilmelding. elseif (empty($name) || empty($message)) { echo '<h2>Feil!</h2><p>Navn og en melding må fylles inn!</p>'; } // Sjekker om navnet er for langt. elseif (strlen($name) > $MAX_INPUT_NAME) { $rest = strlen($name)-$MAX_INPUT_NAME; echo '<h2>Feil!</h2><p>Navnet er for langt. Maks. '.$MAX_INPUT_NAME.' tegn. Du må fjerne '.$rest.' tegn.</p>'; } // Sjekker om meldingen er for stor. elseif (strlen($message) > $MAX_INPUT_MESSAGE) { $rest = strlen($message)-$MAX_INPUT_MESSAGE; echo '<h2>Feil!</h2><p>Meldingen er for langt. Maks. '.$MAX_INPUT_MESSAGE.' tegn. Du må fjerne '.$rest.' tegn.</p>'; } // Hvis det er skrevet en e-post og den ikke er systematisk rett - feilmelding! elseif (!empty($email) && !eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$", $email)) { echo '<h2>Feil!</h2><p>E-posten er ikke rett, den er systematisk feil.</p>'; exit(); } // Det virker som om det meste gikk bra, da begynner vi å titte på å lagre meldinga. else { // Henter IP-en til vedkommende. $ip = $_SERVER['REMOTE_ADDR']; // Får PHP til å velge ut noen tall mellom 1000 og 9999. $id = (1000, 9999); // time() er en lur funksjon. Utifra den kan vi skrive forskjellige datoer. $date = time(); // Samler alt sammen i ett. $content = $id . '[{**--||--**}]' . $name . '[{**--||--**}]' . $email . '[{**--||--**}]' . $message . '[{**--||--**}]' . $ip . '[{**--||--**}]' . $date . '[{**--||--**}]' . "\n"; // Åpner filen if (!$fp = fopen(ENTRIES_DB, 'a')) { echo '<h2>Feil!</h2><p>Kan ikke åpne filen.</p>'; exit(); } // Skriver innholdet. if (fwrite($fp, $content) === FALSE) { echo '<h2>Feil!</h2><p>Kan ikke skrive til filen.</p>'; exit(); } // Beskjed om at det ble velykket. header ("Location: index.php?side=gb_read"); // Lukker filen. fclose($fp); } ?> Koden til GB_read.php: <?php define ('ENTRIES_DB', 'entries.db.php'); // Velger hvordan vi vil ha dato formen. define ('DATE_FORMAT', 'd.m.Y'); // Gjør hele fila om til en matrise, hvor da hvert element er lik // ei linje. I tillegg reverserer vi arrayen for å få det nyeste // innlegget først. $entries_array = array_reverse(file(ENTRIES_DB)); echo '<h2>Velkommen til Gnomes Gjestebok</h2>'; echo '<p><a href="index.php?side=gb">Skriv innlegg</a></p>'; foreach ($entries_array AS $lines) { if (strpos($lines, "<?php") == FALSE) { // Hver linje er en matrise, hvor elementet er splittet med [{**--||--**}] $entry = explode('[{**--||--**}]', $lines); // Lager enklere variabel navn. $name = $entry[1]; $email = $entry[2]; $message = '<p>'.$entry[3].'</p>'; $date = $entry[5]; // Lager valid XHTML. $replace = array('<br /><br />' => '</p><p>'); $message = strtr($message, $replace); // Lager navnet om til en lenk hvis det er en e-post som er skrevet. if (!empty($email)) { $name = '<a href="mailto:'.$email.'">'.$name.'</a>'; } // Skriver ut hele innlegget: ?> <body background="../images/sweet2_02.jpg" <table width='400' border='0' cellspacing='0' cellpadding='0'> <tr background='../images/sweet2_02.jpg'> <td width='51'><span class='style1'><B>Navn:</b></span></td> <td width='349'><p><strong><? echo '<p><strong>'.$name.' - '.date(DATE_FORMAT, $date).'</strong></p>'; ?> </strong></p></td> </tr> <tr background='../images/sweet2_02.jpg'> <td colspan='2' class='style1'><b>Innhold:</b></td> </tr> <tr background='../images/sweet2_02.jpg'> <td colspan='2'><? echo $message; ?></td> </tr> </table> <? echo '<hr />'; } } ?> Koden til entries.db.php: <?php die; ?> Alt fungerer som det skal osv, men jeg vet ikke hvordan jeg kan lage neste/tilbake linker, tenkte først på og bruke ID, men IDen er random så da blir det feil. Kan noen hjelpe? Lenke til kommentar
Albino Skrevet 5. februar 2006 Del Skrevet 5. februar 2006 Tja... Kan du ikke lage en teller som inkrementeres etter hvert innlegg som blir skrevet ut? Hvis $teller == 10 { hopp ut av løkke; } Hvis du skal ha side nr. 3 må du hoppe over (3-1) * 10 innlegg. Da lager du en hopper-over-teller, som starter på 1. Den inkrementeres for hvert innlegg. Hvis $hopp_over_teller < $hopp_over_antall { ikke skriv ut; $hopp_over_taller++; } Hvis $hopp_over_teller >= $hopp_over_antall { skriv ut innlegg; } Jaja. Dette ble vel forståelig tenker jeg... 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å