• 締切済み

mysql+phpをつかったカートつくり。

こんにちは、php+mysqlを勉強しだして。日が浅いです。 いき詰まりました。どなたかおしえてください。いろいろとサイト検索してみたんですけど みつかりません。 ショッピングカートを作ろうとおもっています。 ーーー中略ーーー while($rec = mysql_fetch_array($result,MYSQL_ASSOC)){ print "<form name=\"form1\" method=\"POST\" action=\"link1_1.php\">"; print "<tr><td>"; print $rec['id']; print "</td><td>"; print $rec['cid']; print "</td><td>"; print $rec['pr']; print "\\</td><td>"; print "<select name=\"mny\"><option value=\"1\">1</option>"; print "<option value=\"2\">2</option>"; print "<option value=\"10\">10</option>"; print "</select></td><td>"; print "<input type=\"submit\" name=\"cart\" value=\"カートへ\">"; print "<td/></tr></from>"; } print "</table>"; 上記の文で、while文をつかって 商品を表示させることはできました。 問題は、 カートがおされたときの処理ができません;; カートの値はどうやって 設定したらよいのでしょうか?  うまく表現できなくて すみません。 if(isset($_POST['cart'])){  //カートがおされたとき $sql = "select max(ju_id) from table1";//最大値を取得 $result = mysql_query($sql); $row = mysql_num_rows($result); if($row != 0) { $ary = mysql_fetch_array($result); $ju_id = $ary[0] + 1; //$number = $ary[0] + 1;// 登録レコードのを生成 } $sql = "insert into jucyu set ju_id = $ju_id "; } 商品を表示させて、個数等指定して、カートへを 押したら、 一回目は表示されるんですが、うまく、mysqlへ書き込みができません。  うまく表現できなくて すみません。

みんなの回答

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

同じ環境がつくれないのでなんともいえませんが なおさなくちゃ行けない箇所は10やそこらはあると思います。 今回の引っかかっている部分はここ >$sql = "select max(num) from table1"; これを $sql = "select max(num) AS maxnum from table1"; としてください SQLで関数を実行した場合(この場合は最大値をとるMAX())にフィールド名が PHP側でひろえません。 そこで別名を「AS ○○」で拾えるようにします。 >$row = mysql_num_rows($result); はいらないでしょう・・・MAX値をとるSQLのnum_rowsを拾う意味がないので その上で >$ary = mysql_fetch_array($result); >$ju_id = $ary[0] + 1; とするのであれば $ary = mysql_fetch_array($result); $ju_id = $ary['maxnum'] + 1; としてみてください。 なおすべきところが多すぎてかなり混乱していると思います。 もっと基礎的なことから積み上げが必要ではないでしょうか?

bi_bi_
質問者

お礼

お忙しい中、 助言ありがとうございました。  もっと基礎から やっていきます^^

すると、全ての回答が全文表示されます。
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

>mysqlへ書き込みができません エラーがでていませんか? $result = mysql_query($sql) or die("$sql") などでエラーを拾ってみてください。 ちなみに >$ary = mysql_fetch_array($result); >$ju_id = $ary[0] + 1; の箇所はなにをやりたいのかわかりません。 テーブルに「0」というフィールドがあるのでしょうか?そうでなければ $ary[0]は常に空ですから$ju_idは1で、 insertするさいにju_idがプライマリ(ユニーク)になっているようであれば かならず競合しそうですね。 またHTMLの文法上もformとtableがうまくかみ合っていないように 見うけられます。ひとつひとつクリアしていかないとまだまだな感が否めません

bi_bi_
質問者

補足

回答ありがとうです。 やりたいことは、 カートがおしたら、 その文の注文番号を新たに生成して table1にかきこむことです。 もうちょっと詳しくかきます。 t2(商品テーブル) カラム名 型   制約     概要 id    int  not null  auto_incer p    varchar(8) code   varchar(3) t1(注文テーブル) ju_id    int  not null  auto_incer num    varchar(8)      連番(注文)番号 id    int  <html><head><body> <form name="form1" method="POST" action="php.php"> <table> <input type="submit" name="a" value="000"> <input type="submit" name="b" value="001"> </table> </form> <?php if(isset($_POST['a'])) { $ed = $_POST['a']; }elseif (isset($_POST['b'])) { $ed = $_POST['b'];} $con = mysql_connect('aaa','aaa',''); mysql_select_db('shop',$con); $sql = "select id, p from table2 where code= $ed"; $result = mysql_query($sql, $con); if($ed != "") { print "<table border=\"2\" align=\"center\">"; print "<tr><td>ID</td><td>個数</td><td>カート</td></tr>"; while($rec = mysql_fetch_array($result,MYSQL_ASSOC)){ $id = ($rec['id']); $price = ($rec['p']); print "<form name=\"form1\" method=\"POST\" action=\"php.php\">"; print "<tr><td>"; print $rec['id']; print "</td><td>"; print $rec['p']; print "\\</td><td>"; print "<select name=\"mny\"><option value=\"1\">1</option>"; print "<option value=\"2\">2</option>"; print "<option value=\"10\">10</option>"; print "</select></td><td>"; print "<input type=\"submit\" name=\"cart\" value=\"カート\">"; print "<input type=\"hidden\" name=\"h_id\" value=\" $id \">"; print "<input type=\"hidden\" name=\"h_p\" value=\" $p \">"; print "</td></tr></form>"; } print "</table>"; } ?> 表示画面 |ーー|ーー|ーー|ーーー| |I D|金額|個数|カート| |--|--|--|ーーー| |01 |50¥|3個|カート| |ーー|ーー|--|ーーー| |02 |50¥|2個|カート| |ーー|ーー|--|ーーー| |03 |50¥|1個|カート| |ーー|--|--|ーーー| 000に各等するcodeをwhile文で出力してます。 <?php $h_id = $_POST['h_id']; $h_price = $_POST['h_p']; if(isset($_POST['cart'])){ $sql = "select max(num) from table1"; $result = mysql_query($sql, $con); $row = mysql_num_rows($result); if($row != 0) { $ary = mysql_fetch_array($result); $num = $ary[0] + 1; // max値に1を足したものをです。新に生成してまして。 } 最初はこのようにしてmausqlにかきこみたかったんですけど、 $sql = "insert into table1 set num = $num"; コマンド プロンクト画面で$num に数字をいれると うまくはいります。 $num = $ary[0] + 1; 指摘してくださった これに原因があるのでしょうか?。  再度みてくださってたら、おしえてください。

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