netrom87 Skrevet 22. juli 2008 Del Skrevet 22. juli 2008 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
Lokaltog Skrevet 22. juli 2008 Del Skrevet 22. juli 2008 (endret) Har du prøvd å opprette filen "guestbook.dat" i samme mappe som gjestebokscriptet ligger i? Edit: Hvis scriptet ligger på en unix/linux-server, må du også sørge for at scriptet ditt har skrivetilgang til denne filen. Endret 22. juli 2008 av Lokaltog Lenke til kommentar
LNaitsirhC Skrevet 22. juli 2008 Del Skrevet 22. juli 2008 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
netrom87 Skrevet 22. juli 2008 Forfatter Del Skrevet 22. juli 2008 (endret) 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 22. juli 2008 av netrom87 Lenke til kommentar
LNaitsirhC Skrevet 22. juli 2008 Del Skrevet 22. juli 2008 Hva om du setter rettighetene 777 på mappen filene dine er i? Lenke til kommentar
Ernie Skrevet 22. juli 2008 Del Skrevet 22. juli 2008 (endret) Red.: Leste feil. Enig, men 770 burde holde. Endret 22. juli 2008 av Ernie Lenke til kommentar
hallegyn Skrevet 22. juli 2008 Del Skrevet 22. juli 2008 Viss du kan sjå det humoristiske i det: I min familie lagar kona webside sjølv. Riktignok på piczo, og riktignok sjølv om eg hadde advart mot akkurat piczo, men webside med gjestebok og foto, det ordna seg i alle fall. Lenke til kommentar
netrom87 Skrevet 23. juli 2008 Forfatter Del Skrevet 23. juli 2008 Med 777 så fungerte det. Men med 770 fikk jeg denne meldingen: " Error 403: Forbidden" Tusen takk for all hjelp Lenke til kommentar
grimjoey Skrevet 23. juli 2008 Del Skrevet 23. juli 2008 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
netrom87 Skrevet 23. juli 2008 Forfatter Del Skrevet 23. juli 2008 Takk for tipset. Skal teste det ut i løpet av morgendagen 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å