Avatar billede dragonbook Nybegynder
21. januar 2006 - 17:41 Der er 14 kommentarer og
1 løsning

Skriv html til fil

Jeg er ved at lave en lille kode der gør det muligt for mig at ændre på mine sider via browseren. Jeg hiver den enkelte sides koder ind i et textarea og skriver indholdet til filen igen med følgende kode:

<?php
$gemt_kode = $_POST['koder'];
$myFile = "start.php";
$fh = fopen($myFile, 'w') or die("can't open file");
fwrite($fh, $gemt_kode);
?>

Det fungerer egentligt også, men når jeg så går ind på start.php ser den mærkelig ud. Ser jeg i kilde koden kan jeg se at alle " tegn er skiftet ud med \" tegn.

Har læst lidt i php manualen om at benytte f.eks. wb eller wt i stedet for w men der sker ingen ændring.

Så hvordan for jeg gemt filen uden den laver om i mine koder ?
Avatar billede jakobdo Ekspert
21. januar 2006 - 17:55 #1
Prøv at ret:
fwrite($fh, $gemt_kode);
til:
fwrite($fh, stripslashes($gemt_kode));
og god kode, er fclose($fh);
efter fwrite();
Avatar billede dragonbook Nybegynder
21. januar 2006 - 18:01 #2
TAK det var lige præcist funktionen stripslashes() jeg manglede, har lige læst lidt om funktionen, så kan jeg måske bruge den en anden gang. Husker lige fclose() i fremtiden.

Smid et svar så er der point :-)
Avatar billede dragonbook Nybegynder
21. januar 2006 - 19:04 #3
Nej hov nu virker php scriptene på siden ikke, hvilket formentligt skyldes at der nu bliver lavet en ekstra linie afstand mellem hver linie. f.eks.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html>

<head>

<SCRIPT LANGUAGE="JavaScript">

i stedet for

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<SCRIPT LANGUAGE="JavaScript">

hvordan kan jeg afhjælpe det ?
Avatar billede johan.o Nybegynder
21. januar 2006 - 19:30 #4
Jeg tror problemet kan løses på følgende måde :

I dit <form> tag hvor du sender din form tilføjer du onsubmit="this.koder.value=escape(this.koder.value);"

og i dit php script :

$gemt_kode = urldecode($_POST['koder']);

Men nu råber min familie at jeg skal komme og spise så jeg vender tilbage for at se resultatet senere :)

Mvh. Johan
Avatar billede dragonbook Nybegynder
21. januar 2006 - 19:58 #5
Det ser ud til at løse problemet med den ekstra linie afstand mellem linjerne men nu har jeg et andet problem, for når jeg læser start.php ind i mit textarea kan jeg se der mangler nogle tegn f.eks. + &nbsp; &oslash; osv.

scriptet ser således ud:

<?PHP
copy("start.php", "start.bak");
$myFile = "start.php";
$fh = fopen($myFile, 'r');
$theData = fread($fh, filesize($myFile));
fclose($fh);
echo "<form action='gem.php' method='post' onsubmit='this.koder.value=escape(this.koder.value)'><textarea wrap='off' rows='20' cols='100' name='koder'>";
echo $theData;
echo "</textarea><br><input type='submit' value='Gem'><input type='reset' name='Reset' value='reset'></form>";
?>

Kan man ikke hente filen ind udender bliver redigeret i den overhovedet?
Avatar billede johan.o Nybegynder
21. januar 2006 - 21:03 #6
Hm, hvad hvis du nu skriver :

$gemt_kode=htmlentities(urldecode($_POST['koder']), ENT_NOQUOTES);

Mvh. Johan
Avatar billede johan.o Nybegynder
21. januar 2006 - 21:19 #7
-->'Kan man ikke hente filen ind udender bliver redigeret i den overhovedet?'<--

Jo, problemet er når du sender indholdet af din form så 'escapes' nogle karakterer for at serveren kan processere dem. F.eks. bliver " til \".

Så du kommer ikke udenom at lave en eller anden form for kodning af indholdet af dit textarea. Jeg har så foreslået javascript funktionen escape(), da den burde lave indholdet således at der ikke sker nogen automatisk ændring i forbindelse med afsendelse af formen. Nu er problemet så bare at få det kodet tilbage igen på serveren. ulrdecode() gjorde det rigtigt nok, den er bare for 'aggresiv' og ændrer også ting som du ikke vil have ændret, derfor er min fornemmelse at htmlentities() kan lave de ting (mellemrum osv) tilbage til det du ønsker. ENT_NOQUOTES attributten sørger blot for at " og ' ikke ændres. Men du kan læse meget mere om disse funktioner på php.net.

http://dk2.php.net/manual/en/function.htmlentities.php

Mvh. Johan
Avatar billede dragonbook Nybegynder
21. januar 2006 - 21:52 #8
Det jeg mener er at når jeg henter filen ind i textarea kan jeg direkte se at der allerede her mangler tegn, dvs. allerede inden jeg redigerer i filen og inden den bliver sendt med min form.
Avatar billede johan.o Nybegynder
21. januar 2006 - 22:07 #9
Ahh okay, sorry :)

Jeg kigger lige på det !

Mvh. Johan
Avatar billede johan.o Nybegynder
21. januar 2006 - 22:24 #10
Hm, hvad nu hvis du gør sådan her når du henter filen :

<?PHP
copy("start.php", "start.bak");
$myFile = "start.php";
$fh = fopen($myFile, 'r');
$theData = fread($fh, filesize($myFile));
fclose($fh);
echo "<form action='gem.php' method='post' onsubmit='this.koder.value=escape(this.koder.value)'><textarea wrap='off' rows='20' cols='100' name='koder'>";
echo htmlentities($theData, ENT_NOQUOTES);
echo "</textarea><br><input type='submit' value='Gem'><input type='reset' name='Reset' value='reset'></form>";
?>

og når du gemmer bruger denne :

$gemt_kode = urldecode($_POST['koder']);

Hvordan virker det ?

Mvh. Johan
Avatar billede dragonbook Nybegynder
21. januar 2006 - 22:38 #11
Nu virker det 99%

Men den fjerner stadig tegnet + (plus) hvilket får bl.a. skrift størrelserne til at blive vist forkert.

Tegnet + kommer frem i textarea nu, men ikke efter den gemmes...

&nbsp; osv. bliver vist korrekt.

PS: opretter lige nogle point til dig når vi er færdig :-)
Avatar billede johan.o Nybegynder
21. januar 2006 - 22:57 #12
Hm, ja det kan jeg se nu. Løsningen burde være :

$gemt_kode = rawurldecode($_POST['koder']);

Mvh. Johan
Avatar billede dragonbook Nybegynder
21. januar 2006 - 23:05 #13
nåå ja det står der jo faktisk også i php manualen, det er bare lige med at finde det :-). Men nu virker det perfekt.

MANGE TAK

Du kan lige smide et svar så er der point...
Avatar billede johan.o Nybegynder
21. januar 2006 - 23:07 #14
Jamen det er jo bare for lækkert :)

Mvh. Johan
Avatar billede johan.o Nybegynder
21. januar 2006 - 23:11 #15
Tak for points :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester