【解説付き】phpでテキストファイルへの書き込み方法とは?

このQ&Aのポイント
  • phpを使用してHTMLのテキストエリアに入力された内容をテキストファイルに保存する方法について解説します。
  • 具体的には、画像上をクリックした時の座標値をテキストエリアに表示し、表示された座標値をテキストファイルに保存します。
  • しかし、書き込みができない場合もありますので、その原因と対処法についても説明します。
回答を見る
  • ベストアンサー

phpでテキストファイルへ書き込み

HTMLでのテキストエリアに記述された内容をPHPを利用して、テキストファイル化したいと考えています。 具体的には、画像上をクリックし、座標値(xとy)をテキストエリアに表示させます。 その表示された座標値をテキストファイルに保存したいと考えています。 以下がソースコードです。 ----- sumple.php ------------------------------ <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <SCRIPT type="text/javascript"> function xyget(e){ var box = document.getElementById("xy"); box.value += e.clientX + "\n" + e.clientY + "\n"; } </SCRIPT> </head> <body> <br>画像上をクリック<br> <form name="picture"> <div><img src="sumple.jpg" onclick="xyget(event)" id="pic"></div> <b>座標値</b> <form action="sumple.php" method="POST"> <textarea name="xy" rows="5" cols="5"></textarea> <input type="submit" value="完了"> </form> <?php $content = $_POST['xy']; if ($content) { $fp = fopen('sumple.txt', 'w'); fputs($fp, $content); fclose($fp); print "書き込み完了しました。"; } ?> <br> </body> </html> ---------------------------------------------- テキストファイルはあらかじめ作成してあり、テキストエリアに座標値もちゃんと表示できています。 ですが、完了ボタンを押してもテキストファイルに書き込みがされず、困っています。 お願いします。

  • PHP
  • 回答数2
  • ありがとう数3

質問者が選んだベストアンサー

  • ベストアンサー
  • cotae_bb
  • ベストアンサー率53% (51/95)
回答No.2

<form name="picture"> が閉じていないため、methodがGETで飛んでいるように思えます。

kupipooh8
質問者

お礼

<form>閉じてないですね・・・。 気づかなかったです。 </form>を加えたら、無事書き込むことができました。 ありがとうございます。

その他の回答 (1)

  • memphis
  • ベストアンサー率40% (975/2395)
回答No.1

ファイルの書き込み権限がないからでは? sumple.txtのパーミッション等を見直して下さい。

kupipooh8
質問者

お礼

早速の回答をくださり、ありがとうございます。 上の方のご指摘通り、無事解決いたしました。

