人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

php+mysqlのショッピングカートについて質問です

データベースのテーブル(item)

品番 |カテゴリー | 商品名 | 金額 | 在庫 |
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
item1 | item2 | item3 | item4 | item5 |
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
A001011 | デザイン |デザイン1 | 500 | 100 |
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
mai1 | 枚数 | 100枚 | 1000 | 100 |
・・・

商品はすべて1つのテーブルに登録してあります。

htmlのフォームを使って
<select name="design" id="design">
<option value="A001011">A001011</option>
</select>
<select name="mai" id="mai">
<option value="mai1">100枚</option>
<option value="mai2">200枚</option>
</select>

cart.phpで
品番 | 商品名 | 金額 |
ーーーーーーーーーーーーーーーーーー
item1 | item3 | item4 |
ーーーーーーーーーーーーーーーーーー
・・・
合計 | |
と、表示させたいです。

ソースを書く流れと見本のソースがあったら教えて下さい。よろしくお願い致します。

●質問者: kasai-de_eb
●カテゴリ:インターネット ウェブ制作
✍キーワード:CART HTML MySQL PHP カテゴリー
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● koriki-kozou
●100ポイント ベストアンサー

(1)仮にフォームでdesignが5で、maiがmai2だった場合、データベースに問い合わせるには以下のようなSQLが必要

SELECT `品番`,`カテゴリー`,`商品名`,`金額`,`在庫`,`item1`,`item2`,`item3`,`item4`,`item5` FROM item
WHERE `品番` = 5 AND `mai` = 'mai2'

一行目は常に変わらないけど5や'mai2'は受け取ったパラメータを代入しなければならないから下記のような具合で代入

. " WHERE 品番=" . mysql_real_escape_string($_POST['design'])
. " AND mai='" . mysql_real_escape_string($_POST['mai']) . "'"

例では $sql という変数に一度代入してあるので、まずは $sql に思い通り(上記の)SQLになっているかを echoで出力して確認してみて


(2)補足

一行目はカラムを列挙せずに SELECT * FROM item で済ませてもいいけど、個人的には必要なカラムを列挙しておくことを奨める

(*は自動処理に任せるってことなので、バグになってしまう場合も稀にある。面倒でも明記してあればミスに気づきやすい)

バッククォートは特殊文字や予約語が混じっていたりした場合のためのもので、特殊文字も予約語も含んでいないとはっきりわかっている場合は無くてもいい

シングルクォートは文字列を扱う場合に使う

mysql_real_escape_string は送られてきたパラメータに特殊文字を混入された場合でも問題ないようにするための措置


(3)訂正

過去の回答 http://q.hatena.ne.jp/1274775856 では大きなミスがありました

$sql に SQL を生成しただけで、データベースに問い合わせるという行が抜けてました

お詫びして訂正します

$result = mysql_query($sql) or die 'システムエラー3';
$row = mysql_fetch_assoc($result) or die 'システムエラー4';
echo $row['価格'];

http://php.net/manual/ja/function.mysql-fetch-assoc.php

◎質問者からの返答

有難うございます。

http://q.hatena.ne.jp/1274775856 について質問がしたいんですが、

require( '../config.php' );

// db connect

$link = mysql_connect( $db_host, $db_user, $db_password );

mysql_select_db( $db_name );

$result = mysql_query( 'set character set utf8' );


$sql = "SELECT * FROM item"

. " WHERE 種類 ='" . mysql_real_escape_string($_POST['desgin']) . "'"

. " AND 枚数 ='" . mysql_real_escape_string($_POST['mai']) . "'";

$result = mysql_fetch_assoc($link) or die 'システムエラー3';

$row = mysql_fetch_assoc($result) or die 'システムエラー4';

echo $row['価格'];

mysql_close($link);


?>

だと

$result = mysql_fetch_assoc($link) or die 'システムエラー3'; の文にエラーがでます。何か間違っていますでしょうか?


2 ●
●28ポイント

$result = mysql_fetch_assoc($link) or die 'システムエラー3';

だと流れ的に

$result = mysql_query($sql) or die 'システムエラー3';

な気がします。




データベースサーバに接続

$link = mysql_connect( $db_host, $db_user, $db_password );

データベースに接続

mysql_select_db( $db_name );

utf-8を使う

$result = mysql_query( 'set character set utf8' );

sqlを組み立てて

$sql = "SELECT * FROM item"
. " WHERE 種類 ='" . mysql_real_escape_string($_POST['desgin']) . "'"
. " AND 枚数 ='" . mysql_real_escape_string($_POST['mai']) . "'";

sqlをなげる。

$result = mysql_fetch_assoc($link) or die 'システムエラー3';

が、いきなり結果をください。

に、なってしまっているので、

$result = mysql_query($sql) or die 'システムエラー3';

結果を取得

$row = mysql_fetch_assoc($result) or die 'システムエラー4';

で一連の流れができあがります。

◎質問者からの返答

有難うございます。

$sql = "SELECT * FROM item"

. " WHERE 種類 ='" . mysql_real_escape_string($_POST['desgin']) . "'"

. " AND 枚数 ='" . mysql_real_escape_string($_POST['mai']) . "'";

の部分について何ですが、

上記のデータベースから呼び出すには

$sql = "SELECT * FROM item"

. " WHERE item1 ='" . mysql_real_escape_string($_POST['desgin']) . "'"

. " AND item1 ='" . mysql_real_escape_string($_POST['mai']) . "'";

であっているのでしょうか?

この辺りを説明してくれるサイト等知っていたら教えて下さい。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