PHPプログラムにてアンケートを作成したのですが


データベース(php my admin)の登録が出来ず困っております。

作成したのは以下のアンケートのページとソースになるのですが

ページ http://oskuni7.sakura.ne.jp/A_DATA_UPLOAD/QUESTIONAIRE/questionaire1.php

ソース http://oskuni7.sakura.ne.jp/A_DATA_UPLOAD/QUESTIONAIRE/questionaire.txt

データベース登録の際に発生したエラーは以下の二つの形式です。その他は全く問題なく登録できます。

●1つ目はラジオボタン

チェックし登録したはずの文字がきちんと反映されない。データベース画面では登録されるはずのデータが空白になる。

●2つ目はチェックボックス形式

チェックしたはずの文字が反映されない。データベース画面では登録されるはずのデータが空白になる。(チェックボックス形式の場合いくつかチェックされたものをひとつの変数に入れ登録しようとしているのですがこれは無理なのでしょうか?)

上記の二つの改善点がある場合どのように変更すればいいか教えて頂いてよろしいでしょうか。

よろしくお願いいたします。

回答の条件
  • 1人2回まで
  • 登録:2008/11/14 03:47:22
  • 終了:2008/11/15 14:24:25

ベストアンサー

id:kn1967 No.1

kn1967回答回数2915ベストアンサー獲得回数3012008/11/14 05:09:15

ポイント80pt

(1)チェックボックス

方法1:添え字を付けて明確に指定する

<INPUT NAME="名前[1]" TYPE="checkbox">ho
<INPUT NAME="名前[2]" TYPE="checkbox">ge

方法2:添え字を付け無いで上の行から順に数えるようにする

<INPUT NAME="名前[]" TYPE="checkbox">ho
<INPUT NAME="名前[]" TYPE="checkbox">ge

受け取る時には添え字付き(方法2の場合はゼロからの連番)とする。

$_POST[名前][1]

既にご理解いただけたかもしれませんが

チェックボックスは複数選択が可能なのですから

受ける側も複数(=配列)用意しないといけないって事なのです。

どうしても単数で受けたいということであれば

方法3:個別に名前を付ける

<INPUT NAME="名前1" TYPE="checkbox">ho
<INPUT NAME="名前2" TYPE="checkbox">ge

受け取る時は個別に受け取る

$_POST[名前1]
$_POST[名前2]

という方法もあるにはありますが

項目が増えたり減ったりする度にプログラムを変更する事になりますので

使う場面はあまりありません。


(2)ラジオボタン

<INPUT NAME="名前" TYPE="radio" VALUE="ho">ho
<INPUT NAME="名前" TYPE="radio" VALUE="ge">ge

選択されている項目のVALUE値が$_POST[名前]という形で取得できます。


(共通)

何1つとして選択されていない場合は$_POST[名前]は作られませんので

if (isset($_POST[名前])) {
    echo "何も選択されていません";
} else {
    echo $_POST[名前] . "が選択されています";

}

といったような措置を取る必要があります。

ラジオボタンであるならば

<INPUT NAME="名前" TYPE="radio" VALUE="ho" checked>ho
<INPUT NAME="名前" TYPE="radio" VALUE="ge">ge

というようにデフォルトとして

どれかにチェックを入れておくという措置を取るという手もあります。

(チェックボックスでも同様の手が使えますが、通常は使いません。

デフォルトでチェックしておくことに意味があるのかどうか考えてみてくださいね)

id:aiomock

ご回答ありがとうございます。

2008/11/14 07:45:44

その他の回答(1件)

id:kn1967 No.1

kn1967回答回数2915ベストアンサー獲得回数3012008/11/14 05:09:15ここでベストアンサー

ポイント80pt

(1)チェックボックス

方法1:添え字を付けて明確に指定する

<INPUT NAME="名前[1]" TYPE="checkbox">ho
<INPUT NAME="名前[2]" TYPE="checkbox">ge

方法2:添え字を付け無いで上の行から順に数えるようにする

<INPUT NAME="名前[]" TYPE="checkbox">ho
<INPUT NAME="名前[]" TYPE="checkbox">ge

受け取る時には添え字付き(方法2の場合はゼロからの連番)とする。

$_POST[名前][1]

既にご理解いただけたかもしれませんが

チェックボックスは複数選択が可能なのですから

受ける側も複数(=配列)用意しないといけないって事なのです。

どうしても単数で受けたいということであれば

方法3:個別に名前を付ける

<INPUT NAME="名前1" TYPE="checkbox">ho
<INPUT NAME="名前2" TYPE="checkbox">ge

受け取る時は個別に受け取る

$_POST[名前1]
$_POST[名前2]

という方法もあるにはありますが

項目が増えたり減ったりする度にプログラムを変更する事になりますので

使う場面はあまりありません。


(2)ラジオボタン

<INPUT NAME="名前" TYPE="radio" VALUE="ho">ho
<INPUT NAME="名前" TYPE="radio" VALUE="ge">ge

選択されている項目のVALUE値が$_POST[名前]という形で取得できます。


(共通)

何1つとして選択されていない場合は$_POST[名前]は作られませんので

if (isset($_POST[名前])) {
    echo "何も選択されていません";
} else {
    echo $_POST[名前] . "が選択されています";

}

といったような措置を取る必要があります。

ラジオボタンであるならば

<INPUT NAME="名前" TYPE="radio" VALUE="ho" checked>ho
<INPUT NAME="名前" TYPE="radio" VALUE="ge">ge

というようにデフォルトとして

どれかにチェックを入れておくという措置を取るという手もあります。

(チェックボックスでも同様の手が使えますが、通常は使いません。

デフォルトでチェックしておくことに意味があるのかどうか考えてみてくださいね)

id:aiomock

ご回答ありがとうございます。

2008/11/14 07:45:44
id:pahoo No.2

pahoo回答回数5960ベストアンサー獲得回数6332008/11/14 06:50:55

ポイント80pt

1つ目はラジオボタン

チェックし登録したはずの文字がきちんと反映されない。データベース画面では登録されるはずのデータが空白になる。

ソースを見ると、ラジオボタンの name 属性を指定する変数値 M2 をDBにinsertしています。

各々のラジオボタンに value 属性を持たせ、その値を M2 としてDBにinsertすべきです。


2つ目はチェックボックス形式

チェックしたはずの文字が反映されない。データベース画面では登録されるはずのデータが空白になる。(チェックボックス形式の場合いくつかチェックされたものをひとつの変数に入れ登録しようとしているのですがこれは無理なのでしょうか?)

ソースを見ると、チェックボックスのすべての value 属性が同じ変数値 M4 となっています。これでは、どの複数のチェックボックスを選択したとしても M4 の値が insert されてしまいます。

各々のチェックボックスに別々の value 属性を持たせ、その値を M4 としてDBにinsertすべきです。

複数の値をDBに登録するにはいくつかの方法があります。

  1. チェックボックスの項目毎に別々のカラムを割り当てる。
  2. 複数の値を適当なデリミタ(区切り文字)で区切って、1つのカラムに代入する。

後者でしたら、チェックボックスの value 属性を配列変数にして、その配列の値を結合すればいいでしょう。

PHPでチェックボックスを配列のように扱う」を参考にしてください。

id:aiomock

ご回答ありがとうございます。

2008/11/14 07:45:46

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

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

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

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

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