関連するQ&A

  • PHPのテキストファイルを使った簡素な掲示板

    テキストファイルを使って 簡単な掲示板での書き込み、読み出しのサンプルを練習しています。 書き込み、書き出しは何とかできるようなのですが フォームに何も記入していない状態で送信ボタンを押したり 再読み込みをすると 「さん」の部分だけファイルに書き込まれ、 そして出力されてしまいます。 ------------------------------------------------------------- <div class="obi">このページに関するコメントをどうぞ</div> <div id="form"> <form method="post" action=""> <p><input type="text" name="name">【名前】</br> <textarea name="kakikomi" cols="60" rows="5"></textarea></br> <input type="submit" value="送信"></p> </form> </div> <?php $data = file_get_contents("keiji.txt"); $name = htmlspecialchars(@$_POST["name"]); $kakikomi = htmlspecialchars(@$_POST["kakikomi"]); if(isset($name)){ $name = "$name さん"; $data = '<strong>'.$name.'</strong>&nbsp&nbsp'.$kakikomi.'<hr><p>'.$data.'</p>'; file_put_contents("keiji.txt", $data); echo "<p>$data</p>"; }else{ exit; } ------------------------------------------------------------- フォームに何も記入しなかった場合 テキストファイルになにも書き込みされないようにするには どこを修正したらよいのでしょうか? 難しい構文ではなく初心者でも分かりやすい方法があれば お教えください。 よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • PHP からのファイル書き出しで、 HTMLタグがうまく書き出されない問題について。

    phpを使っていろんな拡張子のファイル(php html txt画代表的) を書き出すソフトを作ったのですが、 目的としては、携帯電話からアクセスしていつでも本を見ながらスクリプトを実験できるということです。 でも、なぜか「<a href="http://*****">クリック</a>」 というようなスクリプトで書き出すと「<a href=\"http://*****\">クリック</a>」 になってしまって困っています。 これは、文字コードが原因なのでしょうか。 どなたか教えてください。 <?php $data = $_POST["data"]; $extension = $_POST["extension"]; $name = "data"; if($data){ $fp = fopen($name. ".". $extension,"w+"); fwrite($fp,$data); fclose($fp); print "書き出し完了"; } ?> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"> <html lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=Shift_Jis"> <style type="text/css"> <!-- textarea { width: 600px; height: 10em; } --> </style> </head> <form method="post" action="write.php"> 拡張子<br> <input type="text" name="extension" value="txt"><br/> 内容<br/> <textarea name="data"></textarea><br/><br/> <input type="submit" name="submit" value="送信"> </form>

    • ベストアンサー
    • PHP
  • ajaxでPHPにPOST送信して結果データをテキストファイルに書き込みたいのですがうまくいきません

    jQueryを使用しています。 <script language="Javascript"> function send(){// $.ajax({ type: "POST", url: "write.php",//write.phpに送信 date: {date: $("#text").val()},//「id="text"」なテキストエリアのvalue値を取得し「date」として送信。 }); } </script> <form name="chat" onsubmit="send();return false" method="POST" > <textarea id="text"></textarea><br> <input type="submit" value="送信"></input> </form> write.php <?php $textfile = fopen("text.txt", "a");//「text.txt」をオープン fputs($textfile, $_POST["date"]);//書き込む(これができません。ディレクトリーにファイルがなかった場合、ファイルは作成されます) fclose($textfile); ?> どのようにしたら、テキストエリアに入力された値を、テキストファイルに書き込むことができるのでしょうか? 色々、調べたのですがプログラムの書き方の間違いがどうしても分かりません。教えてください。

    • ベストアンサー
    • AJAX
  • Javascriptで複数のテキストエリアの文字列を連結させたいです

    Javascriptで複数のテキストエリアの文字列を連結させたいです。 初めまして、 お世話になります。 ------------------------------------------------- <html> <head> <title>無題ドキュメント</title> <meta http-equiv="Content-Type" content="text/html; charset=EUC-JP"> </head> <body bgcolor="#FFFFFF" text="#000000"> <form name="form1" method="post" action=""> いつ<br> <textarea name="when"></textarea> <br> <br> どこで<br> <textarea name="where"></textarea> <br> <br> だれが<br> <textarea name="who"></textarea> <br> <br> どうした<br> <textarea name="what"></textarea> <br> <input type="submit" name="submit" value="連結"> <input type="reset" name="submit" value="リセット"> <br> <br> いつどこでだれががどうした。<br> <textarea name="textfield"></textarea> </form> </body> </html> ------------------------------------------------- というHTMLがあったとして ボタンを押したら文字列を連結させたいのです。 その際、入力したテキストフィールドで文字列が改行をされてあった場合 それをそのまま反映して表示させたいのです。 ぜひよろしくお願いします。

  • テキストエリアの配置

    お世話になっています。 dreamweaverでサイトを作成しています。 更新情報などによくある スクロールさせることのできるテキストエリアを作成したいのですが、 今 <body> 更新情報<br> <form name="form1" method="post" action=""> <textarea name="textarea"></textarea> </form> という状態なのですが、 ブラウザで確認すると更新情報とテキストエリアの間がかなり空いてしまいます。 dreamweaver上ではぴったりくっついているのですが・・ これはなんとかなりますでしょうか?

  • php ファイルの書き込み読みだし

    htmlフォームから回答 phpで処理計算しlog.csvに保存、log.csvファイルを読みだしその結果をブラウザに表示するスクリプトを書いておりますが、log.csvファイルを読みだして結果を表示の部分が調べてもできなくて困っております。どなたか知恵を貸してほしいです。批判や中傷などは書かないでください。 <HTML> <HEAD> <TITLE>テキスト送信のテスト></TITLE> </HEAD> <FORM name="toi_5.html"method="post" action="toi5.php"> <Div Align="center">名前:<BR> <INPUT type="text"name="onamae"> <BR> 性別:<BR> <INPUT type="radio"name="gender" value="男">男<BR> <INPUT type="radio"name="gender" value="女">女<BR> <BR> <SELECT name="syokugyou"> <OPTION value""selectd>職業をえらんでください</OPTION> <OPTION value"学生">学生</OPTION> <OPTION value"会社員">会社員</OPTION> <OPTION value"公務員">公務員</OPTION> <OPTION value"自営業">自営業</OPTION> <OPTION value"その他">その他</OPTION> </SELECT><BR> <p></p> 満足度を答えてください:<BR> <INPUT type="checkbox" name="hobby[]" value="満足"> 満足<BR> <INPUT type="checkbox" name="hobby[]" value="やや満足"> やや満足<BR> <INPUT type="checkbox" name="hobby[]" value="普通"> 普通<BR> <INPUT type="checkbox" name="hobby[]" value="やや不満"> やや不満<BR> <INPUT type="checkbox" name="hobby[]" value="不満"> 不満<BR> <BR> <INPUT type="submit" value="回答"> </div> </FORM> </BOBY> </HTML> <HTML> <HEAD> <TITLE>PHPのテスト</TITLE> </HEAD> <BOBY> <p> <Div Align="center">名前</p> <?php print $_POST["onamae"]; ?> <p> <?php if(isset($_POST["gender"])&&($_POST["gender"]=="男"|| $_POST["gender"]=="女")){ print"性別:<BR>"; print $_POST["gender"]; }else{ print"性別を選んでください。<BR>"; } ?> <?php session_start(); if (isset($_SESSION["gender"])) { $_SESSION["gender"]++; print($_SESSION["gender"]."回目"); } else { $_SESSION["gender"] = 0; } ?> <p> </p> <?php if($_POST["syokugyou"]<>""){ print"職業:<BR>"; print$_POST["syokugyou"]; }else{ print"職業をえらんでください<BR>"; } ?> <?php if (isset($_SESSION["syokugyou"])) { $_SESSION["syokugyou"]++; print($_SESSION["syokugyou"]."回目"); } else { $_SESSION["syokugyou"] = 0; } ?> <p> </p> 満足度を答えてください<BR> <?php if(isset($_POST["hobby"])){ $hobby=implode($_POST["hobby"]); print $hobby; }else{ } ?> <?php if (isset($_SESSION["hobby"])) { $_SESSION["hobby"]++; print($_SESSION["hobby"]."回目"); } else { $_SESSION["hobby"] = 0; } ?> <?php // 出力 $fileName = "log.csv"; header('Content-Disposition: attachment; filename=' . $fileName); ?> </div> </body> </html> </BOBY> </HTML>

    • ベストアンサー
    • PHP
  • 下記ソースでauからログファイルに書込みしたいのですが、全然反応しませ

    下記ソースでauからログファイルに書込みしたいのですが、全然反応しません。 かなりいろいろ試したのですが、まったくダメでした どこを改善すれば、書込み出来るようになるでしょうか? <HTML> <?php $data_file = "test.log"; //データファイル名 if(!isset($PHP_SELF)){ $PHP_SELF = $_SERVER["PHP_SELF"]; } if(!isset($action)){ $action = $_POST['action']; } if(!isset($comment)){ $comment = $_POST['comment']; } if(!isset($upfile)){ $upfile = $_POST['upfile']; } ?> <HEAD> <meta http-equiv="pragma" content="no-cache" /> <meta http-equiv="cache-control" content="no-cache" /> <meta http-equiv="expires" content="0" /> <meta http-equiv="content-Type" content="application/xhtml+xml; charset=Shift_JIS" /> </HEAD> <BODY ALIGN="LEFT" BGCOLOR="#000000" TEXT="#FFFFFF" > ■TEST<br> <FORM ACTION="<?php echo $PHP_SELF; ?>" METHOD="POST" ENCTYPE="multipart/form-data" style="margin: 0px;"> <P><INPUT TYPE="HIDDEN" NAME="action" VALUE="regist"></P> コメント<br> <TEXTAREA NAME="comment" ROWS="5" COLS="28" style="font-size:10pt; color:#000000"></TEXTAREA><BR> 添付画像:<FONT COLOR="#CC0000"> *GIF/JPG/PNG</color><br> <INPUT TYPE="file" NAME="upfile" SIZE="20"><BR> <br> <?php print "<INPUT TYPE='SUBMIT' VALUE=' 書込み/更新 '> <INPUT TYPE='RESET' VALUE='リセット'>\n"; ?> </FORM> <?php //===============データの書き込み================= if ($action == "regist") { $fp = fopen($data_file, "r+"); // ファイル開く $comment0 = fgets( $fp); //値読み取り $comment=$comment."\\".$action."<br>".$comment0; fputs($fp, $comment); fclose($fp); echo"<font size=1 color='white'>"; echo $comment; echo"<br>"; echo"$comment0"; echo"</font>"; $action="no"; unset($action); unset($comment); unset($comment0); } ?> </body> </html>

    • ベストアンサー
    • PHP
  • PHPのPHP_SELFに絡む設定を教えてください

    PHPを勉強中なのですが、以下のソースをSubmit(value=更新)処理すると 結果がURLが見つからない「ページを表示できません」がでます。 恐らく、「PHP_SELF」に絡む設定か、「localhost」のPathに問題があると思うのです。 何かの設定が抜けていると思うのですが、色々調べても分かりません。 どこの設定を直せばいいか教えてください。(^^ 【書籍】 ホンキで学ぼう!PHPのキホン 【環境】 OS:WindowsXPHomeEdition Apapche:1.3.26 PHP:4.2.3 【URL結果】 最初にPHPにアクセスしたときのURL:http://localhost/tmp/php/fileedit.php SubmitしたときのURL:http://tmp/php/fileedit.php 【ソース】書籍の抜粋 <? $filename = "todo01.txt"; if ( $submit ) { $backupfile = $filename.".bak"; echo $backupfile; if ( copy($filename, $backupfile) ) { $fp = fopen($filename, "w"); if(flock($fp, 2)){ fputs($fp, $contents); flock($fp, 3); }else{ echo "ERROR: file lock is failed.<BR>\n"; exit; } fclose($fp); }else{ echo "ERROR: backup failed.<BR>"; exit; } } // ファイル書き換え部終わり ?> <HTML> <HEAD> <TITLE> <? echo $filename ?> </TITLE> <META HTTP-EQUIV="Content-Type" CONTENT="text/html;CHARSET=euc-jp"> </HEAD> <BODY> <FORM ACTION="<? echo $PHP_SELF; ?>" METHOD="POST"> <TEXTAREA NAME="contents" ROWS="25" COLS="100"> <? require ( $filename ); phpinfo(); ?> </TEXTAREA> <INPUT TYPE="submit" NAME="submit" VALUE="更新"> </FORM> </BODY> </HTML>

    • ベストアンサー
    • PHP
  • PHPでテキストエリアのデータを配列に入れるには?

    テキストエリアに入力されたデータ(正確にはURL)を配列で取得して、別のテキストエリアに加工して出力する、という処理を作ろうとしています。 <form action="<?php echo $_SERVER["PHP_SELF"]?>" method="post"> <textarea name="url_from" rows="20" cols="50"> </textarea><br> <input type="submit" value="作成"><input type="reset" value="リセット"> </form> ためしに、 http://www.google.co.jp/ http://www.yahoo.co.jp/ と入力して、どんな入り方をしているのか確かめてみました。 $url_from という変数に入れて取り出してみたところ、上記のふたつのURLデータのあいだに 長い空白が入っているみたいでした。 そこで、このデータを配列に入れようとしているのですが、入れ方が分からずに困っております。 入力できるデータ数は、最大で20件(20行)としていますが、5件のときもあれば10件のときも あるという仕様です。 「切り分ける関数」のようなものがあれば、できそうな気がするのですが…。 みなさんなら、どのようにして配列に組み込もうとしますか?

    • ベストアンサー
    • PHP
  • オンマウスでテキストエリアにテキスト表示

    現在、「猫」という文字にカーソルを合わせると text1のテキストエリアに 「ニャンと鳴く」と表示されるスクリプトを作成しました。 記述の一部ですが下に示します。 <form name="form1"> <TEXTAREA name="text1" rows="5" cols="40"></TEXTAREA> </form> <span onmouseover="txt_dsp('text1','ニャンと鳴く');"onmouseout="txt_dsp('text1', '');">猫</span><br> 教えていただきたいのは'ニャンと鳴く'という部分を msg.txtというテキストファイルに書かれた'ニャンと鳴く' で表示したいのですが、どのような記述にしたらよろしいでしょうか? よろしくお願い致します。

専門家に質問してみよう