ラジオボタンでのレコードの更新について - PHPプロ!Q&A掲示板

665

  • 0P

ラジオボタンでのレコードの更新について

質問日時 / 2007年9月22日 04:36    回答数 / 6件

Questioner:  carjinal20  このエントリーをはてなブックマークに追加 

キーワード / MySQL    更新    ラジオボタン   

二つめの質問になりますが、よろしくお願いします。MySQLのテーブル作成時に数字だけがカウントされるフィールドを3つ作りました。それを、3択のラジオボタンの操作によって数字を1ずつカウントしていきたいと考えているのですが、これも試行錯誤してみたのですがうまくいかず、投稿しました。

試行錯誤の内容

まず、レコードの追加時は3つの項目に「0」が入力されるようになっています。
ラジオボタン1つ1つのvalue属性に、value="<?=$row[フィールド名]?>" としました。
そして、更新実行ファイルでラジオボタンの変数を定義し、

$touhyou = $_POST["ラジオボタンのname属性"];
$query = "UPDATE テーブル名 SET フィールド名 = $touhyou+1, フィールド名 = $touhyou+1,
          フィールド名 = $touhyou+1 WHERE id = " .$id;

          としました。

まちがいだらけだと思いますが、よろしくお願いします。

この質問への意見の募集は締め切られ、ポイントは既に配分されました。
意見を投稿することはできますが、ポイントを受け取ることはできません。



ツリー一覧

┗A01TorrySegall失礼ながら、HTMLフォームの書き方が基本的に理解でき
 ┣A01-1carjinal20二つの質問に対し、丁寧なご指導、大変感謝いたします
 ┗A01-2carjinal20毎回、丁寧なご指導をいただきありがとうございます。
  ┣A01-2-1TorrySegall>$row["フィールド名"] の考え方が固まっていて と
  ┃┗A01-2-1-1carjinal20出来ました。ありがとうございます。参考書を見ながら
  ┗A01-2-2TorrySegallUPDATE文のエラーですが、最初の質問にあった$queryを

回答一覧

並び替え:

A01
answererTorrySegall [9月23日 21:06] (最終編集:9月23日 21:23)

失礼ながら、HTMLフォームの書き方が基本的に理解できてないように思えますが…

SQL文については知らないのですが、それだと
選択したラジオボタンに対応するフィールドの既存値をインクリメントしたものが、3つのフィールド"全て"にコピーされる
ことにならないでしょうか?

・ラジオボタンのvalueには、対応するフィールド"名"を与えておく。
・フォームから受け取ったラジオボタン"値"と同"名"のフィールド"値"だけをインクリメントして更新。

流れ的にはそうすべきところなので、

・html
  1. <input name="touhyou" type="radio" value="field1">
  2. <input name="touhyou" type="radio" value="field2">
  3. <input name="touhyou" type="radio" value="field3">

・php
  1. <?php
  2. ...
  3. $field_name = $_POST['touhyou'];
  4. $field_value = /* $field_nameフィールドから読み出した値 */;
  5. $query = "UPDATE テーブル名 SET $field_name = " . ++ $field_value . " WHERE id = " . $id;
  6. ...
  7. ?>

といった感じで書くべきもののように思います。
(繰り返しますが、SQL文は知りませんので $query の中身はあてずっぽ…)

この意見に回答する

ツリーへ TOPへ

A01-1
replyercarjinal20 [9月24日 00:29]

二つの質問に対し、丁寧なご指導、大変感謝いたします。ご指導どおりにやってみます。後ほど結果についてご報告いたします。ありがとうございました。

この意見に回答する

ツリーへ TOPへ

A01-2
replyercarjinal20 [9月25日 19:05]

毎回、丁寧なご指導をいただきありがとうございます。ひとつご質問がありまして、4行目の

/* $field_nameフィールドから読み出した値 */ というところなんですが、

例でけっこうなんですが、どのようなソースを入れたらよろしいでしょうか?

