Avatar billede therichman Nybegynder
02. januar 2006 - 22:01 Der er 29 kommentarer og
1 løsning

gem tekst fra TEXTAREA

Jeg er i gang med at udvikle et system på min hjemmeside så det er muligt at skrive til en tekstfil uden at være logget ind på FTP serveren, dette havde jeg tænkt mig skulle fungerer ved hjælp af HTML og PHP. i HTML har jeg lavet et textarea og en submit knap:

<html>
  <head>
  </head>
  <body>
    <div class="center">
      <h1>Skriv til tekstfil</h1>
<TEXTAREA name="text1" rows="23" cols="70">
</TEXTAREA>
    </div>
    <p align="center"><a href="uploader.php" class="text" data=text1.text>Submit</a></p>
  </body>
</html>

Jeg er ikke nogen HTML haj, og det meste af ovenstående har jeg hentet forskellige steder fra nettet, men sådan som jeg forstår det skulle det linke over til "uploader.php" og sende dataen fra text1 med under navnet "data", her er min PHP fil:

<?php
$filename = 'tekstfil.txt';

if (is_writable($filename)) {

  if (!$handle = fopen($filename, 'a')) {
        echo "Kan ikke åbne filen ($filename)";
        exit;
  }

  if (fwrite($handle, $data) === FALSE) {
      echo "Kan ikke skrive til ($filename)";
      exit;
  }

  echo "Success, skrev ($data) i filen ($filename)";

  fclose($handle);

} else {
  echo "Filen $filename er ikke skrivbar";
}
?>

Men jeg får bare en blank side når jeg trykker Submit! Hvad kan der være galt?
Avatar billede mr-kill Nybegynder
02. januar 2006 - 22:10 #1
Du skal lige ha det ind i en form:

<html>
  <head>
  </head>
  <body>
    <div class="center">
      <h1>Skriv til tekstfil</h1>
<form action="uploader.php" method="post">
<TEXTAREA name="text1" rows="23" cols="70">
</TEXTAREA>
    </div>
    <p align="center"><input type='submit' value='Submit'></p>
</form>
  </body>
</html>

så på uploader.php indeholder $_POST['text1'] teksten :D
Avatar billede therichman Nybegynder
03. januar 2006 - 17:03 #2
Jeg får stadig bare en blank skærm... Jeg har kopieret din HTML kode uden nogen modifikationer overhovedet, og så ændrede jeg min PHP fil så den ser sådan ud:

<?php
$filename = 'tekstfil.txt';
$data = $_GET['text1'];

if (is_writable($filename)) {

  if (!$handle = fopen($filename, 'a')) {
        echo "Kan ikke åbne filen ($filename)";
        exit;
  }

  if (fwrite($handle, $data) === FALSE) {
      echo "Kan ikke skrive til ($filename)";
      exit;
  }

  echo "Success, skrev ($data) i filen ($filename)";

  fclose($handle);

} else {
  echo "Filen $filename er ikke skrivbar";
}
?>
Avatar billede therichman Nybegynder
03. januar 2006 - 17:09 #3
Nej hov! Det virker! Jeg var bare så dum at jeg prøvede at køre det direkte på min egen computer! Glemte at PHP var et serverside sprog (og tag dig ikke af min ændring fra $_POST til $_GET... det var bare lidt desperati)
Smid et svar!
Avatar billede mr-kill Nybegynder
03. januar 2006 - 17:11 #4
svar :)
Avatar billede therichman Nybegynder
03. januar 2006 - 17:22 #5
Jeg er stødt ind i et lille problem, når jeg trykker submit bliver min nye tekst skrevet i bunden af den første tekst, hvilket ikke var meningen, hvordan kan jeg rette det?
Avatar billede therichman Nybegynder
03. januar 2006 - 17:24 #6
Da det jo er et nyt problem lægger jeg 10 point oveni :D
Avatar billede mr-kill Nybegynder
03. januar 2006 - 17:26 #7
jeg forstår ikke helt hvad du mener.. hvad siger du den skriver?
Avatar billede therichman Nybegynder
03. januar 2006 - 17:28 #8
(Kan ikke lige huske hvor man tilføjer flere point :s)
Den skriver ikke nogen fejl, men hvis jeg fx. submitter det her første gang:

Hej med dig!

og en anden gang submitter jeg fx.

Davs du!

Så kommer der til at stå følgende i tekstfil.txt:

Hej med dig
Davs du!

Og det var ikke meningen... der skal kun stå det sidste der blev skrevet.
Avatar billede therichman Nybegynder
03. januar 2006 - 17:33 #9
Der står faktisk "Hej med digDavs du!" hvilket ikke gør det meget bedre...
Avatar billede mr-kill Nybegynder
03. januar 2006 - 17:34 #10
Det er jo klart, den sletter jo ikke indholdet i filen, inden den skriver...
Avatar billede therichman Nybegynder
03. januar 2006 - 17:36 #11
Hvordan kan jeg gøre så den sletter filen så?
Avatar billede mr-kill Nybegynder
03. januar 2006 - 17:38 #12
du kan bruge

bool unlink ( string filename [, resource context] )

