2012-10-07 2 views
1

내 웹 사이트 용 텍스트 파일 저장 시스템을 만들려고합니다.PHP를 사용하여 HTML 텍스트 영역에서 TXT 파일을 어떻게 저장합니까?

여기까지 제가 지금까지 있습니다.

나는 약간의 부품을 얻었지만 몇 가지 변경을 한 후에 더 많은 오류가 발생한다고 생각합니다.

페이지 나 URL을 변경하지 않고이 작업을 수행하려고합니다. 유일한 방법은 그 다음 다시 전송하는 PHP 페이지로 리디렉션해야하는 경우

<!DOCTYPE HTML> 
<html> 
    <body> 
     <?php 
    if (isset($_POST)){ 
     //Save File 
     $file = fopen($_POST['filename'] & ".txt","r+"); 
     $text = $_POST["textdata"]; 
     file_put_contents($file, $text); 
     fclose($file); 
     //Open File 
     $file = fopen($_POST['filename'] & ".txt", "r") or exit("Unable to open file."); 
     while(!feof($file)){ 
      echo fgets($file). "<br />"; 
     } 
     fclose($file); 
    } 

    echo ' 
    <form name="savefile" method="post" action="' . $_SERVER['PHP_SELF'] . '"> 
     File Name: <input type="text" name="filename" value=""><br/> 
     <textarea rows="20" cols="100" name="textdata"></textarea><br/> 
     <input type="submit" name="submit" value="Save Text to Server"> 
</form> 
    <br/><hr style="width: 100%; height: 4px;"><br/> 
    <form name="openfile" method="post" action="' . $_SERVER['PHP_SELF'] . '"> 
     Open File: <input type="text" name="filename" value=""> 
     <input type="submit" name="submit" value="Submit File Request"> 
</form>'; 
    ?> 
    </body> 
<html> 

, 그 괜찮지 만, 나는 그 작업을 수행하는 방법을 단서가 없다

(더 간단는 아마 많은 생각)

도움이나 조언을 제공해 주셔서 감사합니다.

제이크

+0

작동합니까? 당신이 얻는 오류는 무엇입니까? – Lior

+0

AJAX 솔루션을 찾고있는 페이지를 변경하고 싶지 않은 경우 많은 것을 할 수있는 방법과 많은 도서관들이 당신을 지원합니다. PrototypeJS 및 JQuery를 살펴보십시오. –

답변

3

우선, 덕분에 많은 도움을 sooo!

경험이 많은 사람들이 초보자를 도울 수 있으면 정말 감사하겠습니다.

몇 가지 제안을 통해 제 코드를 수정 한 후 마침내 작동하게되었습니다. : D

다른 사람이 비슷한 문제로이 주제를 우연히 발견 할 경우를 대비하여 여기에 최종 코드를 남깁니다.이 도움이


<!DOCTYPE HTML> 
<html> 
<body style="background-color: rgb(225,225,225)"> 
    <form name="savefile" method="post" action=""> 
     File Name: <input type="text" name="filename" value=""><br/> 
     <textarea rows="16" cols="100" name="textdata"></textarea><br/> 
     <input type="submit" name="submitsave" value="Save Text to Server"> 
</form> 
    <br/><hr style="background-color: rgb(150,150,150); color: rgb(150,150,150); width: 100%; height: 4px;"><br/> 
    <form name="openfile" method="post" action=""> 
     Open File: <input type="text" name="filename" value=""> 
     <input type="submit" name="submitopen" value="Submit File Request"> 
</form> 
    <br/><hr style="background-color: rgb(150,150,150); color: rgb(150,150,150); width: 100%; height: 4px;"><br/> 
    File Contents:<br/> 
    <?php 
    if (isset($_POST)){ 
     if ($_POST['submitsave'] == "Save Text to Server" && !empty($_POST['filename'])) { 
      if(!file_exists($_POST['filename'] . ".txt")){ 
       $file = tmpfile(); 
      } 
      $file = fopen($_POST['filename'] . ".txt","a+"); 
      while(!feof($file)){ 
       $old = $old . fgets($file). "<br />"; 
      } 
      $text = $_POST["textdata"]; 
      file_put_contents($_POST['filename'] . ".txt", $old . $text); 
      fclose($file); 
     } 

     if ($_POST['submitopen'] == "Submit File Request") { 
      if(!file_exists($_POST['filename'] . ".txt")){ 
       exit("Error: File does not exist."); 
      } 
      $file = fopen($_POST['filename'] . ".txt", "r"); 
      while(!feof($file)){ 
       echo fgets($file). "<br />"; 
      } 
      fclose($file); 
     } 
    } 
    ?> 
</body> 
</html> 

희망!

-jake

0

처럼 긱 민 (88)이 페이지를 다시로드 방지 할 수 AJAX (또는 WebSocket을)를 사용했다. 하지만 이미 거의이 코드를 사용하고 있습니다. file_put_contents 첫 번째 인수는 파일의 경로를 가리키는 문자열이어야합니다. 당신이 지금주고있는 것은 열려있는 파일의 자원입니다.

그래서 fopen 명령을 제거하고 파일 이름을 $ file에 지정하면됩니다.

작은 팁 : 파일 읽기는 똑같이 간단합니다. file_get_contents. 이 구현을 통해 몇 가지 보안상의 영향을 볼 수 있습니다. 따라서 항상 입력 및 이스케이프 출력을 필터링하십시오. 그러나 그것은 완전히 다른 주제입니다.

해피 코딩!

0

제출 양식이 첫 번째 양식에서 온 경우에만 쓰기 부분을 실행해야합니다. 아래의 코드는 첫 번째 양식에서 제출 한 경우 파일을 작성하고 두 번째 양식에서 제출 한 경우 파일을 읽습니다.

if (isset($_POST)){ 

    if ($_POST['submit'] == "Save Text to Server" && !empty($_POST['filename'])) { 
     //Save File 
     $file = fopen($_POST['filename'] & ".txt","r+"); 
     $text = $_POST["textdata"]; 
     file_put_contents($file, $text); 
     fclose($file); 
    } 

    if ($_POST['submit'] == "Submit File Request") { 
     //Open File 
     $file = fopen($_POST['filename'] & ".txt", "r") or exit("Unable to open file."); 
     while(!feof($file)){ 
      echo fgets($file). "<br />"; 
      } 
     fclose($file); 
    } 
} 

페이지를 다시로드하지 않고이 작업을 수행해야하는 경우 양식의 위 코드에 Ajax 게시물을 사용해야합니다. PHP에서

0

$file = fopen($_POST['filename'] & ".txt","r+");

병합 문자입니다. (도트) & 대신. 파일 이름은 사용자가 정의하므로 fopen을 'w'모드로 호출해야 파일이 존재하지 않을 경우 파일을 만들려고합니다.

테스트 isset($_POST)은 항상 true를 반환하지만, isset($_POST['filename'])을 테스트합니다.

관련 문제