• ベストアンサー

変数で、<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']は全く無視されてしまいます。 書き方として間違っているのでしょうか・・? どうかご指導よろしくお願いいたします。

  • PHP
  • 回答数7
  • ありがとう数7

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

  • ベストアンサー
回答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

  • WHILEで取り出しループ中にさらにSQL文を入れたいです。

    こんばんは。 いつもお世話になっております。 またはまってしまったみたいで、どうにもわからなく なってしまいました。 どうかご指導よろしくお願いいたします。 使用環境はPHP5+Apche+MySQL4.0です。 2つのテーブルから【一覧リスト】というページを作って mysq_fetch_array関数で、行をループで呼び出しました。 ここまでは出来たのですが、取り出したキー情報を もとに、別テーブルの情報(文字列)を取り出したい のです。 以下、試してみたコードです。 //SQL発行 $rs = mysql_query("select * from uriage", $conn); //1件ずつ取り出すループ while( $rec = mysql_fetch_array( $rs, MYSQL_ASSOC)){ echo "<tr>"; echo "<td>".$rec['oder_no']."</td>"; $sql = "(select*from syouhin where syouhin_id = '".$rec["syouhin_id"]."')"; $res = mysql_query($sql); $rows = mysql_fetch_array($res); echo $rows["syouhin_name"]; echo "<td>".$rec['siiresaki']."</td>"; echo "<td>".$rec['tanka']."</td>"; echo "</tr>"; } Parse error: syntax error, unexpected T_ECHO というエラーが返ってきています。 エラーの行数はecho $rows["syouhin_name"]; の部分です。 何が悪いのかすら判らなくて…。 どうか、ご指導よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • while文の内容を変数に取り込む方法

    PHPとMySQLを使って、顧客管理システムを作っています。 While文の内容を、変数に取り込む方法についてお尋ねします。 MySQLに登録されている名簿の名前を表示させるスクリプトが下記なのですが、 while ($row_s = mysql_fetch_array($rs_s)){ echo $row_s[name]. "<br>¥n"; } ここでechoされる内容を、変数に入れることはできないかと思っています。 下記のようにやると、一番最後の名前だけが変数 $name に入ってしまいます。 while ($row_s = mysql_fetch_array($rs_s)){ $name = $row_s[name]. "<br>¥n"; } 全部を取り込むには、どうすればいいでしょうか?いろいろやってみたのですが、うまくいきません。 わかる方いたら、教えて下さい。

    • ベストアンサー
    • PHP
  • php

    while($row = mysql_fetch_array($res,MYSQL_NUM)) { echo $row[1]."\n"; ここの文字コードを調べたいのですがどう書いたらいいでしょうか? 又参考になるサイトがありましたらお願いします

  • 連動させたいセレクトボックスについて。

    こんにちは。DB+PHPが初心者のものです。 前にもここで質問させていただきましたが、 自分なりにコードを書いてみたので コードの訂正、ご教授をよろしくお願いいたします。 セレクトボックス1には、[table 1]の、種類が入り れレクトボックス2には、[table 1]の種類に連動して、[table 2]の名前が選択できるようにする。 下記のようにソースを書いてみましたが、 table1の値は、セレクトボックスでちゃんと表示されますが、table2はセレクトボックスは表示されるものの、何も値がありません(T_T) 動きとしては、table1のセレクトボックスで選択したら、その項目をDBへ問い合わせ、その項目に対応した、DBに登録されているtable2の値を二つ目のセレクトボックスに表示させたいです。 <html> <body> <select name="mkoumoku"> <option selected>-------------</option> <?php //DB接続 $dbcon=mysql_connect("localhost","abcd","defg"); //DB選択 mysql_select_db("zozozo"); //table1を取得 $res=mysql_query("select distinct * from table1"); while ($rows=mysql_fetch_array($res)) { echo "<option value=\"".$rows['id']."\">".$rows['kind']."\n"; } echo "</select>"; ?> <select name="skoumoku"> <option selected>-------------</option> <? //table1に連動して項目を変えたいところのコード $res1=mysql_query("select * from table2 where key =$_POST[mkoumoku] order by id"); while ($rows=mysql_fetch_array($res1)) { echo "<option value=\"".$rows['id']."\">".$rows['name']."\n"; } //Dbクローズ mysql_close($dbcon); ?> </body> </html>

    • ベストアンサー
    • PHP
  • DBから行を取得したフィールド名を意図的に変えたいのです。

    こんばんは。 いつもお世話になっておりますm(__)m またはまってしまったみたいで、どうにもわからなく なってしまいました。 どうかご指導よろしくお願いいたします。 使用環境はPHP5+Apche+MySQL4.0です。 PHPより、フォーム画面で、【入力】→【確認画面】→【登録完了報告画面】まで、意図した動きが出るように なったので、【一覧リスト】というページを作って mysq_fetch_array関数で、行をループで呼び出しました。 ここまでは出来たのですが、フィールドに入っている 値が1のときは”販売中” 2の時は”販売終了”と 入力したいのです。 以下、試してみたコードです。 //SQL発行 $rs = mysql_query("select * from uriage", $conn); //1件ずつ取り出すループ while( $rec = mysql_fetch_array( $rs, MYSQL_ASSOC)){ echo "<tr>"; echo "<td>".$rec['oder_no']."</td>"; echo "<td>".$rec['syouhin']."</td>"; echo "<td>".$rec['siiresaki']."</td>"; echo "<td>".$rec['tanka']."</td>"; echo "<td>" $a = .$rec['situation'].; if($a == 1){ echo "販売中"; }else{ if($a == 2){ echo "販売終了"; } echo "</td>"; echo "</tr>"; 私なりに調べてみたのですが、_fetch_array関数で 最後の行にきたらFALSEになるとの事で、 途中にIFで分岐させたのが悪いのかな、とは 思ったのですが・・・・。 どうすれば、回避できるのかもわからなくて・・。 どうか、ご指導よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • PHP mysql_fetch_assocについて

    いつもお世話になっております。早速ですが下記のソースにて、SQLのクエリではレコードが2行(phpMyAdminで確認)出てきます。何故whileが繰り返してくれないのか分からず悩んでおります。($counterも2で止まる)長文でお手数ですがどうかお力添えの程お願い致します。(文字数制限にてSQL文は省略してます) $sql = "SELECT * FROM 省略"; $res = mysql_query($sql,$conn); echo "<form method=\"POST\" action=\"edit.php\">"; echo "<table class=\"login mb10\" border=\"1\" cellspacing=\"0\" width=\"650\">"; echo "<tr><td class=\"form\">日にち</td><td class=\"form\" colspan=\"3\">".$date."</td></tr>"; $counter = 1; //これが繰り返してくれない while($stadium = mysql_fetch_assoc($res)){ //2回目以降はtableタグを付加 if($counter > 1){echo "<table>";} echo "<tr><td>試合順</td><td colspan=\"2\">".$counter."試合目</td><td>対象</td></tr>"; echo "<tr><td>対戦カード・時間</td><td>"; //チーム情報 $sql = "SELECT * FROM 省略"; $res = mysql_query($sql,$conn); echo "<select name=\"team1_".$counter."\">\n"; while($team1 = mysql_fetch_assoc($res)){ echo "<option value=\"".$team1["team_id"]."\""; if($row["team1"] == $team1["team_id"]){echo " selected";} echo ">".$team1["team_name"]."</option>\n"; } echo "</select>対"; $sql = "SELECT * FROM 省略"; $res = mysql_query($sql,$conn); echo "<select name=\"team2_".$counter."\">\n"; while($team2 = mysql_fetch_assoc($res)){ echo "<option value=\"".$team2["team_id"]."\""; if($stadium["team2"] == $team2["team_id"]){echo " selected";} echo ">".$team2["team_name"]."</option>\n"; } echo "</select></td>\n"; //時刻を反転させる $date_s = strrev($stadium["schedule_time"]); $minute_s = strrev(substr($date_s,0,2)); $hour_s = strrev(substr($date_s,2,2)); echo "<td><select name=\"hour_".$counter."\">"; $hour = 8; while($hour < 22){ echo "<option value=\"".$hour."\" "; if($hour_s == $hour){echo "selected";} echo ">".$hour."</option>"; $hour ++; } echo "</select>時"; echo "<select name=\"minute_1\">"; $minute = 0; while($minute < 60){ echo "<option value=\"".$minute."\" "; if($minute_s == $minute){echo "selected";} echo ">".$minute."</option>"; $minute = $minute + 15; } echo "</select>分</td>\n"; //チェック echo "<td rowspan=\"2\"><input type=\"checkbox\" name=\"delete_".$counter."\" value=\"1\"></td></tr>\n"; echo "<tr><td class=\"form\">審判・場所</td><td>"; //チーム情報 $sql = "SELECT * 省略"; $res = mysql_query($sql,$conn); echo "<select name=\"umpire1_".$counter."\">"; while($umpire1 = mysql_fetch_assoc($res)){ echo "<option value=\"".$umpire1["team_id"]."\" "; if($umpire1["team_id"] == $stadium["umpire1"]){echo "selected";} echo ">".$umpire1["team_name"]."</option>"; } echo "</select>&"; $sql = "SELECT * FROM 省略"; $res = mysql_query($sql,$conn); echo "<select name=\"umpire2_".$counter."\">"; while($umpire2 = mysql_fetch_assoc($res)){ echo "<option value=\"".$umpire2["team_id"]."\" "; if($umpire2["team_id"] == $stadium["umpire2"]){echo "selected";} echo ">".$umpire2["team_name"]."</option>"; } echo "</select></td>\n"; //球場データ $sql = "SELECT * FROM 省略"; $res = mysql_query($sql,$conn); echo "<td>"; if($counter == 1){ echo "<select name=\"stadium_".$counter."\">"; while($sta = mysql_fetch_assoc($res)){ echo "<option value=\"".$sta["stadium_id"]."\" "; if($sta["stadium_id"] == $stadium["stadium"]){echo "selected";} echo ">".$sta["stadium_name"]."</option>"; } echo "</select>"; }else{ echo "&nbsp;"; } echo "</td></tr>\n"; echo "</table>"; $counter++; } echo "<table>変更するテーブル</table>"; echo "</form>";

    • ベストアンサー
    • PHP
  • 検索結果を出すためには?(phpとmysql利用で)

    ある画像を押したら、検索結果が出る方法がわかりません。 たとえば、「A」「B」「C」の画像を作成しておき、「A」の画像を押したときにMYSQLで作成したデータベースの中から「A」だけ出す方法がわかりません。(画像からリンクする方法はわかります) 「A」という画像を押すと「akekka.php」を出すように作成したのですが、できません。知恵を貸してください。 <?php $sql= "select * from jyusyo where fuk = '愛媛県'"; $result = mysql_query($sql); $rows = mysql_num_rows($result); if($rows == 0){ echo "<p>該当データがありません。</p>\n"; exit; } else { echo "<table border=\"1\">\n"; echo "<tr>\n"; echo "<th>詳細</th>\n"; echo "<th>登録日<br></th>\n"; echo "<th>府県名<br></th>\n"; echo "<th>住所<br></th>\n"; echo "<th>名前</th>\n"; echo "</tr>\n"; while($row = mysql_fetch_array($result)){ $id = $row["id"]; echo "<tr>"; echo "<a href=\"meisai.php?id=$id\">",$id,"</a>\n"; echo "</td><td>"; echo $row["sho"]; echo "</td><td>"; echo $row["day"]; echo "</td><td>"; echo $row["fuk"]; echo "</td><td>"; echo $row["jyu"]; echo "</td><td>"; echo $row["nam"]; echo "</td></tr>"; } echo "</table>\n"; } ?>

  • while文の中にwhile文を書きたいのですが。。。

    while文の中にwhile文を書きたいのですが。。。 現在、下記ソースでプログラムを記述しております。 下記ソースですと、1回目のループのデータは抽出できるのですが、2回目のループだとデータが抽出できません。。 <? while($item0_3 = mysql_fetch_array($res0_3)){ ?> <tr> <td class="A"> <select name="work_partner_com[]"> <? while ($item5_2 = mysql_fetch_array($res5_2)) {?> <option value="<?=$item5_2["com_name"]?>"><?=$item5_2["com_name"]?></option> <? }?> </select> </td> <td class="B"> <select name="work_com[]"> <? while ($item5_3 = mysql_fetch_array($res5_3)) {?> <option value="<?=$item5_3["name"]?>"><?=$item5_3["name"]?></option> <? }?> </select> </td> </tr> <? } ?> 1回目のwhile文で、データーベースの指定したテーブルに格納されている数 2回目のwhile文で、データーベースの指定したテーブルに格納されているマスタデータ数 ご教授いただけますでしょうか。

    • ベストアンサー
    • PHP
  • GETメソッド ID MYSQL

    分からないことがありましたのでご質問をさせて頂きます。 現在作成してる仕様なのですが、 フォームの一つの項目のリンクを設置し、別のページに渡し そこで更に詳細な情報をMYSQLからひっぱってきて表示させようとしております。 そこでGETメソッドを使って行おうとしているのですが、どうしても 変数の受け渡しがうまくいきません。 こちらがそのコードになります。 1,フォーム <td><a href="shousai.php?code=<?php echo $row['id'];?>">詳しくはこちら</a></td> 2,詳細ページ(shousai.php) <?php echo var_dump($_GET["id"]); $id = $_GET["id"]; $con = mysql_connect('localhost','aaaa','aaa'); if (!$con) { print("MySQLへの接続に失敗しました"); exit; } if (!mysql_select_db("database")) { print("データベースへの接続に失敗しました"); exit; } $sql="select * from table where id ='$id'"; $result=mysql_query($sql,$con); //SQL文の発 $rows=mysql_num_rows($result); while($row = mysql_fetch_array($result)){ ?> <table border ="1"> <tr><td><?php echo $row["name"]; ?></p></td></tr> <tr><td><?php echo $row["address"]; ?></td></tr> <tr><td><?php echo $row["station"]; ?></td></tr> <?php } ?> </table> 2の詳細ページにてvar_dumpで$_GET["id"];の値を受け取ってるか 確かめたのですがNULLになっており、ページになにも反映されません。 フォームからリンクで値を送り、それをきっかけにデータベースに接続して詳細を表示させたいと思っております。 どなたかご存知の方お伺いできませんでしょうか?

    • ベストアンサー
    • PHP
  • WHERE句で一致しない場合を判断させる方法

    下記のようなコードで$mysql_Codeで一致しない場合は、 $html_Code .= '<tr><td colspan="4">条件に一致する項目はありません。</td></tr>'; をさせたいと考えているのですが思うようにいきません。 $mysql_Code = "SELECT * FROM infotable WHERE name='$kisetsu' AND kudamono='$kudamono'"; mysql_set_charset('utf8'); $mysql_Row = mysql_query($mysql_Code,$mysql); $html_Code = ""; if(!mysql_fetch_array($mysql_Row)){ $html_Code .= '<tr><td colspan="4">条件に一致する項目はありません。</td></tr>'; } while($row = mysql_fetch_array($mysql_Row)){ $id = $row["id"]; $name = $row["name"]; $kudamono = $row["kudamono"]; $coment = nl2br($row["coment"]); $html_Code .= "<tr><td>$id</td><td>$name</td><td>$kudamono</td><td>$coment</tr>\n"; } といったやり方でやると、一致するはずの一部のフィールドが表示されなかったりします。 $mysql_Codeで一致するフィールドが見つかったかどうかを !mysql_fetch_array($mysql_Row) で判断させているのですが、これはダメなのでしょうか。 そういう場合はどのようにするのがいいのでしょうか。

    • ベストアンサー
    • PHP

専門家に質問してみよう