2013-02-21 25 views
11

私はこのサイトの周りを検索しましたが、答えは見つかりませんでした。PHPが入力からtxtにファイルを書き込む

私はフォームを持っていて、入力の内容をtxtファイルに書きたいのですが。簡単にするために、私は単純なフォームとスクリプトを書いただけですが、空白のページを手に入れています。ここで私は

<html> 
<head> 
    <title></title> 
</head> 
<body> 
    <form> 
     <form action="myprocessingscript.php" method="post"> 
     <input name="field1" type="text" /> 
     <input name="field2" type="text" /> 
     <input type="submit" name="submit" value="Save Data"> 
    </form> 
    <a href='data.txt'>Text file</a> 
</body> 

を得たものであり、ここで、あなたのデータはGET方法で行くことに、私のPHPファイル

<?php 
$txt = "data.txt"; 
$fh = fopen($txt, 'w+'); 
if (isset($_POST['field1']) && isset($_POST['field2'])) { // check if both fields are set 
    $txt=$_POST['field1'].' - '.$_POST['field2']; 
    file_put_contents('data.txt',$txt."\n",FILE_APPEND); // log to data.txt 
    exit(); 
} 
    fwrite($fh,$txt); // Write information to the file 
    fclose($fh); // Close the file 
    ?> 
+1

はそれ以上の出力を生成myprocessingscript.php' 'していますか? 2番目のスニペットがPHPスクリプト全体であれば、何も出力されていないので、空白のページが表示されます。 – acme

+0

また、空白のページが表示され、クライアントに何もエコーされていないのが普通です。 – Floby

答えて

33

あなたのフォームは次のようになります。

<form action="myprocessingscript.php" method="POST"> 
    <input name="field1" type="text" /> 
    <input name="field2" type="text" /> 
    <input type="submit" name="submit" value="Save Data"> 
</form> 

をし、PHP

<?php 
if(isset($_POST['field1']) && isset($_POST['field2'])) { 
    $data = $_POST['field1'] . '-' . $_POST['field2'] . "\n"; 
    $ret = file_put_contents('/tmp/mydata.txt', $data, FILE_APPEND | LOCK_EX); 
    if($ret === false) { 
     die('There was an error writing this file'); 
    } 
    else { 
     echo "$ret bytes written to file"; 
    } 
} 
else { 
    die('no post data to process'); 
} 

私は今、まさにこのようので/tmp/mydata.txtに書きましたどこですか。あなたの例では何も分かっていない現在の作業ディレクトリにそのファイルに書き込みをしています(data.txt)。

file_put_contentsあなたのためにファイルを開いて書き込み、閉じます。それを台無しにしないでください。

さらに読書: file_put_contents

+0

私はそれを 'data.txt'に戻しましたが、それ以外の部分は完璧です – user2094841

+0

あなたがアクセスできない共有ホスト/ tmp、どこにmydata.txtを置くのですか?私のディレクトリ構造は〜/ www-root/ – cryptic0

+0

です。あなたがここで過ごした時間を本当に感謝しています。これは本当に洗練されたソリューションであり、WordPressプラグインで利用できるようなサードパーティのフォームプロセッサに必要な大量のスクリプトを捨てることができました。 :) – Nathan

5

あなたが持っているので、あなたが持っている余分な<form>のある問題があり、 POSTを使用してPHPのデータにアクセスしています。

<body> 
<!--<form>--> 
    <form action="myprocessingscript.php" method="POST"> 
+1

あなたのワシの目のために+1:D – acme

+0

@acmeようこそ。 :) –

0

可能な解決策:

<?php 
$txt = "data.txt"; 
if (isset($_POST['field1']) && isset($_POST['field2'])) { // check if both fields are set 
    $fh = fopen($txt, 'a'); 
    $txt=$_POST['field1'].' - '.$_POST['field2']; 
    fwrite($fh,$txt); // Write information to the file 
    fclose($fh); // Close the file 
} 
?> 

あなたが近いデ・ファイルの前にスクリプトを閉じました。

0

file_put_contentsを使用する場合、fopen - > fwrite - > fcloseを実行する必要はありませんが、file_put_contentsはそれをすべて行います。また、Webサーバーに "data.txt"ファイルを書き込もうとしているディレクトリに書き込み権限があるかどうかを確認する必要があります。

PHPのバージョン(古い場合)によっては、file_get/put_contents関数がない可能性があります。スクリプトを実行したときにエラーが発生したかどうかをWebサーバーログで確認してください。

+0

私はそれがサーバー上の管理者で実行されている場合、私はそれが動作することに気づいた、どのように権利を変更することができますか? – user2094841

+0

あなたのウェブサーバがApacheの場合: 'chown -R apache:apache dir_where_you_create_the_file' – Naryl

0

使用fwrite()の代わりますfile_put_contents()

関連する問題