Gå til innhold

Hvordan lagre output kode til fil?


Anbefalte innlegg

Skrevet

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?

Videoannonse
Annonse
Skrevet

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

Skrevet

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('[{**--||--**}]' => '[&#123;**--||--**}]');

Skrevet

Ser ikke vitsen jeg heller MC2, men jeg skrev ikke skriptet, jeg bare fikset fort på det, oversatte noe til engelsk osv.

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...