初心者です、PHP、MYSQLでユーザーが商品データを新規登録できるサイトを作りたいと思っています。


登録すると同時にfopenなどを使って商品の情報が書かれたhtmlファイルを作ろうと思っています(食べログの店舗登録のようなシステムを作ろうとしてます)

質問ですが、ファイル名を登録と同時に商品IDにするやり方を教えていただきたいです。

商品ID名はAUTO_INCREMENTで自動的に追加される形式を取っています。
この形式にはこだわってません。

また、そういう機能ならばfopenを使わなくても他にいい方法があるよ。
ということでしたらそちらも是非教えていただきたいです。

当方初心者ですので、リンクや書籍の紹介でもよいですが解説付きでお願いします。

回答の条件
  • 1人10回まで
  • 13歳以上
  • 登録:2011/06/22 18:42:40
  • 終了:2011/06/22 21:10:08

ベストアンサー

id:windofjuly No.1

うぃんど回答回数2625ベストアンサー獲得回数11492011/06/22 19:36:06

ポイント250pt

(1)大雑把な手順

手順としては、MySQLに対してデータ追加(INSERT)を実行し、その直後にAUTO_INCREMENTの値を取得してhtmlファイルを作成するという手順にすれば良いということになります

人力検索みたいに「登録しました」だけを表示しても良いですし、phpのechoで出力しても良いです

(2)AUTO_INCREMENTの値を取得する方法

直近のSQLで生成されたAUTO_INCREMENTの値を取得する方法は各種あり、下記一例です

例1:mysql_connect の場合は mysql_insert_id() でAUTO_INCREMENTの値を取得できます

http://www.php.net/manual/ja/function.mysql-insert-id.php

例2:LAST_INSERT_ID を使ってMySQLに問い合わせて値を取得できます

http://dev.mysql.com/doc/refman/5.1/ja/information-functions.html

※同時に複数の人がアクセスしてきた場合に違う人の値を取得したりしないかと心配してしまうかもしれませんが、MySQL側でセッション毎(接続毎)に情報を分けて管理してくれているのでcloseせずに連続して使っていれば心配は要りません

 

以下、余談

ブログやCMSなどで採用されているようにMySQLに毎回アクセスするのではなく、静的HTMLファイルを用いるのは時代遅れで管理も面倒ですよ(だからCMSなどを使うという方向になってしまう)

(1)MySQLとの接続以外に、ファイルシステムへの直接アクセス(fopenなど)が足かせになる

MySQLなどは同時アクセスなどにも自動対応してくれますがファイルシステムの制御は自前で行わなければならず、アクセスが増えてくるとphpなどの低速なシステムでは対応しきれなくもなる

(2)編集や削除、履歴やバージョン管理が面倒

HTMLファイル内のリンクをチェックして関連した画像ファイルなどを削除したりしなければならないので面倒

プログラムミスや操作ミス、何らかの突発的トラブルなどで消し忘れたりすると整合性が取れなくなる

(3)応答性はそれほど違わないどころか遅くなる

静的HTMLファイルだけでなく、php+MySQLで生成したページもキャッシュが効くので、応答性はそれほど違わない結果になる

面倒な作業をphpでプログラムするよりもMySQLなどから直で取り出すほうが結果的に早い

id:robopit

回答してくださってありがとうございます。

本文はもちろん、余談の方も興味深く読ませていただきました。

動的なページだと検索にかからないと思い込んでいたのですが、キャッシュというものでかかるんですね。

動的なページで商品の個別ページを作るとなると

検索結果を表示するとき詳細ページボタンなどを作って、押すと商品IDをセッションに保存し、そのセッションを利用してデータベースからLAST_INSERT_ID で情報を引っ張りだすという流れになるんでしょうか?

2011/06/22 20:06:03

その他の回答(1件)

id:windofjuly No.1

うぃんど回答回数2625ベストアンサー獲得回数11492011/06/22 19:36:06ここでベストアンサー

ポイント250pt

(1)大雑把な手順

手順としては、MySQLに対してデータ追加(INSERT)を実行し、その直後にAUTO_INCREMENTの値を取得してhtmlファイルを作成するという手順にすれば良いということになります

人力検索みたいに「登録しました」だけを表示しても良いですし、phpのechoで出力しても良いです

(2)AUTO_INCREMENTの値を取得する方法

直近のSQLで生成されたAUTO_INCREMENTの値を取得する方法は各種あり、下記一例です

例1:mysql_connect の場合は mysql_insert_id() でAUTO_INCREMENTの値を取得できます

http://www.php.net/manual/ja/function.mysql-insert-id.php