何故このようなご質問をしてしまったかと申しますと、フィールドの既存値を取得するというと
私が最初にご質問をした時の $row["フィールド名"] の考え方が固まっていて、それ以外の
値の取得の仕方が思い浮かばないのでご質問させていただきました。

念のため、この工程を経て更新が終了までの進行をご説明します。

1. まず、投票をしたいレコードを検索します。(HTMLファイル)
2. 検索したレコードのすぐ下に、ご質問の主題であるラジオボタンがあり、その内一つを選び
  投票する(レコードの既存値を呼び出す $row["フィールド名"]の変数定義があるPHPファイル)
3. 実行結果「何番のデータが更新されました」を表示するファイル (PHPファイル)

この3つのファイルから構成しています。

私がためしたやり方は、上記2.のファイルに3.のソースを組み込んでみました。
<FORM action=<?="$_SERVER["PHP_SELF"]?> method="POST"> というふうにして

UPDATEの後に続くソースは、++を付けた3項目の変数をカンマで区切って並べました。

結果はエラーになってしまいました。

長々と申し訳ありませんが、何卒よろしくお願いします。

この意見に回答する

ツリーへ TOPへ

A01-2-1 満足
replyerTorrySegall [9月26日 10:54]

>$row["フィールド名"] の考え方が固まっていて
というより、
「2.のスクリプトでしか、目的のフィールドが識別できない」
という考えに囚われているようにお見受けしますが。

2.で目的のフィールドを読み出すのに使ったidなり何なりを、フォームのhiddenに持たせてやれば如何でしょうか。
そうやって2.から渡されたidを利用して3.で改めてレコードを$rowに読み込んでやれば、3.の中でだって
$field_value = $row[$field_name]; で値が取れるじゃないですか。

…と、そういうことではないのかな?

この意見に回答する

ツリーへ TOPへ

A01-2-1-1
replyercarjinal20 [9月28日 02:55]

出来ました。ありがとうございます。参考書を見ながらやっているんですが、UPDATE文のSETの後に続く
表記が、「更新するフィールド名=更新後の値」それに更新するフィールドの数だけカンマで区切って
並べるというものだったので、やたらと$row[フィールド名]にこだわってしまいました。、
もう一度TorrySegallさんの今までご指導くださった内容をよく読んでやったら、
そうなんですよね。更新するフィールドはラジオボタンの押された場所ですから一つなんですよね。
申し訳ありません。知識不足とつまらないこだわりで、大変ご迷惑をおかけしました。
丁寧なご指導に大変感謝いたします。本当にありがとうございました。

この意見に回答する

ツリーへ TOPへ

A01-2-2 満足
replyerTorrySegall [9月26日 11:20]

UPDATE文のエラーですが、最初の質問にあった$queryを見るに
文字列の書き方がおかしいのではないでしょうか。

文字列をダブルクォートで定義した場合、変数名はその変数が持つ値に展開されますが、それだけです。
変数に対して演算を行なったつもりでも、その部分は解釈されません。
  1. <?php
  2. $hoge = 100;
  3.  
  4. echo "$hoge 個";      // 結果は「100 個」
  5. echo "$hoge+1 個";    // 結果は「100+1 個」
  6.  
  7. echo $hoge . " 個";   // 結果は「100 個」
  8. echo $hoge+1 . " 個"// 結果は「101 個」

この意見に回答する

ツリーへ TOPへ

<<質問一覧へ



Pick Up Q&A

Q
array_mergeの再帰処理の動作について
 このエントリーをはてなブックマークに追加 
A
>1個になったとき$leftを返しますが、 >このとき、最終的な$leftはnullになるかと思います。 いいえ、最後は「渡された配列をそのまま」返します。要素が2以上あるときとの違いは(並べ替えずに戻るので...

>>続きを読む

再帰関数は最初の内は混乱しますが、非常に上手く使える場面もいずれ出てきます。これを機会に学んでいけるといいですね。

▲解説者:岡本(アシアル株式会社 教育コーディネーター兼 システムエンジニア)