• ベストアンサー

phpで連番

phpで書かれた複数のフォームを運用しています。入力項目はどれも同じです。 それぞれのフォームに入力、送信するとそれぞれのフォームに対応したメールが入力した側とこちら側に飛び、すべてのフォームの入力内容がひとつの csv ファイルに格納されるようになっています。 現在、このフォームのデータに通し番号がついておらず困っております。どのフォームから入力されても保存される csv ファイル内で通し番号がつくようにしたいですが、どのように書き加えたら良いでしょうか。

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

  • ベストアンサー
  • 1minn
  • ベストアンサー率57% (52/90)
回答No.4

> CSV ファイルが日付別で毎日作成されていくので、当日の最初の1件目は前日(前日のファイルがない場合は前々日)のファイルの最終行を取得するような流れになりますか? 少し勘違いしていました。 日付ごとに連番はリセットされるわけじゃないんですね。 ずっと増え続けていくなら・・・ 1: 連番だけを管理するファイルをひとつ作成して、そこから採番する 2: CSVファイル内の連番をゼロパディングする(一日の中で重複しない程度の桁数で) って考え方がよいのではないかと思います。 1の場合は、カウンタだけのファイルとしてファイル開いてデータ取ってきてプラス1して保存。 renban.txtとかにカウンタだけ格納する。抜き出してプラス1して保存の繰り返し。 2の場合は、日付と連番を文字列結合すれば重複しない番号が作れます。 仮にファイル名がYYYYMMDDで連番の桁数が4桁なら12桁の番号になる 20120106.csvでひとつ前のデータの連番が0003なら次は0004 日付をまたいだ通し番号としたいなら201201060004 (10桁超えるとINTじゃなくなるので計算処理が入るなら注意) 前日のデータの末番を取ってきても出来ない事はないですが、少しややこしくなりそうです。

ikehata_shin
質問者

お礼

ありがとうございます。 考え方がわかりました。できるかわかりませんがやってみます。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (3)

  • 1minn
  • ベストアンサー率57% (52/90)
回答No.3

#1です 同じファイルにデータがたまっていくなら、単純に「連番」列をCSVの項目に持たせる事が一番簡単だと思います。 勝手な想像ですが「追記」モードでファイルに書き足していく感じのような気がしたので、書き込み前に一度読み込んで、最下行の連番を取得して、それにプラス1した値を追記してやるのがよいかと思います。 なので $fp = fopen('20120102.csv', "a+"); 的な感じで開いて、その後にロック flock($fp); でロックしてやれば、連番の不整合も防ぐ事が出来ます。 ロック出来たら最下行を取得して、その中の連番の最大値にプラス1した値を今回追記するデータとしてセット。 書きこんだらロックを解放してファイルを閉じておしまい。 ただ開いてる時にアクセスされると待ちが発生するので頻繁にアクセスがあるなら、改善した方がよいかもしれません。 他の方も書いてますがDB使える環境であれば、DBの方がなにかと管理しやすいですよ。

ikehata_shin
質問者

補足

CSV ファイルが日付別で毎日作成されていくので、当日の最初の1件目は前日(前日のファイルがない場合は前々日)のファイルの最終行を取得するような流れになりますか? であれば、フォームごとに接頭辞として識別できる番号数桁(4桁を考えています)orアルファベットを使用してセットしてしまう方が簡単でしょうか。 ファイルのオープン、ロックは分かりましたので連番にする部分のコードも教えていただければと思います。よろしくお願いいたします。

全文を見る
すると、全ての回答が全文表示されます。
回答No.2

DBを使っていないと仮定します。 方法1: CSVファイルの通し番号の最大値を意味する値をテキストファイルnumber.txtに保存しておきます。 フォームを表示する際、number.txtから最大値+1の値を作成し、 それをフォームの隠し番号としておき、submitボタン押下にてフォーム内容と隠し番号をCSVファイルに保存します。 そのときnumber.txtの最大値も書き換えます。 フォームに隠し番号を持たせるような変更が必要になります。 原理は以上のとおりですが、同時書き込みに対して厳密性を求めるなら、number.txt用のロックファイルを別途用意するなどの工夫は必要になります。 方法2: submitボタン押下でCSVファイルに保存するとき、CSVファイルの最下行の通し番号を取得し、それに+1した値を通し番号としてCSVファイルに追記する まあ、方法2が楽かな。ただDB使った方が今後なにか拡張するときトータルで考えると楽ではある。

全文を見る
すると、全ての回答が全文表示されます。
  • 1minn
  • ベストアンサー率57% (52/90)
回答No.1

CSVファイルが複数存在するって事ですよね? ファイル自体は同じディレクトリにある想定ですが・・・ ディレクトリを読み込んで、ファイルの数を数えてプラス1が新しく作成される通し番号でいいんじゃないですかね? あとはタイムスタンプが新しいファイルを見つけて、その中の通し番号プラス1とか。 ファイル名自体に通し番号を入れた方が処理は簡単かもしれませんね。 同時にアクセスされたときにその番号が破たんしないように、気をつけてやれば実現方法はどれでも可能だと思います。

ikehata_shin
質問者

お礼

ありがとうございます。フォームのphpファイルは複数、たまっていくcsvファイルはひとつです。 そしてcsvファイルは1日1ファイル生成されることになっています。 よろしくお願いいたします。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • PHPとHTMLを使って(早急にお願いします)

    はじめまして。 課題のデータが消えてしまい早急の提出物になるので 丸投げになるんですがどうかよろしくおねがいします。 ブラウザのフォームを使って携帯電話の形式チェックが行えるようにする。 フォームの内容 1、入力欄 形式:test name値:mobile value値:空(初期値) 2、サブミットボタン value値:確認する 3、フォームメソッド post 携帯番号入力後「確認する」ボタンを押す (1)入力フォーム再表示 (2)入力フォームのmobileの欄に入力した携帯番号表示 (3)入力した値が携帯番号の形式だったら「携帯番号です」と画面表示 (4)入力した値が携帯番号ではない場合「携帯番号じゃありません」と画面に出力 ファイル名 mobile.php ※PHPでpostメソッドを利用して送信したデータはスーパーグローバル変数の$_POSTに格納される よろしくお願いします。

    • 締切済み
    • PHP
  • php、html フォーム入力→送信後にクリア

    htmlで入力フォーム設置、送信ボタンでsubmit→phpファイル実行、 そしたらフォームに入力したテキストを消したいです。 phpでの実行内容は、 フォームに入力されたIDを検索条件としてクエリ実行、 結果をCSVでダウンロード、 というものです。 よろしくお願い致します。

  • PHPでCSVファイルを編集したい

    PHPを触りだして間もない者です。 PHPでCSVファイルを編集したいのですが、上手くいきません。 CSVファイルの中身は{商品番号,名前,住所,年齢}が数行入力されています。 具体的にはPHPで引数の商品番号を基にCSVファイルで編集する行数を決定して、その行の一部項目を変更したいのですが、良い方法はありますでしょうか?

    • 締切済み
    • PHP
  • PHPでCSVの読み込みができません。

    PHP4+ApacheでWebアプリケーション(問い合わせフォーム)を開発しています。 普段はApache+PHPを導入したWindowsマシンでコーディングしていて、CSVファイルも開きます。 しかし、開発サーバ(Linuxマシン、ApacheとPHPのバージョンは同じ)へアップロードすると Windowsマシンで読み込みができていたCSVファイルが読み込みができなくなります。 CSVファイルの文字コードShift-JISで各項目は""でくくってあります。1行あたり10項目で20行固定です。 CSVファイル読み込みする理由は定義ファイルとして読み込んむためで、各行には宛先や問い合わせ内容・タイトル等を設定し、定義ファイルの番号(3桁の数字)によって問い合わせフォームを切り替えています。 ちなみにPHPの文字コードはUTF-8です。 例) "f01","パソコンセミナー申込","","","","","","","","" "f02","インターネットに触れてみよう。","","","","","","","","" "f03","申込期限2009年1月末,"","","","","","","","" "f04","hoge@aaa.jp","hage@bbb.jp","debu@ccc.jp","","","","","","" "f05","support@ddd.jp","","","","","","","",""  :  : "f20","○○○","20","△△△","","","","","","" 1行目は問い合わせフォーム名、2行目と3行目はフォーム内容のコメント、4行目は担当者宛のメールアドレス、5行目は自動応答用のメールアドレス、6行目以降は問い合わせフォームの任意設定項目(f20の場合、○○○:好きな食べ物は?、20:文字数20文字、△△△:3つ以内で記入してください)を表します。 問い合わせフォーム本体PHPと入力チェック等を行う外部ライブラリPHPを用いています。現状は、本体PHPでCSVをfopenで開いて、CSV読み込みにはfgetcsv()を使用しています。指定行以内でループさせ、該当の行の該当項目を指定しています。 CSVファイルはテンプレートのCSVファイルをコピー関数で複製・リネームしていますが テンプレートファイル内の各項目(各行先頭項目)はしっかりコピーされています。 Windows環境下では mb_convert_encodingを使用して、読み込み・書き込み(Shift-JIS⇔UTF-8変換)ともに動いています。 しかし、Linux環境下では、まったく読み込みすらできません。 Linuxで読み込みができないのがどうしてもわかりません。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • phpメールフォームから送信されたデータをcsvで保存したい

    eWeb様のphpメールフォームスクリプトデータを 参考にさせて頂いているのですが URL:http://php.eweb-design.com/1301_mail.html フォームで入力してもらってメールで送信して頂いた データをcsvなどで自動に保存できたらと思っています。 fputcsvなどいろいろと調べては見たのですが 技術的に詳しいことが分からないので 質問させて頂きました。

    • ベストアンサー
    • PHP
  • 添付ファイル送信可のPHP

    通常のフォームにて入力したものをメールにて送信されてくる様にまではできたのですが、 添付ファイル(画像など)を併せて送信させる事ができません。 今あるPHPファイル(cgiではなくPHPを使用しています)にどのような項目を追加すればよいのでしょうか? 説明不足があれば追記してまいりますのでご教授の程宜しくお願い致します。

  • phpでcsvファイルから二次元配列を作る

    php初心者です。 phpでcsvファイルを読み込んで、 配列[csvの行番号][項目名(csv一行目の内容)]=各々の値 という二次元配列を作りたいのですが、作り方が全く分かりません。 どなたか教えてください。

    • ベストアンサー
    • PHP
  • PHP5+MySQL5で作成するアンケートシステムについての質問です。

    PHP5+MySQL5で作成するアンケートシステムについての質問です。 あるホームページのアンケートリンクを押すと 1、phpファイルにアクセス 2、phpファイルからDBにアクセスし、運用フラグを調べる 3、「停止中」の場合はブランクページを表示  「運用中」の場合はアンケートフォーム(.html)を表示 という仕様なんですが、 管理側フォーム一覧画面での 例) 北海道用アンケート    停止中 編集 フォームの表示 東京用アンケート     運用中 編集 フォームの表示 大阪用アンケート     停止中 編集 フォームの表示 ・ ・ ・ 「フォームの表示」を押下すると 添付したファイルのようにアンケートフォームが格納されてるURLと そのアンケートのフォームを表示させたいんですが、 「フォームの表示」のリンク先のURLの表示ではなく下部に表示しているアンケートフォームのURL取得、表示 の仕方が分からないんですが一体どうすれば良いんでしょうか。

    • ベストアンサー
    • PHP
  • PHPでのフォーム

    よろしくお願いします。 PHPでフォームを作成しております。 例えば電話番号の入力チェックを行う際にはpreg_matchを使用して可能かと思いますが 電話番号の項目が必須ではなく、入力された時のみにチェックするにはどのように記述すればよいでしょうか?

    • ベストアンサー
    • PHP
  • phpメールフォームから送信・登録されたデータをcsvで保存する方法

    質問があります。よろしくお願いします。 タイトルの通りにPHPのメールフォームから送信・登録されたデータを メール送信とは別に、ログ一覧のようにcsvファイルに保存したいのです。 似たような質問を探しまして、こちらの質問とほぼ同じ質問でして URL:http://okwave.jp/qa3279798.html こちらの質問主様が引用しているフォームメールは利用していたので、 URL:http://php.eweb-design.com/1301_mail.html? 回答にあるソースを同じように利用してみようと思ったのですが、 挿入場所が分からず上手く利用できません。 php4でANo.4の回答者様が明記したソース(最後に明記)を 上記のメールフォームで利用する場合はどこに挿入すればいいのでしょうか。 それともこのフォーム用に何か書き足したりしないとならないのでしょうか。 (email、nameなどの送信項目名部分は自分用に合わせて書き換えて試しました) 分かる方いましたら、ご回答のほうよろしくお願いします。 ↓↓明記してあったソース↓↓  $DATA1 = array("メールアドレス","名前","アンケート");//1行目を格納   $DATA2 = array($email,$name,$Anke_to);//2行目を格納   $WriteList = array($DATA1,$DATA2);//2次元配列にする   $res_file = fopen("Sample.csv",'w+');   foreach($WriteList as $list){     for ($i =0 ;$i < 3;$i++){       if($i==2){//アンケート項目か         fwrite($res_file, $list[$i]);       }else{         fwrite($res_file, $list[$i].",");       }     }     fwrite($res_file, "\r\n");//改行を挿入   }   fclose($res_file);

    • ベストアンサー
    • PHP
このQ&Aのポイント
  • MF-CJ-7300CDWを使用してパソコンでスキャンを実行しようとした際、スキャンデータを保存するパソコンの名前が表示されないという問題が発生しています。
  • 現在の環境はWindowsイレブン無線LANで接続され、関連するソフト・アプリは特にありません。電話回線は光回線を使用しています。
  • この問題の解決策について、ご教示いただけると幸いです。
回答を見る