1196397720 PHPとMySQLでアンケートを作成しています。


質問のテーブルは
[質問ID][質問内容]
1    好きな色は?
2    好きな犬は?

回答のテーブルは
[質問ID][回答内容]
1    赤
1    青
2    チワワ
2    コーギー

という状態だとします。これをtableタグで画像のような表にしたいと思っています。

自分で試したのは、質問タイトルと回答と分けてwhileで出力する方法と、最初は1列で出力してCSSのfloatで回り込ませる方法です。

しかし、もっとスマートに出来ないものかと思い、アイディアをいただければと思います。

回答の条件
  • 1人2回まで
  • 登録:2007/11/30 13:42:02
  • 終了:2007/12/07 13:45:04

回答(2件)

id:tukihatu No.1

牛乳先生(tukihatu)回答回数180ベストアンサー獲得回数322007/12/01 09:33:19

ポイント47pt

スマートかどうかは謎ですが、この場合一番楽な方法は、大きいテーブルをつくり、その中にもうひとつテーブルを作るのがいいかと

table

tr

td ----------------

table

tr

td 質問内容(一つ目)

/tr

tr

td 質問の答え

/tr

tr

td 質問の答え

/tr

/table

/td ----------------

td ----------------

table

tr

td 質問内容(二つ目)

/tr

tr

td 質問の答え

/tr

tr

td 質問の答え

/tr

/table

/td ----------------

/tr

という風な書き方にすれば、質問ごとにtdが増えるので、横にきれいに並びます。

echo <table><tr>//外枠
$i=0
while($quest = mysql_fetch_array($quest_res)){
echo <td>
echo <table><tr>//内枠
echo <td> 質問 </td>
echo </tr>
	
while($answer = mysql_fetch_array($answer_res[$i])){
echo <tr>
echo <td> 答え </td>
echo </tr>
}
echo </tr></table>
echo </td>
$i++
}
	
echo </tr></table>

↑イメージ的に作ってみました。DBは質問と答えがセットなテーブルだとやりやすいです。もちろんdivなどでも同じように対応できるはずです。

先に出力する文字をDBから取り出して格納しておくとソース見栄えもよくなります。

id:kt26

うーん、、私がコメントにて記載した方法と変わらないのではないでしょうか。しかも、そっちの方がテーブルの入れ子にしないので、スマート(簡略)だと思いますし。

2007/12/03 11:09:09
id:KeyKey No.2

KeyKey回答回数29ベストアンサー獲得回数42007/12/05 00:53:28

ポイント23pt
$ary = array(
    1 => array(
        'quest' => '好きな色は?',
        'answer' => array('赤', '青',),
    ),
    2 => array(
    ...
);

と配列に格納して。

foreach ($ary as $val) {
    $table['quest'] .= "<th>". $val['quest'] ."</th>\n";
    foreach ($val['answer'] as $key2 => $val2) {
        $table[$key2] .= "<td>". $val2 ."</td>\n";
    }
}

とするのはどうだろう?

$table['quest']に質問が入って、$table[0]...に一列に表示する回答が入っていく

id:kt26

確かにソースはシンプルで短いですが、余計複雑になりそうな気もします。それに、whileをforeachに変えただけのような気も。。

2007/12/05 16:52:54
  • id:tukihatu
    つまり
    td 1の質問
    td 2の質問
    /tr
    tr
    td 1の答え
    td 2の答え
    /tr
    tr
    td 1の答え
    td 2の答え
    /tr ~~~

    という風にしたいけど出力方法が大変。
    どうしたらスマート?という意ですか?
  • id:kt26
    そういう意味です。出力方法はその例で言いますと

    while($quest = mysql_fetch_array($quest_res)){
    echo <td> 質問 </td>
    }
    echo </tr>

    while($member = mysql_fetch_array($member_res)){
    echo <tr>

    while($answer = mysql_fetch_array($answer_res)){
    echo <td> 答え </td>
    }
    echo </tr>
    }

    このようにしています。質問の数は固定ではありませんので、それによって回答数も異なるわけで、設計方法(正規化)で悩みます。

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

トラックバック

  • 犬 画像のことならおまかせください。 ドッグDOGどっぐ~ 2008-12-21 11:35:45
    タイトル 全100画像、規格:JPG/4093x2894pixels/45MB/350dpi/CMYK☆送料無料☆リビングアート Vol.22 犬と猫 詳細 様ーな愛らしい表情を見せる犬と猫の写真集です。納期はおおよそ 3~6日(弊社営業日
  • 犬 画像を詳しく調べました。 ドッグDOGどっぐ~ 2009-01-31 05:48:25
    タイトル 全100画像、規格:JPG/4093x2894pixels/45MB/350dpi/CMYK☆送料無料☆リビングアート Vol.22 犬と猫 詳細 様ーな愛らしい表情を見せる犬と猫の写真集です。納期はおおよそ 3~6日(弊社営業日
「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

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

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