Gå til innhold

Gjestebok, finner ikke logfile


Anbefalte innlegg

Først og fremst vil jeg unnskylde for at jeg fant en PHP-kode på internett som jeg kun finner delvis ut av selv. Prøver å lære meg PHP, nå mens jeg holder på med hjemmesiden til mitt bryllup. Mitt problem er da at min kjære henger over meg for å få gjort ferdig gjesteboken. Det jeg legger ut nå er kun random-code som jeg fant på internett.

 

Det er kun to måneder igjen til bryllupet og jeg (eller forloveden min) ville gjerne ha hatt gjesteboka ferdig i går.

 

Så jeg håper jo da at en av dere kan være så snill å hjelpe meg med å finne ut av hva jeg skal gjøre for at logfilen skal fungere.

 

Håper dere kan øse litt av kunnskapen deres over på kunnskapsløse meg.

 

 

<?php

# You must set this correctly to a

# location where you are allowed to

# create a file!

$guestbook = 'guestbook.dat';

# Choose your own password

$adminPassword = 'morte612';

# Hide harmless warning messages that confuse users.

# If you have problems and you don't know why,

# comment this line out for a while to get more

# information from PHP

error_reporting (E_ALL ^ (E_NOTICE | E_WARNING));

 

# No changes required below here

 

$admin = 0;

if ($adminPassword == 'CHANGEME') {

die("You need to change \$adminPassword first.");

}

 

# Undo magic quotes - useless for flat files,

# and inadequate and therefore dangerous for databases. See:

# http://www.boutell.com/newfaq/creating/magicquotes.html

 

function stripslashes_nested($v)

{

if (is_array($v)) {

return array_map('stripslashes_nested', $v);

} else {

return stripslashes($v);

}

}

 

if (get_magic_quotes_gpc()) {

$_GET = stripslashes_nested($_GET);

$_POST = stripslashes_nested($_POST);

}

?>

<html>

<head>

<title>::Gjestebok:: Skriv i den! Ikke vær sjenerte </title>

</head>

<body>

<h1 align="center">Velkommen til vår gjestebok</h1>

<div align="center">

<?php

$password = "";

if ($_POST['password'] == $adminPassword) {

$admin = 1;

$password = $adminPassword;

} else if (strlen($_POST['password'])) {

echo("<h2>Login Failed (Bad Password)</h2>\n");

}

?>

<table border="0" cellpadding="3" cellspacing="3">

<tr><th>Date</th><th>Name</th><th>Email</th><th>Comment</th>

<?php

if ($admin) {

echo "<th>Controls</th>";

}

?>

</tr>

<?php

if ($_POST['submit']) {

$file = fopen($guestbook, "a");

if (!$file) {

die("Can't write to guestbook file");

}

$date = date('F j, Y, g:i a');

$id = rand();

$name = $_POST['name'];

$email = $_POST['email'];

$comment = $_POST['comment'];

$name = clean($name, 40);

$email = clean($email, 40);

$comment = clean($comment, 40);

fwrite($file,

"$date\t$name\t$email\t$comment\t$id\n");

fclose($file);

}

$file = fopen($guestbook, 'r');

$tfile = null;

$delete = 0;

$deleteId = '';

if ($admin && $_POST['delete']) {

$delete = 1;

$deleteId = $_POST['id'];

$tfile = @fopen("$guestbook.tmp", 'w');

if (!$tfile) {

die("Can't create temporary file for delete operation");

}

}

if ($file) {

while (!feof($file)) {

$line = fgets($file);

$line = trim($line);

list ($date, $name, $email, $comment, $id) =

split("\t", $line, 5);

if (!strlen($date)) {

break;

}

if (!strlen($id)) {

// Support my old version

$id = $date;

}

if ($delete) {

if ($id == $deleteId) {

continue;

} else {

fwrite($tfile,

"$date\t$name\t$email\t$comment\t$id\n");

}

}

echo "<tr><td>$date</td><td>$name</td>";

echo "<td>$email</td><td>$comment</td>";

if ($admin) {

echo "<td>";

echo "<form action=\"guestbook.php\" " .

"method=\"POST\">";

passwordField();

hiddenField('id', $id);

echo "<input type=\"submit\" " .

"value=\"Delete\" " .

"name=\"delete\">";

echo "</form>";

echo "</td>";

}

echo "</tr>\n";

}

fclose($file);

if ($delete) {

fclose($tfile);

unlink($guestbook);

rename("$guestbook.tmp", $guestbook);

}

}

function clean($name, $max) {

# Turn tabs and CRs into spaces so they can't

# fake other fields or extra entries

$name = ereg_replace("[[:space:]]", ' ', $name);

# Escape < > and and & so they

# can't mess withour HTML markup

$name = ereg_replace('&', '&', $name);

$name = ereg_replace('<', '<', $name);

$name = ereg_replace('>', '>', $name);

# Don't allow excessively long entries

$name = substr($name, 0, $max);

# Undo PHP's "magic quotes" feature, which has

# inserted a \ in front of any " characters.

# We undo this because we're using a file, not a

# database, so we don't want " escaped. Those

# using databases should do the opposite:

# call addslashes if get_magic_quotes_gpc()

# returns false.

return $name;

}

