• ベストアンサー

変数で、<td></td>ごと吐き出したいです。

こんにちは。 いつもお世話になっております。 20項目ほどある項目の検索画面を作りたくて 色々考えながら作業をしております。 ------------------------------------------------ 【試している事】 $td = ""; $td2 = ""; という変数を用意して、IF文の分岐によって それぞれ $td .= "<td>年</td>"; $td2 .= "<td>".$rows['year']."</td>\n"; という値を挿入していきたいのです。 echoで吐き出されている値の確認をしたのですが、 echo "$td\n"; は、ちゃんと吐き出されてくれるのですが、 while ($rows=mysql_fetch_array($res)) { echo "<tr>\n"; echo "$td2\n"; echo "</tr>\n"; になると、吐き出されるのは<td></td>だけで 間の$rows['year']は全く無視されてしまいます。 書き方として間違っているのでしょうか・・? どうかご指導よろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.7

今気づいたのですが、$td2に値を入れてるのって、SQL文の実行より前じゃないですか?

sibazuke
質問者

お礼

こんにちは。 ご指導ありがとうございます。 ご指摘の通りでした。 $row=mysql_fetch_array($res) の前に、$td2 に$row["year"]を入れていたために 何も無い とみなされていたみたいです。 $row=mysql_fetch_array($res) の後に、もう一度IF文で$td2を書いたら ちゃんと表示する事ができました。 ありがとうございました。

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

その他の回答 (6)

回答No.6

No3で回答した者です。 $td2の値が最初から<td></td>だったのだとしたら、最初から$rows['year']の値は空だという事ですよね?だとすると$td2の値は関係なくて、SQL文からの結果の取得自体がうまく行ってないという事でしょう。 同じSQL文をmysqlのコマンドクライアントから入力して意図した結果が出ますか?出ていれば、今やった方法と同じ要領でprint_rなどを使用して$resや$rowsの内容を表示させてみましょう。

すると、全ての回答が全文表示されます。
  • moon_night
  • ベストアンサー率32% (598/1831)
回答No.5

プログラムが一部しか掲示してないので、正確に回答することは不可能です。 上のプログラムがすべての場合は表示されないのはあたりまえです。 $td = ""; $td2 = ""; while ($rows=mysql_fetch_array($res)) { $td .= "<td>年</td>"; $td2 .= "<td>".$rows['year']."</td>\n"; } echo "$td\n"; echo "$td2\n"; こうすれば意図どおりになると思います。 これでも駄目で、まだ回答がほしい場合はプログラムの全文を掲示してください。

sibazuke
質問者

お礼

こんにちは。 何度もすみません。 ご指導ありがとうございます。 お言葉に甘えて、ソースを貼り付けました。 よろしくお願いいたします。 <?PHP //DBに接続 $con = mysql_connect("ホスト名","root","パスワード"); mysql_select_db("DB名"); //POSTで受け取った値を変数にセット $aaa_year = $_POST["aaa_year"]; $aaa_year2 = $_POST["aaa_year2"]; //吐き出すSQL文のセット //SQLのSELECT内容 $select = ""; //テーブル行セット $td = ""; $td2 = ""; //年度のみ選択 if(($aaa_year != "") && ($aaa_year2 == "")){ $count +=1; $select .= " nenndo.year = ".$aaa_year." AND "; $td .= "<td align=\"center\" rowspan=\"2\" nowrap width=\"80\">年</td>"; $td2 = "<td align=\"center\">".$row["year"]."</td>\n"; } 文字数オーバーが出ましたので一旦分けます。

sibazuke
質問者

補足

続きです。 長くなってすみません・・。 // 年度を期間で選択 if(($aaa_year != "") && ($aaa_year2 != "")){ $count +=1; $select .= " nenndo.year >= ".$aaa_year." AND nenndo.year <= ".$aaa_year2." AND "; $td .= "<td align=\"center\" rowspan=\"2\" nowrap width=\"80\">年度</td>"; $td2 = "<td align=\"center\">".$row["year"]."</td>\n"; } $sql = ""; $sql .= "SELECT year,"; $sql .= "SUM(uriage),SUM(tanka),SUM(mouke)"; $sql .= " FROM syouhin,nenndo"; $sql .= " WHERE (".$select."syouhin.id = nenndo.id)"; $sql .= " GROUP BY year"; $res=mysql_query($sql,$con); ?> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <title>テスト</title> </head> <body> <?PHP echo "<table border=\"0\" cellpadding=\"2\" cellspacing=\"2\" bordercolor=\"#FFFFFF\" bgcolor=\"#COCOCO\">\n"; echo "<tr bgcolor=\"#FFFFFF\">\n"; echo "$td\n"; echo "<td colspan=\"3\" align=\"center\">1月</td>\n"; echo "</tr>\n"; echo "<tr bgcolor=\"#FFFFFF\">\n"; echo "<td align=\"center\" nowrap width=\"35\">売</td>\n"; echo "<td align=\"center\" nowrap width=\"35\" >個</td>\n"; echo "<td align=\"center\" nowrap width=\"35\">利</td>\n"; echo "</tr>\n"; echo "</tr>\n"; while ($row=mysql_fetch_array($res)) { echo "<tr bgcolor=\"#FFFFFF\">\n"; echo ("$td2");//---------------------【問題点】 //echo "<td align=\"center\">".$row["year"]."</td>\n";//--【こちらは表示される】 echo "<td align=\"right\">".$row[1]."</td>\n"; echo "<td align=\"right\">".$row[2]."</td>\n"; echo "<td align=\"right\">".$row[3]."</td>\n"; echo "</tr>\n"; } echo "</table>\n" ?> </body> </html>

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

原因としては$td2の値が意図通りではないとしか考えられないと思います。 $td2の値が意図通りのものになっているか、流れを追って見ていかないといけないと思います。 ・$td2に値を入れた直後 ・echo "$td2\n";の直前または直後 ・その他必要に応じて の箇所にprint文で$td2の値を表示させて、どこまで意図通りの動作をしているのか、一つ一つ確かめるしかないのでは。

sibazuke
質問者

お礼

ご指導ありがとうございます。 echo "td2\n"; を、ご指導いただいた三箇所に記述してみた のですが、いずれも、吐き出したのは <td></td>のみでした・・・_| ̄|○

すると、全ての回答が全文表示されます。
  • anmochi
  • ベストアンサー率65% (1332/2045)
回答No.3

1: while ($rows=mysql_fetch_array($res)) { 2: echo "<tr>\n"; 3: echo "$td2\n"; 4: echo "</tr>\n"; 5: } このソースは抜粋だろうか? 3行目の前に $td2 = $td2 .= "<td>".$rows['year']."</td>\n"; が要るんじゃないかなぁ・・・・。でないと、何回ループをまわしても現在行の$rows['year']の値は$td2に入らないよ。

sibazuke
質問者

お礼

ご指導ありがとうございます。 それが・・・。 echo "<tr>\n"; echo "$td2\n"; echo "</tr>\n"; で、吐き出されたHTMLをのソースも 見ているのですが、 <tr> <td><td> </tr> と、テーブルの情報はちゃんと吐き出している ようなのです。 $td2 = $td2 .= "<td>".$rows['year']."</td>\n"; を付け足してもみたのですが、$rows['year']は 空白になっていました・・・。

すると、全ての回答が全文表示されます。
  • moon_night
  • ベストアンサー率32% (598/1831)
回答No.2

$rows['year']に値が入っていないというオチはないですよね? というか、 while ($rows=mysql_fetch_array($res)) { echo "<tr>\n"; echo "$td2\n"; echo "</tr>\n"; だったら while ($rows=mysql_fetch_array($res)) { echo "<tr>\n"; echo $rows[1] ."\n"; echo "</tr>\n"; とかにしなくてはいけないのでは? 一部しかないので正確にはわかりませんが。

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

$rows['year']に値が入っていないというオチはないですよね? というか、 while ($rows=mysql_fetch_array($res)) { echo "<tr>\n"; echo "$td2\n"; echo "</tr>\n"; だったら while ($rows=mysql_fetch_array($res)) { echo "<tr>\n"; echo $rows[1] ."\n"; echo "</tr>\n"; とかにしなくてはいけないのでは? 一部しかないので正確にはわかりませんが。

sibazuke
質問者

お礼

ご指導ありがとうございます。 echo "<td>".$rows[year]."</td>"\n"; にすると、ちゃんとSQLテーブルの値が返ってきます。 なので、値が入っていなかった、という落ちでは 無いのです……_| ̄|○

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

関連するQ&A