MrBjoern Skrevet 3. august 2006 Skrevet 3. august 2006 Sitter her med en enkel gjestebok til siden min og lurte på hvordan jeg får lagret det folk skriver i gjesteboka til en fil. Trenger ikke noe mer avansert enn en txt fil eller noe. noen som kan svare meg på dette?
Sjark Skrevet 3. august 2006 Skrevet 3. august 2006 Kan ikke hjelpe deg så veldig mye uten og få se codene dine, men her er en fin guide til Gjestebok med flatfil: skrevet av Beethoven
MrBjoern Skrevet 3. august 2006 Forfatter Skrevet 3. august 2006 Har lagt ved filene nå. gjestebok.php handle.php
Sjark Skrevet 3. august 2006 Skrevet 3. august 2006 først lag en fil som du kalle "entries.db.php" som inneholder følgende: <?php die (’’); ?> Så åpner du handle.php og fjerner alt som er i den, og legger til <?php // Definerer en konstant. Det er det samme som en variabel bare at vi kan // ikke endre verdien. define ('ENTRIES_DB', 'entries.db.php'); // Setter maksimum hvor mange tegn navn og melding kan ha. define ('MAX_INPUT_NAME', 75); define ('MAX_INPUT_MESSAGE', 5000); // Fjerner all form for HTML og whitespaces. $name = strip_tags(htmlspecialchars(trim($_POST['name']))); $email = strip_tags(htmlspecialchars(trim($_POST['email']))); $message = strip_tags(htmlspecialchars(trim($_POST['comment']))); // 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>We cant write to 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>Name and Comment has to be filt</p>'; } // Sjekker om navnet er for langt. elseif (strlen($name) > MAX_INPUT_NAME) { $rest = strlen($name)-MAX_INPUT_NAME; echo '<h2>Feil!</h2><p>Name is to long, max:. '.MAX_INPUT_NAME.' tegn. You have to remove '.$rest.' symbols.</p>'; } // Sjekker om meldingen er for stor. elseif (strlen($message) > MAX_INPUT_MESSAGE) { $rest = strlen($message)-MAX_INPUT_MESSAGE; echo '<p>Comment is to long. Max. '.MAX_INPUT_MESSAGE.' tegn. You have to remove '.$rest.' symbols.</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 '<p>Email is wrong</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 = rand(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>Cant open the file.</p>'; exit(); } // Skriver innholdet. if (fwrite($fp, $content) === FALSE) { echo '<h2>Feil!</h2><p>Cant write to the file.</p>'; exit(); } // Beskjed om at det ble velykket. echo '<h2>Sukksess!</h2><p>Your comment is saved, you can read it<a href="gb_read.php">her</a></p>'; // Lukker filen. fclose($fp); } ?> så lager du en ny fil du kaller gb_read.php som inneholder: <?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>Guestbook comments</h2>'; echo '<p><a href="gjestebok.php">Write comment</a></p>'; foreach ($entries_array AS $lines) { // Sørger for å ikke ta med <?php die ('') etc. 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: echo '<p><strong>'.$name.' - '.date(DATE_FORMAT, $date).'</strong></p>'; echo $message; echo '<hr />'; } } ?> Tror det skal funke, all Creeeds til Beethoven Husk og chmod entries.db.php til 777
MrBjoern Skrevet 3. august 2006 Forfatter Skrevet 3. august 2006 får det ikke helt til jeg, når jeg skriver inn navn, mail og komentar får jeg bare beskjed om at jeg må fylle inn navn og kommentar.
MC2 Skrevet 3. august 2006 Skrevet 3. august 2006 Har bare skummet gjennom koden til Lasso Hva er poenget med disse? $name = strip_tags(htmlspecialchars(trim($_POST['name']))); $email = strip_tags(htmlspecialchars(trim($_POST['email']))); $message = strip_tags(htmlspecialchars(trim($_POST['comment']))); Det er vel ingen tags å strippe etter at du har fjernet html med "htmlspecialchars"? elseif (!empty($email) && !eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$", $email)) { Er vel unødvendig å sjekke om $email er tomt når regexen likevel vil gi false når den er tom? $replace = array('[{**--||--**}]' => ''); kunne vært gjort om til: $replace = array('[{**--||--**}]' => '[{**--||--**}]');
Sjark Skrevet 3. august 2006 Skrevet 3. august 2006 Ser ikke vitsen jeg heller MC2, men jeg skrev ikke skriptet, jeg bare fikset fort på det, oversatte noe til engelsk osv.
MrBjoern Skrevet 3. august 2006 Forfatter Skrevet 3. august 2006 Jaja, scripte funker ikke uten de kodene da
Sjark Skrevet 4. august 2006 Skrevet 4. august 2006 Her, bare last opp filene jeg har vedlagt til hjemmsiden din, chmod entries.db.php med "0777" så går du på gb.php for og skrive innlegg, og gb_read.php for å lese. filer: "http://home.no.net/sjark89/gb/gjestebok.rar"
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å