PHPとMySQLを使用してファイルに書き込み内容を保存する方法について

このQ&Aのポイント
  • PHPとMySQLを使用して、書き込み内容を保存する方法についてお知らせください。
  • 指定のフォーマットでファイルに保存する方法について教えてください。
  • 指定した形式でデータをDBに保存する方法についてアドバイスをお願いします。
回答を見る
  • ベストアンサー

php+mysql

書き込み内容保存押した後に空のファイルに保存(作成済み)空ファイル タイトル 本文 書き込み日次 タイトル 本文 書き込み日次こんな形で保存です これをDBに保存したいのですが以下だと↓ファイル保存形式なってしまってます どう変えればいいでしょうか?よろしければ書き込んでいただけると幸いです $fp = fopen('data.txt', 'a'); flock($fp, LOCK_EX); fwrite($fp, implode('<>', array($subject, $text, date('Y-m-d h:i:s'))) . PHP_EOL); flock($fp, LOCK_UN); fclose($fp);

  • MySQL
  • 回答数1
  • ありがとう数0

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

  • ベストアンサー
  • t_ohta
  • ベストアンサー率38% (5067/13241)
回答No.1

タイトルに MySQL と書いてあるので MySQL を前提に。 予め DB を作成し kakikomi テーブルを作成します。 kakikomi テーブルは ========== CREATE TABLE kakikomi ( subject VARCHAR(100), honbun VARCHAR(500), kakikomi_date DATETIME ); ========== みたいな感じで作っておき、データの書き込みは ========== try { $pdo = new PDO('mysql:host=ホスト名;dbname=DB名;charset=utf8','ユーザー名','パスワード',array(PDO::ATTR_EMULATE_PREPARES => false)); $stmt = $pdo -> prepare("INSERT INTO kakikomi (subject, honbun, kakikomi_date) VALUES (:subject :honbun, :kakikomi_date)"); $stmt->bindParam(':subject', $subject, PDO::PARAM_STR); $stmt->bindValue(':honbun', $text, PDO::PARAM_STR); $stmt->bindValue(':kakikomi_date', $kakikomi_date, PDO::PARAM_STR); $kakikomi_date = date('Y-m-d h:i:s'); $stmt->execute(); } catch (PDOException $e) { exit('データベース接続失敗。'.$e->getMessage()); } ========== みたいな感じでいけるでしょう。

