プロが教える店舗&オフィスのセキュリティ対策術

こんにちは。
いつもお世話になっております。

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']は全く無視されてしまいます。

書き方として間違っているのでしょうか・・?

どうかご指導よろしくお願いいたします。

A 回答 (7件)

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

    • good
    • 0
この回答へのお礼

こんにちは。
ご指導ありがとうございます。

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

ありがとうございました。

お礼日時:2005/04/29 16:56

No3で回答した者です。



$td2の値が最初から<td></td>だったのだとしたら、最初から$rows['year']の値は空だという事ですよね?だとすると$td2の値は関係なくて、SQL文からの結果の取得自体がうまく行ってないという事でしょう。

同じSQL文をmysqlのコマンドクライアントから入力して意図した結果が出ますか?出ていれば、今やった方法と同じ要領でprint_rなどを使用して$resや$rowsの内容を表示させてみましょう。
    • good
    • 0

プログラムが一部しか掲示してないので、正確に回答することは不可能です。



上のプログラムがすべての場合は表示されないのはあたりまえです。

$td = "";
$td2 = "";

while ($rows=mysql_fetch_array($res)) {
$td .= "<td>年</td>";
$td2 .= "<td>".$rows['year']."</td>\n";
}

echo "$td\n";
echo "$td2\n";

こうすれば意図どおりになると思います。


これでも駄目で、まだ回答がほしい場合はプログラムの全文を掲示してください。

この回答への補足

続きです。 長くなってすみません・・。
// 年度を期間で選択
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>

補足日時:2005/04/29 16:10
    • good
    • 0
この回答へのお礼

こんにちは。
何度もすみません。
ご指導ありがとうございます。

お言葉に甘えて、ソースを貼り付けました。
よろしくお願いいたします。
<?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";
}

文字数オーバーが出ましたので一旦分けます。

お礼日時:2005/04/29 16:10

原因としては$td2の値が意図通りではないとしか考えられないと思います。



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

ご指導ありがとうございます。

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

お礼日時:2005/04/29 16:05

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に入らないよ。
    • good
    • 0
この回答へのお礼

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

を付け足してもみたのですが、$rows['year']は
空白になっていました・・・。

お礼日時:2005/04/29 11:47

$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";

とかにしなくてはいけないのでは?

一部しかないので正確にはわかりませんが。
    • good
    • 0

$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";

とかにしなくてはいけないのでは?

一部しかないので正確にはわかりませんが。
    • good
    • 0
この回答へのお礼

ご指導ありがとうございます。
echo "<td>".$rows[year]."</td>"\n";

にすると、ちゃんとSQLテーブルの値が返ってきます。
なので、値が入っていなかった、という落ちでは
無いのです……_| ̄|○

お礼日時:2005/04/29 11:38

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!