Avatar billede tyksen Nybegynder
24. juni 2004 - 17:11 Der er 14 kommentarer og
1 løsning

redigere en txt-fil online?

Hej eksperter

Jeg har en txt-fil, som jeg gerne ville kunne ændre i, direkte i min browser ved hjælp af en form.
er der nogen der kan hjælpe mig med en kode, som kan udføre denne funktion?

Håber i kan forstå hvad jeg mener!

MVH Mathias
Avatar billede razmuz_dk Nybegynder
24. juni 2004 - 17:14 #1
Hvis du vil skrive indholdet af $var ind i fil.txt kan du gøre sådan

$fp=fopen("fil.txt","w+");
fputs($fp,$var);
fclose();

Så indeholder fil.txt $var :)
Avatar billede coderdk Praktikant
24. juni 2004 - 17:15 #2
<?php

  $filnavn = "dinfil.txt";
  if ( isset( $_POST['indhold'] ) )
  {
    $fp = fopen( $filnavn, 'w' );
    flock( $fp, LOCK_EX );
    fwrite( $fp, $_POST['indhold'] );
    fclose( $fp );
  }

?>
<form method="post">
<textarea name="indhold"><?= readfile( $filnavn ) ?></textarea>
<input type="submit" value="Gem"
</form>
Avatar billede razmuz_dk Nybegynder
24. juni 2004 - 17:18 #3
eller en lettere udbygget form:
<?
$fil = "fil.txt";

if($_POST[action]=="Gem") {
print "Gemt...";
$fp=fopen($fil,"w+");
fputs($fp,$_POST[data]);
fclose($fp);
}
?>
<form action="<?=$PHP_SELF?>" method="post">
<textarea name="data" style="width:100%" rows=25><? readfile($fil); ?></textarea><br>
<input name="action" type="submit" value="Gem">
</form>
Avatar billede coderdk Praktikant
24. juni 2004 - 17:20 #4
Hmm jeg burde også låse filen op bagefter:

<?php

  $filnavn = "dinfil.txt";
  if ( isset( $_POST['indhold'] ) )
  {
    $fp = fopen( $filnavn, 'w' );
    flock( $fp, LOCK_EX );
    fwrite( $fp, $_POST['indhold'] );
    flock( $fp, LOCK_UN );
    fclose( $fp );
  }

?>
<form method="post">
<textarea rows="40" cols="80" name="indhold"><?= readfile( $filnavn ) ?></textarea>
<input type="submit" value="Gem">
</form>
Avatar billede tyksen Nybegynder
24. juni 2004 - 17:20 #5
coderdk--> det er lige præcis hvad jeg har brug for! Men når jeg har ændret teksten, så skriver den et eller andet tal i formen efter jeg har klikket på gem. Hvordan kommer jeg af med det?
Avatar billede tyksen Nybegynder
24. juni 2004 - 17:25 #6
ok, tallet kommer ikke, når jeg bruger den kode, som razmuz_dk gav mig!
Kan man gøre noget så de linjeskift jeg laver når jeg redigere teksten også bliver vist i den tekst der fremkommer bagefter?
Avatar billede coderdk Praktikant
24. juni 2004 - 17:28 #7
En lidt opdateret udgave:

<?php

  $filnavn = "out/dinfil.txt";

  $indhold = @file_get_contents( $filnavn );
  if ( isset( $_POST['indhold'] ) )
  {
    $fp = fopen( $filnavn, 'w' );
    flock( $fp, LOCK_EX );
    fwrite( $fp, $_POST['indhold'] );
    flock( $fp, LOCK_UN );
    fclose( $fp );
    $indhold = $_POST['indhold'];
  }

?>
<form method="post">
<textarea rows="40" cols="80" name="indhold"><?= $indhold ?></textarea>
<input type="submit" value="Gem">
</form>