関連するQ&A

  • phpのlock処理について

    phpのlock処理について 頻繁に書き込みされるファイルが飛ばないようにロックをしているのですが、 (アクセスログを保存) phpのロック処理を調べていると 一方ではこれでよい、もう一方ではこれでは意味がないなど 色々な事が書かれており、いまいち理解できません。 wモードで開くと強固なロックは不可能なのでしょうか。 以下のようにしているのですが ロックの意味はないでしょうか。 //ロック専用ファイルを開く $flock=fopen("lock.txt","w"); //ロック専用ファイルをロック flock($flock,LOCK_EX); //書き込むファイルを連結して代入 $lineall = implode('', $lines); //書き込み用のファイルを開く $fp=fopen($log_file,"w"); fwrite($fp, $lineall); fclose($fp); //ロック用ファイルのロック解除 flock($flock, LOCK_UN); fclose($flock); プログラムが1から私が作成したものではなく、 ちょくちょく消えてしまうことからロック処理をしたいのと 処理の問題でwモードでの書き込みでないとどうもゴミが入ってしまうようですので (r+でやってみましたが空行などのゴミが沢山入ってしまいました) wモードでの強固なロック方法があればと思うのですが・・・。 お手数をおかけしますがご教授いただけますと幸いです。

    • ベストアンサー
    • PHP
  • ファイル作成

    $fp = fopen($filename1,"a+"); flock($fp,LOCK_EX); fputs($fp,$kisai); flock($fp,LOCK_UN); fclose($fp); としてファイルがなかったら作成するようにして$kisaiの内容を保存するようにしました。 それで問題なく実行できます。 しかし文字コードがANSIで保存されてしまいます。 UTF-8で保存させるようにするにはどうしたらよいでしょうか

    • ベストアンサー
    • PHP
  • 条件文について

    PHPのサンプルを勉強していると 簡単な構文でも「if」などの条件文が 必要以上に使われ故意に複雑にしているように見えます。 -------------------------------------- if(!empty($name) || !empty($naiyou)){ $keijiban = "keijiban.txt"; $fp = fopen($keijiban, "a"); if($fp){ if (flock($fp, LOCK_EX)){ if (fwrite($fp, $data) === FALSE){ print "ファイル書き込みに失敗しました"; } flock($fp, LOCK_UN); }else{ print "ファイルロックに失敗しました"; } } fclose($fp); } ----------------------------------------- 上記は正しいサンプル構文になるようで、 流れは大体理解できるのですが そんなところまで条件分岐をしなくてはいけないのかな? と思ってしまいます。 初学者の私が上のサンプルと同じ内容の構文を書くとしたら 以下のように条件分岐をできるだけ 少なくして考えてしまいます。 ----------------------------------------- if(!empty($name) || !empty($naiyou)){ $fp = fopen("keijiban.txt", "a"); flock($fp, LOCK_EX); fwrite($fp, $data); flock($fp, LOCK_UN); fclose($fp); }else{ print "エラー"; } ----------------------------------------- 条件分岐をできるだけ多く使うことは 必要なのでしょうか? 条件分岐で詳細に分けるのは どのような利点が具体的にあるのでしょうか? よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • ファイルへの書き込み

    フォームに入力されたデータをCSVファイルに書き込みたいのですが、以下のようにすると追加で書き込みはできるのですが、ずっと改行されずに1行に書き込まれてしまうので、新しいデータを入れる際に改行されるようにしたいのですが、どのようにすればいいでしょうか? $fp = fopen(TEST_FILE,"a") or die("ファイルを開けません\n"); flock($fp, LOCK_EX); fputs($fp, "aaa")."\n"; flock($fp, LOCK_UN); fclose($fp);

    • ベストアンサー
    • PHP
  • PHPのリロード時の処理

    PHPのリロード時の処理 PHPプログラム初心者です。 掲示板のプログラムを作成しております。 以下のコードで、リロード時、自動で投稿ボタンが押されてsubmitしてしまいます。 自分で考えた解決策としては、下記のwriteDate()内で、条件を入れることです。 $_GET['personal_name'];のデータを変数に保持し、次にリロードされた時同じものが返ってきら、writeDate()内の処理をしないという方法です。 このときの変数の保存の仕方が解りません。 ご存じの方がおられましたら教えてください。 <?php if($_SERVER["REQUEST_METHOD"]=="GET"){ writeData(); } readData(); function readData(){ $keijban_file='keijiban.txt'; $fp=fopen($keijban_file,'rb'); if($fp){ if(flock($fp,LOCK_SH)){ while(!feof($fp)){ $buffer=fgets($fp); print($buffer); } flock($fp,LOCK_UN); }else{ print('ファイルロックに失敗しました'); } } fclose($fp); } function writeData(){ //--------ここで同じ書き込みデータがあればreturnしたい。------- $t=$_GET['personal_name']; $personal_name=$_GET['personal_name']; $contents=$_GET['contents']; $contents=nl2br($contents); $data="<hr>\r\n"; $data=$data."<p>[投稿者:".$personal_name."]</p>"; $data=$data."[内容]"; $data=$data."<p>".$contents."</p>"; $keijban_file='keijiban.txt'; $fp=fopen($keijban_file,'ab'); if($fp){ if(flock($fp,LOCK_EX)){ if(fwrite($fp,$data)===FALSE){ print('ファイル書き込みに失敗しました'); } flock($fp,LOCK_UN); }else{ print('ファイルロックに失敗しました'); } } $data=null; fclose($fp); } ?>

    • ベストアンサー
    • PHP
  • phpである処理をすると数を1足して、ある処理をするとその数字から1引

    phpである処理をすると数を1足して、ある処理をするとその数字から1引くような事をしたいのですが、上手くいきません。(まれに数字にずれが生じてしまいます。) 1足していくもの $fp = fopen("./data/registry/buy.dat","r+"); $registry_count = fgets($fp,1024); if($registry_count == ""){ $registry_count = 0; } $registry_count++; flock($fp,LOCK_EX); fseek($fp,0); fputs($fp,$registry_count); flock($fp,LOCK_UN); fclose($fp); 1引いていくもの $fp = fopen("./data/registry/buy.dat","r+"); $registry_count = fgets($fp,1024); if($registry_count != "0"){ $registry_count--; } flock($fp,LOCK_EX); fseek($fp,0); ftruncate($fp,0); fputs($fp,$registry_count); flock($fp,LOCK_UN); fclose($fp); どなたかご教授ください。 よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • スマホ用PHP掲示板

    PHPで掲示板を簡易的に作ったのですが スマートフォン(iPhone)にも対応したく思います。 端末用にコーティングするにはどのような記述をしたら良いでしょうか。 【ソース】 _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ <html> <head><title>TEST</title></head> <body> <p>掲示板</p> <form method="POST" action="<?php print($_SERVER['PHP_SELF']) ?>"> <input type="text" name="personal_name"><br><br> <textarea name="contents" rows="8" cols="40"> </textarea><br><br> <input type="submit" name="btn1" value="投稿する"> </form> <?php if($_SERVER["REQUEST_METHOD"] == "POST"){ writeData(); } readData(); function readData(){ $keijban_file = 'keijiban.txt'; $fp = fopen($keijban_file, 'rb'); if ($fp){ if (flock($fp, LOCK_SH)){ while (!feof($fp)) { $buffer = fgets($fp); print($buffer); } flock($fp, LOCK_UN); }else{ print('ファイルロックに失敗しました'); } } fclose($fp); } function writeData(){ $personal_name = $_POST['personal_name']; $contents = $_POST['contents']; $contents = nl2br($contents); $data = "<hr>¥r¥n"; $data = $data."<p>投稿者:".$personal_name."</p>¥r¥n"; $data = $data."<p>内容:</p>¥r¥n"; $data = $data."<p>".$contents."</p>¥r¥n"; $keijban_file = 'keijiban.txt'; $fp = fopen($keijban_file, 'ab'); if ($fp){ if (flock($fp, LOCK_EX)){ if (fwrite($fp, $data) === FALSE){ print('ファイル書き込みに失敗しました'); } flock($fp, LOCK_UN); }else{ print('ファイルロックに失敗しました'); } } fclose($fp); } ?> </body> </html> _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ ご教示の程宜しくお願い致します。

    • ベストアンサー
    • PHP
  • phpで引き算が上手くいかない

    データの引き算で書き出す際に予期しない数字になってしまって 困っております。 data.datに10となっていた際に、下記のコードを実行すると90になってします。本当は9にしたいのですが、どこに原因があるのかわからずにおります。 どなたかご教授ください。 宜しくお願いいたします。 $fp = fopen("data.dat","r+"); $registry_count = fgets($fp,1024); if($registry_count != "0"){ $registry_count--; } flock($fp,LOCK_EX); fseek($fp,0); fputs($fp,$registry_count); flock($fp,LOCK_UN); fclose($fp);

    • ベストアンサー
    • PHP
  • PHPでpopenでファイル出力

    下記のようにプログラムを作成しておりますが、 検索結果全体を読み込むことができません。 全て8000バイトくらいしか読み込むことができません。 何故でしょうか?? | more という文をgrep に追加してもできませんでした。 $fp_r = popen('nkf -e -Lu '.$fileName.' | grep \''ああ'\'',"r"); //ファイルの内容を全て読み込む $body=fread($fp_r,filesize($fileName)); $fp = fopen($preFile, "w"); chmod($preFile,0777); flock($fp, LOCK_EX); fputs ($fp, $body); flock($fp, LOCK_UN); fclose($fp); pclose($fp_r);

    • ベストアンサー
    • PHP
  • PHPのアクセスカウンターのバグについてです!

    PHPを勉強しているものですが アクセスカウンターをネットで調べ自分なりに書いたのですが 日にちが変わるとトータル、今日、昨日が全く動かなくなります。 どこをどうすればいいのか教えていただけないでしょうか? お願いします。 $txt='counter.txt'; $fp=fopen($txt,'r+'); if($fp!==false){ if(flock($fp,LOCK_EX)){ $counter=fgets($fp);//トータル 今日 昨日 日付 $count=explode(' ',$counter); if(date('j') != $count[3]){ $count[3]=date('j'); $count[2]=$count[1]; $count[1]=0; } $count[0]++; $count[1]++; $counter=implode(' ',$count); rewind($fp); fputs($fp,$counter); flock($fp,LOCK_UN);} } fclose($fp); ちなみにバグはトータル→今日→昨日→日付の順です。 500 1 1 262625 のようになっていました。 よろしくです。

    • ベストアンサー
    • PHP