function passwordField() {

global $admin;

global $password;

if (!$admin) {

return;

}

hiddenField('password', $password);

}

function hiddenField($name, $value) {

echo "<input type=\"hidden\" " .

"name=\"$name\" value=\"$value\">";

}

?>

</table>

<?php

if (!$admin) {

?>

<form action="guestbook.php" method="POST">

<b>Admin Login</b>

<p>

Admin Password: <input type="password" name="password">

<input type="submit" name="login" value="Log In">

</form>

<?php

}

?>

<form action="guestbook.php" method="POST">

<table border="0" cellpadding="5" cellspacing="5">

<tr>

<td colspan="2">Signer i gjesteboka vår!</td>

</tr>

<tr>

<th>Name</th><td><input name="name" maxlength="40"></td>

</tr>

<tr>

<th>Email</th><td><input name="email" maxlength="40"></td>

</tr>

<tr>

<th>Comment</th><td><input name="comment" maxlength="40"></td>

</tr>

<tr>

<th colspan="2">

<input type="submit" name="submit" value="Skriv i gjesteboka">

</th>

</tr>

</table>

<?php

passwordField();

?>

</form>

</div>

</body>

</html>

 

 

 

 

Skulle gjerne ha gitt cred til stedet jeg fant den, men husker ikke hvor det var.

Lenke til kommentar
Videoannonse
Annonse

I denne koden kan jeg ikke se at der er noen "logfil". Du mener kanskje filen der alle gjestebokinnleggene blir lagret? Jeg prøvde ihvertfall samme koden nettopp selv, og alt fungerer fint etter hva jeg kan se. Han du forklare mer hva som er problemet? Er det noen feilmeldinger?

 

Først og fremst må du sørge for at filen din heter guestbook.php, siden denne går igjen gjennom hele koden. Dersom webserveren du bruker er Linux-basert, må du også gi rettigheter til å kunne skrive til guestbook.dat. Dette kan du gjøre i FTP klienten din ved å opprette filen, og så (vanligvis) høyreklikke og velge CHMOD. Så setter du denne til 644.

Lenke til kommentar
I denne koden kan jeg ikke se at der er noen "logfil". Du mener kanskje filen der alle gjestebokinnleggene blir lagret? Jeg prøvde ihvertfall samme koden nettopp selv, og alt fungerer fint etter hva jeg kan se. Han du forklare mer hva som er problemet? Er det noen feilmeldinger?

 

Først og fremst må du sørge for at filen din heter guestbook.php, siden denne går igjen gjennom hele koden. Dersom webserveren du bruker er Linux-basert, må du også gi rettigheter til å kunne skrive til guestbook.dat. Dette kan du gjøre i FTP klienten din ved å opprette filen, og så (vanligvis) høyreklikke og velge CHMOD. Så setter du denne til 644.

 

 

Jeg bruker SmartFTP (som jeg er fornøyd med) og der står det permissions:644

 

User: read, write

group: read

others: read

 

Er det kun user det skal stå write på eller de andre også? Er det "trygt"? :)

 

Edit: Det fungerte når others også fikk write tillatelse. Da endret CHMOD seg til 666 tror jeg.

Edit2: Når jeg nå prøver å slette posten jeg skrev får jeg beskjed om at den "can't create temporary file for delete operation...hjelp??

Edit3: Prøvd de fleste kombinasjoner på mappenivå. Men da fungerer ikke passordfunksjonen tilfredstillende, dvs. alle kan slette posten :)

Endret av netrom87
Lenke til kommentar

777 betyr at alle på serveren har lese/skrive tilgang til filen din.

første tallet sier hvilken tilgang eier har.

andre tallet sier hvilken tilgang brukere av samme gruppe har.

tredje tallet sier hvilken tilgang andre brukere har.

 

7 betyr at den aktuelle bruker har full tilgang (lese = 4, skrive = 2, eksekvere = 1, 4+2+1=7)

 

eksekveringstilgang har ingenting å si så lenge ikke filen er eksekverbar.

så i dette tilfellet er 666 like fungerende som 777.

 

har du tilgang til å endre gruppe eller eier på filen bør du endre det til samme som web-serveren.

 

har du ikke tilgang til å endre bruker/gruppe bør du generere filen med php slik at web-serveren blir eier av filen. da slipper du å gi full tilgang til alle brukerene av serveren.

 

generere en fil i php er ganske enkelt:

 

file_put_contents('filnavn', '');

 

gjør du dette kan du endre rettighetene til 600 dersom webserveren eier filen. 660 dersom webserver og filen har samme gruppe. ønsker du at andre brukere på web serveren skal kunne lese filen bytter du ut 0 med 4. (praktisk hvis du ikke er i samme gruppe som webserveren, og den ikke kjører under din brukertilgang)

 

når filen er generert med php er det ikke sikkert du kan endre rettighetene fra ftp. men du kan kjøre chmod kommandoen også via php.

 

chmod('filnavn', '600');

Lenke til kommentar

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...