- - PR -
select文で、データ修正時にMySQLに正しく反映されない
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2004-05-19 13:49
こんにちは。
LinuxサーバーにてMySQLとPHPを使ったHTMLによるシステムを構築中です。 HTMLのフォームのリスト(▼で選ぶタイプ;select)でリストメニュー一覧からセレクトしたデータを送信して、MySQL table1に反映させています。選択するリストのデータも、別のMySQL Table2から引っ張ってきています。 データの登録は上手くいったのですが、データの修正時にエラーになります。 1.正常に登録されたデータを修正のためにHTML画面でPHPからselectコマンドで読み込む。このときフォーム上では、正しいデータ(仮にこれをa01とする)がtable1より読み込まれ表示される。▼の一行目にはa01が入っており、▼を押してみると、その下には選択リストの項目(table2からselectコマンドで読込)が正常に並んでいる。したがって、a01はtable1と table2の両方があり重複表示される。<−これは例えばユーザがa01をb01に変更したい場合の選択肢で、ここでa01やb01をtable2から表示されているものを選んで修正ボタン(MySQL updateコマンドをtable2に対して発行)を押すと正常にtable1に修正が実行される。 問題は下記です。 2.表示項目を何も触らずに修正(上記1と全く同じMySQL updateコマンドをtable2に対して発行)ボタンを押す。 3.MySQLで確認すると、a01の代わりに“row4[category]”というHTML 言語のselect文中の項目名がはいってしまいます。 4.ちなみに、修正字に▼から再度a01(table2からの選択の扱い)を選択して修正した場合は、正しいデータがMySQLに反映されます。しかしこの場合a01は修正したくないわけで、わざわざ▼を押し多くの選択肢の中からa01を選び直すのは、システムとしておかしいですよね。。。 ★下にHTML中のPHP select文を添付します。 <select name="maker_name"> <?PHP if ($row4[maker_name] != "") { print("<option value='row4[maker_name]'>$row4[maker_name]</option>\n"); } else { print("<option value='invalid'>--新規登録--</option>\n"); } $sql = "select maker_name from goods_makers"; $result41 = mysql_query($sql, $con); $row41 = mysql_num_rows($result41); $count41 = 1; for ($i=0;$i<$row41;$i++) { //Creating PopUp LIST from DATA $tmp41_maker_name[$count41] = mysql_result($result41,$i,0); print("<option value='$tmp41_maker_name[$count41]'>$tmp41_maker_name[$count41]</option>\n"); $count41++; } ?> </select> ★下記が、HTML中のPHPから発行しているMySQLのupdate部です。★ if ($update) { //修正ボタン実行時 $sql = "select * from goods where product_no = '$product_no'"; $result4 = mysql_query($sql, $con); $row4 = mysql_fetch_array($result4); if ($row4[product_no] == $product_no) { $sql = "update goods set maker_name='$maker_name', where product_no = '$product_no'"; $result4 = mysql_query($sql, $con); } } 以上、よろしくお願いいたします。 |
|
投稿日時: 2004-05-19 14:15
4行目(?)で
print("<option value='row4[maker_name]'>$row4[maker_name]</option>\n"); 同じような内容で 16行目の場合 print("<option value='$tmp41_maker_name[$count41]'>$tmp41_maker_name[$count41]</option>\n"); $ がついてますが、意図的に4行目の $ を外したのなら、恐らく変数とは見做されず "row4[make_name]" と表示されるのが「通常処理」ですし、 $ が付いてない事が 「不本意な」状態ならば $ をくっつけて試してみるのも良いかと。 それから、 update文のところで、 if ($row4[product_no] == $product_no) { この、$row4[product_no] にはselect による結果セットの項目の値が入るかと 思いますが、 ダブルクォートやシングルクォートで囲わなくてもよろしかった ですかね? 後、私の経験上 $row4['maker_name'] の類は、直接比較したりせずに、一度 バッファに値だけコピーして、コピーされた側の純然たるPHP変数使うとトラブルが 少なくなるような気もしますが。 |
|
投稿日時: 2004-05-20 21:00
コブラさんへ
$でうまくいきました〜!!! ずーっと悩んでいました、これで又前進できます♪ 本当にありがとうございました。 MySQLとPHPを使うときに参考になる技を紹介・解説しているサイトなどをもしもご存知でしたら教えてください。m(_ _)m |
|
投稿日時: 2004-05-21 23:05
http://www.bitscope.co.jp/tep/MySQL/quickMySQL.html
ここ、詳しいでしょ? http://www.spencernetwork.org/link.html 片っ端からリンク辿る(笑) |
1