Viser den ikke dine linieskift??
Avatar billede coderdk Praktikant
24. juni 2004 - 17:31 #8
btw, når man skriver til filer osv, er det altid en god idé at benytte flock(), ellers kan du risikere at miste indholdet af filen, hvis f.eks. flere submitter samtidigt.
Avatar billede tyksen Nybegynder
24. juni 2004 - 17:33 #9
Nej, den viser nu ikke linjeskiftenene, men det er heller ikke så vigtigt, jeg kan bare vænne mig til at bruge <br>...

En anden ting jeg egentlig hellere vil have at vide, er om man kan lave en liste, med navnene på nogen andre filer, som jeg også gerne vil have mulighed for at redigere. Altså så man bare kan trykke på et link og så er det en anden tekstfil, som jeg kan redigere...

Er det til at forstå?
Avatar billede coderdk Praktikant
24. juni 2004 - 17:40 #10
Noget i stil med:

<?php

  $filnavn = ( isset( $_GET['fil'] ) ? $_GET['fil'] : 'test1.txt' );

  $indhold = @file_get_contents( $filnavn );
  if ( isset( $_POST['indhold'] ) )
  {
    $fp = fopen( $filnavn, 'w' );
    flock( $fp, LOCK_EX );
    fwrite( $fp, $_POST['indhold'] );
    flock( $fp, LOCK_UN );
    fclose( $fp );
    $indhold = $_POST['indhold'];
  }

?>
<a href="<?= $_SERVER['PHP_SELF'] ?>?fil=test1.txt">test1.txt</a><br>
<a href="<?= $_SERVER['PHP_SELF'] ?>?fil=test2.txt">test2.txt</a><br>
<a href="<?= $_SERVER['PHP_SELF'] ?>?fil=test3.txt">test3.txt</a><br>
<h1><?= $filnavn ?></h1>
<form method="post">
<textarea rows="40" cols="80" name="indhold"><?= $indhold ?></textarea>
<input type="submit" value="Gem">
</form>

Og du kan bruge nl2br() til at lave linieskift om til <br>: http://dk.php.net/nl2br
Avatar billede razmuz_dk Nybegynder
24. juni 2004 - 17:46 #11
Her er mit bud, håber det ok med lidt javascript

<?
$filer = "fil.txt,fil2.txt,fil3.txt";

$active_file=$_GET[filename];

if($_POST[action]=="Gem") {
print "$_POST[filename] gemt (".date("d/m H:i").").";
$fp=fopen($_POST[filename],"w+");
fputs($fp,$_POST[data]);
fclose($fp);
$active_file=$_POST[filename];
}
print "<form method=\"post\">
<table width=\"100%\">
<tr>
<td valign=\"top\">Filnavn</td>
<td width=\"100%\"><select name=\"filename\" onchange=\"document.location.href='$PHP_SELF?filename='+this.options[this.selectedIndex].value\">
";

$filer = explode(",",$filer);

for($i=0;sizeof($filer)>$i;$i++) {
print "<option value=\"$filer[$i]\""; if($active_file==$filer[$i]) { print "selected"; } print ">$filer[$i]</option>";
}
?>
</select>
</td>
</tr>
<tr>
<td valign="top">Filindhold</td>
<td>
<textarea name="data" style="width:100%" rows=25><? @readfile($active_file); ?></textarea><br>
<input name="action" type="submit" value="Gem">
</td>
</tr>
</table>
</form>
Avatar billede tyksen Nybegynder
24. juni 2004 - 17:54 #12
jeg siger mange tak! Du får pointene coderdk!
Avatar billede tyksen Nybegynder
24. juni 2004 - 18:15 #13
razmuz_dk--> Jeg troede desværre du var gået ud af diskussionen...Jeg synes faktisk at dit bud er bedre, men nu har jeg accepteret coderdk's svar. Men mange tak for hjælpen, håber ikke at du er alt for sur over min lidt for hurtige beslutning! Tror jeg vil bruge dit forslag!
Avatar billede razmuz_dk Nybegynder
24. juni 2004 - 23:01 #14
Det går nok :-)
Avatar billede b_ball Nybegynder
12. juli 2004 - 12:23 #15
razmuz_dk rigtig godt script!!!
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