例2:LAST_INSERT_ID を使ってMySQLに問い合わせて値を取得できます

http://dev.mysql.com/doc/refman/5.1/ja/information-functions.html

※同時に複数の人がアクセスしてきた場合に違う人の値を取得したりしないかと心配してしまうかもしれませんが、MySQL側でセッション毎(接続毎)に情報を分けて管理してくれているのでcloseせずに連続して使っていれば心配は要りません

 

以下、余談

ブログやCMSなどで採用されているようにMySQLに毎回アクセスするのではなく、静的HTMLファイルを用いるのは時代遅れで管理も面倒ですよ(だからCMSなどを使うという方向になってしまう)

(1)MySQLとの接続以外に、ファイルシステムへの直接アクセス(fopenなど)が足かせになる

MySQLなどは同時アクセスなどにも自動対応してくれますがファイルシステムの制御は自前で行わなければならず、アクセスが増えてくるとphpなどの低速なシステムでは対応しきれなくもなる

(2)編集や削除、履歴やバージョン管理が面倒

HTMLファイル内のリンクをチェックして関連した画像ファイルなどを削除したりしなければならないので面倒

プログラムミスや操作ミス、何らかの突発的トラブルなどで消し忘れたりすると整合性が取れなくなる

(3)応答性はそれほど違わないどころか遅くなる

静的HTMLファイルだけでなく、php+MySQLで生成したページもキャッシュが効くので、応答性はそれほど違わない結果になる

面倒な作業をphpでプログラムするよりもMySQLなどから直で取り出すほうが結果的に早い

id:robopit

回答してくださってありがとうございます。

本文はもちろん、余談の方も興味深く読ませていただきました。

動的なページだと検索にかからないと思い込んでいたのですが、キャッシュというものでかかるんですね。

動的なページで商品の個別ページを作るとなると

検索結果を表示するとき詳細ページボタンなどを作って、押すと商品IDをセッションに保存し、そのセッションを利用してデータベースからLAST_INSERT_ID で情報を引っ張りだすという流れになるんでしょうか?

2011/06/22 20:06:03
id:windofjuly No.2

うぃんど回答回数2625ベストアンサー獲得回数11492011/06/22 20:44:34

ポイント250pt

No.1への返信への返信です 

 

簡単な構成例

・index.php(トップページ)

・input.php(新規登録処理)

・edit.php(編集処理)

・delete.php(削除)

・list.php(商品リスト出力)

・detail.php(商品詳細の出力)

ちょっと欲張りなプラスアルファ

・login.php(ログイン/ログアウト処理)

・cart.php(ショッピングカートの中身を出力して、支払い方法の選択画面などに誘導する)

 

動作を理解するための最低限な構成例

・list.php 商品リスト出力がトップページも兼ねる。新規登録ページへ飛ぶボタンも用意する

・input.php 新規登録処理

・detail.php 商品詳細の出力

 

最低限な構成例のような単純な構造ではセッションを使わずに作れます

(セッションはユーザー管理やショッピングカート管理などで使います)

1.商品リストの詳細ボタンをクリックするとpostあるいはgetで商品IDをdetail.phpに送る

2.detail.phpは商品IDでデータを検索・取得して、詳細ページとして出力する

 

最低限の構成例にチャレンジして、その後list.php にページング機能(複数のページに渡る場合の処理)や絞込み、並び替えなどを加えると基本部分は出来上がります

(並び替え情報などはクッキーに保存したりしておくと利便性があがるかもしれません)

 

さらにその後ログオンやカートなどを組み込む(セッションは必須ですね)と見た目はショッピングサイト同様になります

 

本格的な運用には、さらにセキュリティ面の考慮が必要になるため個人で作り上げるには年単位の時間を要しますが、見た目を整えて動きを理解するまででよければ(時間やその人の学習能力にもよりますが)1ヶ月から3ヶ月くらいで出来るようになるでしょう

 

最近の入門者向けの書籍はあまりみていませんが、php+MySQLで簡単なカートシステムを作るまでが載っているような本もあるはずですから、本屋でさがしてみるなどもしてみるといいと思います

 

「初心者です」がホームページ作成もはじめての方なのか、HTMLやCSSなどの基礎はある程度知ってるけどプログラミングはまったくの初めてなのか、プログラムの経験はあるけれどphpは初めてなのか、、、どこまで書けば終わりが見えるのか見えないのか判らないですけど、なんとなくは伝わりましたでしょうか?

id:robopit

ありがとうございます。

プログラムははじめですが、分かりやすく想定以上の完璧な回答でした。

これで締め切らせていただきます。

2011/06/22 21:09:27

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません