phpでメールフォームを作っています。
注文用のフォームなのですが注文番号を自動で割り当て
メール送信時に表示させたいと思っております。
全5桁位で重複させない番号をランダムで振れればいいのですが
mysqlと連動などしていないのでこれは無理でしょうか?
00001~99999まで通し番号で振り99999になったら00001に戻ると
いう形式でも構わないのですがいずれは重複してしまうのかと
悩んでおります。
phpには知識がないもので伝わりづらい質問かと思いますが
方法を具体的に教えて頂けますと幸いです。
アドバイスや参考サイトでも構いませんので宜しくお願い致します。
No.6ベストアンサー
- 回答日時:
追記ですが、お詫びに、そのdata_order.plを簡易的に見るphpを作りましたので必要でしたら使ってやってください。
・show_list.php ---------------------------------------------
<html><body>
<?php
$temp = $new_no = '';
$temp_ar = $new_ar = $new_list = array();
$data_mail = './data_order.pl';
$DATA_LIST = fopen( $data_mail , 'r');
flock($DATA_LIST, LOCK_SH);
while(!feof($DATA_LIST)){
$temp = trim(fgets($DATA_LIST));
$temp_ar = explode("+", $temp);
array_push($new_ar, $temp);
}
flock($DATA_LIST, LOCK_UN);
fclose($DATA_LIST);
foreach($new_ar as $value){
$new_list = explode('+', $value);
if(!empty($new_list[0])) print "<li>" . $new_list[0] . " = " . $new_list[1];
}
?>
</body></html>
----------------------------------------------------------------
お返事ありがとうございます。
再度教えて頂きました通りテスト送信したところエラーもなく
正常に送信され番号も1つづつ増えるのが確認できました!
data_order.plにも正常に値が書き込まれており本当に助かりました。
現在は、ソースの内容を完全に理解できる程ではありませんが自分で
作れるようになるためにこれからも頑張ってみようと思います。
最後までわかりやすく教えて頂きましてありがとうございました!
No.5
- 回答日時:
大変失礼致しました。
別な作業の合間に記してしまったので、最後の最後に微妙に間違っているところがありました。
ただ、最初に私が記したのをテストしたら何もエラーがでませんでしたが、asd3330さんが記してくれたのを行ったら同様なエラーがでました。
asd3330さんのを見たらバックスラッシュが¥マークではなかったので、この辺がエラーの要因に思えます。
エラーが出たら、改めてバックスラッシュを打ち直してみてください。
========================================
$name = $time = $temp = $new_no = $new_data = $i = '';
$temp_ar = $new_ar = $last_data = array();
$name = $_POST['name'];
$data_mail = './data_order.pl';
if(!empty($_POST['name'])) $name = $_POST['name'];
$time = time();
$DATA_ALL = fopen( $data_mail , 'r+');
flock($DATA_ALL, LOCK_EX);
while(!feof($DATA_ALL)){
$i++;
$temp = trim(fgets($DATA_ALL));
if($i == '1'){
$temp_ar = explode("+", $temp);
$new_no = $temp_ar[0] + 1;
$new_data = $new_no ."+". $name;
}
array_push($new_ar, $temp);
} // end_while(!feof($DATA_ALL)){
array_unshift($new_ar, $new_data);
$last_data = implode("\n", $new_ar);
$last_data = trim($last_data);
rewind($DATA_ALL);
ftruncate($DATA_ALL, 0);
fwrite($DATA_ALL, $last_data );
flock($DATA_ALL, LOCK_UN);
fclose($DATA_ALL);
========================================
No.4
- 回答日時:
>参考までにですが1づつ足していくプログラムはどのように書けば
これもいくつか方法がありますが、先頭もしくは、最後に追加した物を抜き出して、listで分けて処理する方法と、管理するものだけ、別に保存するって方法も、ありますよー。
90 ← この部分に、番号を書いて、使う時は抜き出すか。
90<>裕次郎<>ドラム<>おいらのドラムは嵐を呼ぶぜ。
(↑この一文を読み込んで、分解して、カウントするか。)
89<>ハナ肇<>ドラム<>アッと驚く、為五郎~♪。
88<>植木等<>ギター<>お呼びでない?こりゃまた失礼しました。
・・・
1<>テスト<>品物<>テストを始めます。
ランダムにしなかったのは、まず、簡単な事と、100番目のお客さんとか、やりたかったので。
でも、ANo.3さんは、そらでかけるんですねー。
ちょっとすごいかも。
私は、何かを見ながらなでないと、出来ないというか、覚えていない。(苦笑。
CGIは、最初は人のスクリプトを見られるから、自分が作ろうとしている物に、似ている物をパクる・・・、いや、参考にした方がいいですよ。
http://asahikawa-s.com/cgi/
ここから、シンプルとかで、検索して、分かりそうなスクリプトを、研究するとか。
もしくは、初心者用の本をもう2冊くらい買うとか、図書館で借りるとか。
できれば、注文用のフォームというのなら、クロスサイトスクリプティングやデータの汚染とかも、見ていた方がいいですよ。
PHPは、それほど難しい言語ではないので、いろいろと挑戦してみてくださいね♪
No.3
- 回答日時:
単純に連番を付けるだけでしたらMySQLなどは要らないと思います。
むしろそういうのはどのようにデーターを取得し、どのようにデーターを活用するか、だと思います。ANo.2さんへの回答お礼から、具体的な1を足してゆくスクリプトは、
メールを送信するのは mail関数なので、その前に記します。メールフォームで受け取ったのを各変数に入れます。
あくまでも例なのでご自分に合わせてください。htmlspecialcharsなどのチェックは省いています。
行頭のインデントは実際はタブですが、ここで見やすくするために全角スペースを入れています。
=============================
$your_name = $your_time = $temp = $new_no = $new_data = $i = ''; // 変数初期化
$temp_ar = $new_ar = $last_data = array(); // 配列初期化
// メールフォームhtmlの名前記入がname="your_name" になっているとして
$your_name = $_POST['your_name'];
$data_mail = './data_order.pl'; // データーファイルへのパス。パーミッションは606
if(!empty($_POST['name'])) $you_name = $_POST['name']; //氏名
$your_time = time();
$DATA_ALL = fopen( $data_mail , 'r+');
flock($DATA_ALL, LOCK_EX);
while(!feof($DATA_ALL)){
$i++;
$temp = rtrim(fgets($DATA_ALL));
if($i == '1'){
$temp_ar = explode("+", $temp);
if(!empty($temp_ar[0])) $ex_no = $temp_ar[0];
if($ex_no <= '0') $new_no = '1';
else $new_no = $ex_no++;
$new_data = $new_no ."+". $your_name;
}
$new_ar = array_push($new_ar, $temp);
} // end_while(!feof($DATA_ALL)){
$new_ar = array_push($new_ar, $new_data);
$last_data = implode("\n", $new_ar);
rewind($DATA_ALL);
ftruncate($DATA_ALL, 0);
fwrite($DATA_ALL, $last_data );
flock($DATA_ALL, LOCK_UN);
fclose($DATA_ALL);
=============================
済みません、時間がないので確認していません。
より簡素でスマートな記述があると思います。php4でも動くと思います。
この回答への補足
お忙しい中、何度もお返事頂きましてありがとうございます。
まずは、data_order.pl(空のファイル)をつくりサーバーへアップ後
パーミッションを666に変更しました。
名前のinputのnameがnameなのでyuor_nameをnameに変更し
mb_send_mailの前に以下のソースを追加しました。
$name = $time = $temp = $new_no = $new_data = $i = ''; // 変数初期化
$temp_ar = $new_ar = $last_data = array(); // 配列初期化
// メールフォームhtmlの名前記入がname="name" になっているとして
$name = $_POST['name'];
$data_mail = './data_order.pl'; // データーファイルへのパス。パーミッションは606
if(!empty($_POST['name'])) $name = $_POST['name']; //氏名
$time = time();
$DATA_ALL = fopen( $data_mail , 'r+');
flock($DATA_ALL, LOCK_EX);
while(!feof($DATA_ALL)){
$i++;
$temp = rtrim(fgets($DATA_ALL));
if($i == '1'){
$temp_ar = explode("+", $temp);
if(!empty($temp_ar[0])) $ex_no = $temp_ar[0];
if($ex_no <= '0') $new_no = '1';
else $new_no = $ex_no++;
$new_data = $new_no ."+". $name;
}
$new_ar = array_push($new_ar, $temp);
} // end_while(!feof($DATA_ALL)){
$new_ar = array_push($new_ar, $new_data);
$last_data = implode("\n", $new_ar);
rewind($DATA_ALL);
ftruncate($DATA_ALL, 0);
fwrite($DATA_ALL, $last_data );
flock($DATA_ALL, LOCK_UN);
fclose($DATA_ALL);
何度かテスト送信してみたのですがメール送信までは
正常に行われるのですが送信完了画面で以下のエラー出てしまいます。
(メールフォームはHTML_QuickFormで生成しており入力画面→確認画面→送信完了画面に移行します。)
Warning: array_push() [function.array-push]: First argument should be an array in /hoge/form.php on line 370
Warning: implode() [function.implode]: Bad arguments. in /hoge/form.php on line 371
指す場所は以下のソースです
$new_ar = array_push($new_ar, $new_data);
$last_data = implode("\n", $new_ar);
また、data_order.plに送信後に何も書き込まれていないのですが
これが原因でしょうか?
パーミッションを606でも試してみましたが結果は同じでした。
番号をメール送信時に何で取得するのかがわからずでいろいろ試してみたところ
以下のようにメールに送信されました。
(名前は太郎で送信しています。)
(例)php側の表示→メール表示
$data_mail→./data_order.pl
$DATA_ALL→Resource id #38
$new_data→1+太郎
なにか参考になるといいのですが原因がわかりますでしょうか?
No.2
- 回答日時:
だぶらない乱数を取得する方法は、いくつかあります。
簡単に書くと、
乱数を取得して、その数値が、配列の中になければ、配列に入れる。
再帰でも、while文でも、繰り返せばいいだけです。
これを、とりあえず100件を作成・保存、100件になったら、保存を読み込んで、次の100件を作れば、出来ます。
http://q.hatena.ne.jp/1107225699
http://okwave.jp/qa3153280.html
この辺が参考になるかな。
でも、面倒じゃないですか?
それに、数が増えれば、増えるほど、処理が重くなりますし。
PHPだけなら、1000件以上は、重いでしょう。
単純に、Noを1から足していくのはダメでしょうか?
Noは、前の数値+1で、楽ちんでだぶらない。w
IDとPassで管理して、だぶらせません。
IDは、登録の際に重複を検索すれば、OK。
お返事ありがとうございます。
言われてみれば確かに負荷が掛かってきそうですね。
正直そこまで考えれませんでした・・・
>単純に、Noを1から足していくのはダメでしょうか?
Noは、前の数値+1で、楽ちんでだぶらない。w
かぶらずに番号が振れればいいのでこれでもいいような気がします。
idやpassで管理できれば理想なのですがそこまでの技術がないもので・・・
参考までにですが1づつ足していくプログラムはどのように書けば
いいものでしょうか?
お手数ですが宜しくお願い致します。
No.1
- 回答日時:
注文したら、番号、注文者、注文時間time() をファイル(任意のdata_order.plとか)に保存します。
次に注文があったら、そのファイルを読み込み、最後に書き込んだ注文者の番号に 1を足して、新規に保存すれば、通し番号になると思います。
1を足すところで、最後の番号が99999なら1に戻るifを付けるとか。
同じ人が注文した場合はどうするかは、作成者の意図に寄るところと思いますが。
この回答への補足
お返事ありがとうございます。
>注文したら、番号、注文者、注文時間time() をファイル(任意のdata_order.plとか)に保存します。
なんとなく意味はわかるのですが具体的な方法がわからないので
#2の方も同じ方法があるとアドバイスを頂いたので1づつ足す方向で
検討しようと思います。
>1を足すところで、最後の番号が99999なら1に戻るifを付けるとか。
そこまで大規模なものになるか微妙なとこですがそこまでとなると
やはりmysqlなどを併用するべきなのでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(ネットショッピング・通販・ECサイト) moonwalkbabyで注文されて届いた方いますか? 2 2023/04/12 23:31
- その他(ネットショッピング・通販・ECサイト) 垢バンになってしまうのでしょうか? 1 2022/09/17 00:25
- クレジットカード ANA マイレージクラブのお客様番号の変更の仕方 3 2023/03/22 17:09
- その他(プログラミング・Web制作) 入力フォームへ、データを自動的に入力するプログラム。どうやって作る? 4 2023/01/16 10:24
- PHP $_SESSIONに渡した後はそのまま使っても問題ありませんか? 3 2022/11/08 22:17
- その他(IT・Webサービス) [PayPay銀行キャッシュカード拾得の件] このメールは本物か? 6 2022/09/15 21:52
- Word(ワード) ワードファイルに入っている脚注番号に割り込んで、新しい脚注を入れる 2 2023/05/26 00:56
- Excel(エクセル) EXCEL 指定した曜日に番号を振って、最大値までいったら1に戻る当番表 5 2022/07/20 16:46
- Excel(エクセル) Excelで連続して重複する行数の違う列を参照する方法 5 2023/04/23 06:15
- その他(悩み相談・人生相談) 「不在のため荷物を持ち帰りました」というメールのあとに、悪質なリンクが貼ってありました。差出人が電話 3 2022/06/11 17:09
このQ&Aを見た人はこんなQ&Aも見ています
-
10代と話して驚いたこと
先日10代の知り合いと話した際、フロッピーディスクの実物を見たことがない、と言われて驚きました。今後もこういうことが増えてくるのかと思うと不思議な気持ちです。
-
スマホに会話を聞かれているな!?と思ったことありますか?
スマートフォンで検索はしてないのに、友達と話していた製品の広告が直後に出てきたりすることってありませんか? こんな感じでスマホに会話を聞かれているかも!?と思ったエピソードってありますか?
-
「覚え間違い」を教えてください!
私はかなり長いこと「大団円」ということばを、たくさんの団員が祝ってくれるイメージで「大円団」だと間違えて覚えていました。
-
おすすめのモーニング・朝食メニューを教えて!
コメダ珈琲店のモーニング ロイヤルホストのモーニング 牛丼チェーン店の朝食などなど、おいしいモーニング・朝食メニューがたくさんありますよね。
-
お風呂の温度、何℃にしてますか?
みなさん、家のお風呂って何℃で入ってますか? ぬるめのお湯にゆったり…という方もいれば、熱いのが好き!という方もいるかと思います。 我が家は平均的(?)な42℃設定なのですが、みなさんのご家庭では何℃に設定していますか?
-
phpで連番
PHP
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~12/2】 国民的アニメ『サザエさん』が打ち切りになった理由を教えてください
- ・ちょっと先の未来クイズ第5問
- ・【お題】ヒーローの謝罪会見
- ・これが怖いの自分だけ?というものありますか?
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・【大喜利】【投稿~11/22】このサンタクロースは偽物だと気付いた理由とは?
- ・お風呂の温度、何℃にしてますか?
- ・とっておきの「まかない飯」を教えて下さい!
- ・2024年のうちにやっておきたいこと、ここで宣言しませんか?
- ・いけず言葉しりとり
- ・土曜の昼、学校帰りの昼メシの思い出
- ・忘れられない激○○料理
- ・あなたにとってのゴールデンタイムはいつですか?
- ・とっておきの「夜食」教えて下さい
- ・これまでで一番「情けなかったとき」はいつですか?
- ・プリン+醤油=ウニみたいな組み合わせメニューを教えて!
- ・タイムマシーンがあったら、過去と未来どちらに行く?
- ・遅刻の「言い訳」選手権
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
CSVデータの行数カウントをした...
-
ログファイルが一定行数を超え...
-
自動で番号を振りたい
-
ログファイルの古い日付の行を...
-
PHP5でCSVの指定行データだけを...
-
Resource id #3 と表示されま...
-
CSVファイルの最終行のデー...
-
VC++の構造体について。
-
C言語でCSVファイルの行数を読...
-
PHPでの単語の出現回数表示
-
ヒアドキュメントの中のfor文
-
$_SESSIONに二次元配列を使える...
-
C言語の配列をPush(追加)する...
-
PHP 多次元配列変数のデータ受...
-
行列
-
mysql_fetch_arrayでレコードが...
-
$_SESSIONについて教えて下さい。
-
array_mapの再帰処理がうまく行...
-
プルダウンメニューにDBの内容...
-
配列をmb_ereg_replaceで一気に...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
別ファイルの構造体の値を読み...
-
Resource id #3 と表示されま...
-
CSVファイルの最終行のデー...
-
複数行のデータのPOST処理に関して
-
ヒアドキュメントの中のfor文
-
バイナリファイルの内容を、そ...
-
FortranのOPEN文
-
CSVデータの行数カウントをした...
-
C言語でCSVファイルの行数を読...
-
stdClass Objectを連想配列のよ...
-
エラーメッセージ(無効な間接...
-
csvの内容を行単位で削除したい
-
【PHP】csvファイルへの書き出...
-
PHP5でCSVの指定行データだけを...
-
UTF-8のXMLがSJISのPHPで文字化け
-
doxygenを使用する環境について
-
PHPでCSVの一部の行を編集したい
-
PHP 別ドメインへのファイル保存法
-
PHPで、CSVファイルを、指定し...
-
curlをPHPで書く方法
おすすめ情報