for at slette en fil
Avatar billede therichman Nybegynder
03. januar 2006 - 17:47 #13
Hvad er resouce context? Jeg programmerer normalt ikke i PHP, men skal lige bruge denne lille ting til hjemmesiden. Kunne du evt. få det til at passe ind i den PHP fil jeg allerede har lavet? Håber ikke det er for besværligt.
Avatar billede mr-kill Nybegynder
03. januar 2006 - 17:53 #14
<?php
$filename = 'tekstfil.txt';
unlink ( $filename );
$data = $_GET['text1'];

if (is_writable($filename)) {

  if (!$handle = fopen($filename, 'a')) {
        echo "Kan ikke åbne filen ($filename)";
        exit;
  }

  if (fwrite($handle, $data) === FALSE) {
      echo "Kan ikke skrive til ($filename)";
      exit;
  }

  echo "Success, skrev ($data) i filen ($filename)";

  fclose($handle);

} else {
  echo "Filen $filename er ikke skrivbar";
}
?>
Avatar billede therichman Nybegynder
03. januar 2006 - 18:19 #15
Filen tekstfil.txt er ikke skrivbar
Avatar billede therichman Nybegynder
03. januar 2006 - 18:24 #16
Min teori er at filen skal eksisterer før man kan skrive til den, og den eksisterer jo ikke når først man har slettet den med "unlink ( $filename );"
Så skal der vel oprettes en ny tekstfil med samme navn, efter man har slettet den? Hvordan gør man isåfald det?
Avatar billede mr-kill Nybegynder
03. januar 2006 - 18:31 #17
Prøv lige dette:

<?php
$filename = 'tekstfil.txt';
$data = $_GET['text1'];

if (is_writable($filename)) {

  if (!$handle = fopen($filename, 'w')) {
        echo "Kan ikke åbne filen ($filename)";
        exit;
  }

  if (fwrite($handle, $data) === FALSE) {
      echo "Kan ikke skrive til ($filename)";
      exit;
  }

  echo "Success, skrev ($data) i filen ($filename)";

  fclose($handle);

} else {
  echo "Filen $filename er ikke skrivbar";
}
?>
Avatar billede therichman Nybegynder
03. januar 2006 - 18:37 #18
Nu eksisterer filen hele tiden, men der bliver ikke skrevet noget i den...
Når jeg kommer hen til PHP filen får jeg følgende besked:
Success, skrev () i filen (tekstfil.txt)

Og det er påtrods af at jeg skrev noget i tekstboksen!
Avatar billede therichman Nybegynder
03. januar 2006 - 18:38 #19
Hov! Det var vidst min $GET du var kommet til at kopiere :s Det er min fejl...
Avatar billede therichman Nybegynder
03. januar 2006 - 18:40 #20
Alting virker perfekt nu, det var bare det der $_GET der skulle duskiftes med $_POST, her er den endelige kode hvis andre skulle være i samme situation som mig:

<?php
$filename = 'tekstfil.txt';
$data = $_POST['text1'];

if (is_writable($filename)) {

  if (!$handle = fopen($filename, 'w')) {
        echo "Kan ikke åbne filen ($filename)";
        exit;
  }

  if (fwrite($handle, $data) === FALSE) {
      echo "Kan ikke skrive til ($filename)";
      exit;
  }

  echo "Success, skrev ($data) i filen ($filename)";

  fclose($handle);

} else {
  echo "Filen $filename er ikke skrivbar";
}
?>
Avatar billede mr-kill Nybegynder
03. januar 2006 - 18:40 #21
virker det så?
Avatar billede mr-kill Nybegynder
03. januar 2006 - 18:42 #22
Lyder godt :)
Avatar billede therichman Nybegynder
03. januar 2006 - 19:26 #23
Ja næsten alt er godt... jeg kom nemlig lige til at se at mine linieskift i Teaxtareaet ikke kommer med over i tekstfilen! Eksempelvis skriver jeg følgende i Textareaet:
Hej med dig
Dette er en testbesked
Hilsen Therichman

Bliver til:
hej med dig dette er en testbesked Hilsen therichman

i tekstfil.txt... er der en måde at løse dette problem på?
Avatar billede mr-kill Nybegynder
03. januar 2006 - 19:35 #24
hmm når jeg tester det virker det fint?
Avatar billede therichman Nybegynder
03. januar 2006 - 19:58 #25
Ja ok... testede lige med tekstfil.txt, og der hopper det godt nok med over, men til et andet formål har jeg fået PHP filen til at gemme i html format (side.html) og når jeg skriver til den kommer linieskiftene ikke med over... er der evt. en replace funktion så jeg kan udskifte linieskiftene med "<p>&nbsp;</p>"? for isåfald ville mit problem jo være løst...
Avatar billede mr-kill Nybegynder
03. januar 2006 - 20:04 #26
$data = str_replace("\r\n", "<br>", $_POST['john']);
Avatar billede therichman Nybegynder
03. januar 2006 - 20:05 #27
Hvad i alverden er $_POST['john']?
Avatar billede mr-kill Nybegynder
03. januar 2006 - 20:06 #28
sry det var self
$data = str_replace("\r\n", "<br>", $_POST['text1'];
Avatar billede therichman Nybegynder
03. januar 2006 - 20:07 #29
Mange tak! Nu virker alt efter planen!
Avatar billede mr-kill Nybegynder
03. januar 2006 - 20:08 #30
så lidt :)
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