for文の組み合わせ方 [2]に関する質問

このQ&Aのポイント
  • 前回のコメントを受けて、データを取得して行列に店名と商品を表示する方法を実装したが、「SHOPIDが変わったら改行」という処理がうまくいかない状況にある。
  • ○を付ける処理をどのように実装すれば良いかわからない。
  • また、このPHPで作成された表をCSVに出力することは可能かどうか。
回答を見る
  • ベストアンサー

for文の組み合わせ方 [2]

http://oshiete1.goo.ne.jp/kotaeru.php3?q=2460708 の関連質問になります。 最初に前回コメントいただけた方にお礼申し上げます。 前回お伺いした方法で、 $sql="SELECT ID,ITEMNAME FROM ITEM ORDER BY ID"; $msql="SELECT SHOPID,SHOPNAME,ITEMNAME,IF(L.ITEM=A.ITEMID,'○','') FROM (SELECT I.ID AS ITEMID,S.ID AS SHOPID,SHOPNAME,ITEMNAME FROM ITEM I, SHOP S) AS A LEFT OUTER JOIN LINK L ON L.ITEM = A.ITEMID AND A.SHOPID = L.SHOP ORDER BY SHOPID,ITEMID"; でデータを取得し、 下記で行列に店名と商品を表示する事ができました。 $in = mysql_query($sql,$db) $in2 = mysql_query($msql,$db) $ln = mysql_num_rows($in); $ln2 = mysql_num_rows($in2); print("<TABLE border=1>"); print("<TR>"); print("<TD>"); print("</TD>"); for($i=0;$i<$ln;$i++) { $lw = mysql_fetch_row($in); print("<TD>".$lw[1]."</TD>"); } print("</TR>"); print("<TR>"); for($i=0;$i<$ln2;$i++) { $lw2 = mysql_fetch_row($in2); print("<TD>".$lw2[1]."</TD>"); //○を付ける処理 //print("<TD>".$lw2[3]."</TD>"); print("</TR>"); } print("</TABLE>"); ただ「SHOPIDが変わったら改行」という処理方法がわからずの状態になっています。 IF文で○じゃなければ<TD></TD>を埋め込む?などと思いやってみましたが やり方がおかしいのかうまくいっていません。 値の比較方法と、それをどのように組み込めばいいかコメントお願いします。 ※併せてですが、この後このPHPで作成された表をCSVに出力したいのですが、可能でしょうか?

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

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

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

前回SHOPIDと今回SHOPIDが異なれば改行とすれば良いです。 SHOPIDを保持なされては? CSV出力は不可能です。既に本文となる部分を表示させていますから。 別ファイルにダウンロード処理を持って、metaタグを利用すれば可能です。 vectorみたいに。

getamato
質問者

お礼

つながりにくい中コメントありがとうございます。 質問後ちょっと変更があり、別スレで改めて質問させていただくの でそちらでもよろしくお願いします。 ダウンロードの件・・・特に次回の質問にかかわってくるので 初心者な私に救いの手をお願いします。

関連するQ&A

  • for文の組み合わせ方

    PHPで以下のTableからデータを取ってきて 取り扱い表を作成したいと思っています。 Table:SHOPは店舗、Table:ITEMは商品、Table:LINKは 先の二つの紐付けを表します。 DBの保存データは、 Table:SHOP ID  SHOPNAME ------------------- 1   東京 2   大阪 3   福岡 (略) Table:ITEM ID ITEMNAME -------------------- 1  化粧品 2  家具 3  園芸 4  食品 5  家電 (略) Table:LINK ID  SHOP  ITEM --------------------- 1   1    4 2   2    5 3   3    1 4   3    2 (略) となっていて、結果として画面に   |化粧品|家具|園芸|食品|家電| ---------------------------------------- 東京|   |   |   | ○ |   | 大阪|   |   |   |   | ○ | 福岡| ○ | ○ |   |   |   | (略) と表示したいのですが、 $sql="SELECT A.ID,B.SHOPNAME,C.ITEMNAME FROM ・・・・・ としたのでは紐付けを単純に抽出するだけですし、 for文をどう使えば縦列に項目をだして○をつければ いいかがわかりません。 HELPお願いします。

    • ベストアンサー
    • PHP
  • foreachの表示に追加するには

    http://okwave.jp/qa2460708.html と同じようなテーブル構造で、同じようなhtmlへの書き出しを行っています。 No.1さんの回答の下記のスクリプトを参考にし、うまく表示することができました。 $sql="SELECT `ID`,`SHOPNAME` FROM `SHOP`"; $res = mysql_query($sql,$link); while ($rows = mysql_fetch_assoc($res)) { $SHOP[$rows["ID"]]=$rows["SHOPNAME"]; } $sql="SELECT `ID`,`ITEMNAME` FROM `ITEM`"; $res = mysql_query($sql,$link); while ($rows = mysql_fetch_assoc($res)) { $ITEM[$rows["ID"]]=$rows["ITEMNAME"]; } foreach($SHOP as $key1=>$val1){ foreach($ITEM as $key2=>$val2){ $LINK[$key1][$key2]="&nbsp;"; } } $sql="SELECT `SHOP`,`ITEM` FROM `LINK`"; $res = mysql_query($sql,$link); while ($rows = mysql_fetch_assoc($res)) { $LINK[$rows["SHOP"]][$rows["ITEM"]]="○"; } print<<<eof <table border> <thead> <tr> <th>&nbsp;</th> eof; foreach($ITEM as $key2=>$val2){ print "<th>$val2</th>"; } print<<<eof </tr> </thead> <tbody> eof; foreach($SHOP as $key1=>$val1){ print "<tr>"; print "<td>$val1</td>"; foreach($ITEM as $key2=>$val2){ print "<td>{$LINK[$key1][$key2]}</td>"; } print "</tr>"; } print<<<eof </tbody> </table> eof; しかし、下記のテーブルに項目が1つ追加され、それも表示できるようにして欲しいと依頼されました。 Table:SHOP ID  SHOPNAME STATION ------------------------ 1   東京 | 表参道 2   大阪 | 梅田 3   福岡 | 天神 (略) 結果としては下記のように表示したいです。 NAME |STATION|化粧品|家具 |園芸 |食品 |家電 | ------------------------------------------------ 東京 | 表参道|   |   |   | ○ |   | 大阪 | 梅田 |   |   |   |   | ○ | 福岡 | 天神 | ○ | ○ |   |   |   | (略) 配列をよく理解できていないため、スクリプトをそのまま真似して $STATION[$rows["ID"]]=$rows["STATION"]; を作ったり $SHOP[$rows["ID"]][$rows["STATION"]]=$rows["SHOPNAME"]; を作ったりして無理矢理展開してみようとしましたが やはり表がぐちゃぐちゃになってしまいます。 どうすればうまく表示できるか、アドバイス頂けませんでしょうか。

    • ベストアンサー
    • PHP
  • PHPでのデータ表示画面⇒CSV出力について

    先日より質問に対しコメントありがとうございます。 教えていただいた内容と自分でやった結果3つのSQLでデータを出力し出力順を揃えた方法で表ができました。 これをCSV形式で出力したいのですがこのまま出力できるのでしょうか?それとも別途方法をとる必要があるのでしょうか。 自分の中で今ひとつまとまらないので改めて質問させていただきます。 ソースへの指摘併せコメントよろしくお願いします。 ※現ソース <HTML> <BODY> <?PHP //DB接続部省略 $sql="SELECT I.ITEM_ID,I.ITEM_NAME FROM ITEMS AS I,LIST AS L・・・(略)"; $sql2="SELECT A.SHOP_ID,A.SHOP_NAME,A.ITEM_NAME, IF(L.ITEM_ID=A.ITEM_ID,'○','') FROM・・・(略)"; $sql3="SELECT S.SHOP_ID,S.SHOP_NAME FROM SHOP AS S ・・・(略)"; $rs=mysql_query($sql,$db); $rs2=mysql_query($sql2,$db); $rs3=mysql_query($sql3,$db); $line=mysql_num_rows($rs); $line2=mysql_num_rows($rs2); $line3=mysql_num_rows($rs3); print("<TABLE border=1>"); print("<TR>"); print("<TD>店舗名</TD>"); for($i=0;$i<$line;$i++) { $row=mysql_fetch_row($rs); print("<TD>".$row[1]."</TD>"); } print("</TR>"); print("<TR>"); for($i=0;$i<$line3;$i++) { $row3=mysql_fetch_row($rs3); print("<TD>".$row3[2]."</TD>"); for($j=0;$j<$line;$j++) { $row2=mysql_fetch_row($rs2); if($row2[3] == "") { print("<TD width=25> </TD>"); } else { print("<TD width=25>".$row2[3]."</TD>"); } } print("</TR>"); } print("</TABLE>"); mysql_free_result($rs); mysql_free_result($rs2); mysql_free_result($rs3); mysql_close($db); ?> </BODY> </HTNL>

    • ベストアンサー
    • PHP
  • foreachの間にテーブルの<TR>を出力

    HTMLのテーブルにデータを入れたいのですが、 6列ごとに改行の<tr></tr>を入れる方法が分かりません。 下のように並べたいです [ITEMNAME][ITEMNAME][ITEMNAME][ITEMNAME][ITEMNAME][ITEMNAME] [ITEMNAME][ITEMNAME][ITEMNAME][ITEMNAME][ITEMNAME][ITEMNAME] データは1~12個きますので、一行の時と二行にわたる時、<td></td>に何もデータが入らない時もあります。 今現在このような感じです。 <table width="600"> <tr> <?php foreach ($item_array as $item){ ?> <td width="100" align="center"> <?=$str = mb_strimwidth($item['ITEMNAME'], 0, 100, "...");?> </td> <?php } ?> </tr> </table> どうか宜しくお願い致します。 既に他で同じ内容が出ていますが、そちらでは理解して応用できませんでしたので改めて質問させて頂きました。ごめんなさい。

    • ベストアンサー
    • PHP
  • for文についてご教授ください

    javascriptを学習しています。初級者のためご教授のほどお願いします。 <!DOCTYPE html> <html lang="ja"> <head> <script> function kazu(){ var fObj = document.itemlist; var price1 = fObj.item1.options[fObj.item1.selectedIndex].value; var price2 = fObj.item2.options[fObj.item2.selectedIndex].value; var total = parseFloat(price1) + parseFloat(price2); document.getElementById("total").value = total; } </script> </head> <body> <header> <form action="#" name="itemlist" > <table> <tr> <td> <select name="item1" onchange="kazu()"> <option value="100">itemA-1</option> <option value="200">itemA-2</option> </select> </td> </tr> <td> <select name="item2" onchange="kazu()"> <option value="1000">itemB-1</option> <option value="2000">itemB-2</option> </select> </td> </tr> <tr> <td name="total"> <input type="text" value="" id="total" /> </td> </tr> </table> </form> </body> </html> 上記の内容をfor文を使い動作するようにと思っています。 自分で以下の内容を考えたのですがが動作しません。 以下の内容の問題点を教えいただければと思います。なにとぞよろしくお願いいたします。 function kazu(){ var fObj = document.itemlist; var len = document.itemlist.length; for(i=1;i<=len;i++){ var price[i] = fObj.item[i].options[fObj.item[i].selectedIndex].value; } var total = parseFloat(price1) + parseFloat(price2); document.getElementById("total").value = total; }

  • for文が全然ループしていない

     下のようなfor文を作って回してみましたが、チェックのために一番最後に書いたPRINT文で「0」が表示され、その下に下線表示だけです。  一体どこが悪いのでしょうか。全く分かりません。  また「$i==9」を「$i=<9」と書いていましたら、エラー表示になりました、何が原因でしょうか。  エディター(TeraPad)の認識に原因があるのでしょうか。  文法のエラー表示は出ていません。  9*9の表を表示させるだけの簡単なコードなのですが。 <html><head><title>make_matrix_html</title></head> <body> <table border="1"> <?php for($i=1;$i==9;$i++){ print ("<tr><br />"); for($j=1;$j==9;$j++){ print ("<td>".($i*$j)."</td>"); } print ("</tr>"); } print ($i*$j); ?> </table></body></html>

    • ベストアンサー
    • PHP
  • DBから取得した内容を横表示

    質問します。 DBにID,NAME,IMGと言うカラム名があります。 例 ID NAME IMG 0001 PHP1 PHP1 0002 PHP2 PHP2 0003 PHP3 PHP3 データを取得し、ブラウザにて横に表示するように したいのですが、うまくいきません…。 ブラウザーイメージ 0001 0002 0003 PHP1 PHP2 PHP3 画像 画像 画像 以下がサンプルです。 <?php //DB接続 if((!$db = mysql_connect("","",""))){ die; } //DB選択 if((!mysql_select_db(""))){ die; } if(!mysql_query('set names sjis')){ echo "sjis 設定エラー"; die; } $SQL = "SELECT * FROM video_data"; if(!($rs = mysql_query($SQL))){ print mysql_error(); die; } ?> <table border="0"> <TR> <?php $count = 0;      while($item = mysql_fetch_array($rs)){ //ID表示 print "<TD>".$item['ID']."</TD>"; //名前表示 print "<TD>".$item['NAME']."</TD>"; //改行     if($count == 4){       print "</TR>";   $count = 0;     }     //IMG表示 print "<TD><img src='./test/".$item['ID'].".jpg'/></TD>"; $count++; } print "<TR>"; //コネクションクローズ mysql_close(); ?> </TABLE> どこを修正したらいいのかわかりません… 色々やっているんですが…。 わかる方が居たらヒントでもいいので 教えて下さい。よろしくお願いします。

    • ベストアンサー
    • PHP
  • PHP+MYSQLで3×5のテーブル表示について

    こんにちは。 PHP+MYSQLでページング処理で画像を出力の勉強をしています。 さっそく質問です。PHP+MYSQLを使って 元テーブルがID番号、名前、性別だとして、 1名分の表示は上記フィールドのデータを縦に3行作った後、 横の列に移るという作業をして、結果縦横に3×5並べる にはどう書けば良いいでしょうか? プログラムのイメージは以下になります。 めくっていく頁のはじめの行($i=$startline)から表示する時、 表示を1列×3行のまとまり□を縦横に3×5出力する場合、 mysqlに接続した後、 $rs = mysql_db_query($db,$sql); while($row=mysql_fetch_array($rs) ){ print("<table><tr>"); print("<td>"); print("<td>"); for($i=0;$i<4;$i++){ print("<tr>"); print("<td>"); print($row[$i]); print("</tr>"); print("</td>"); print("</td>"); } print("</td>"); print("</tr></table>"); こういう形の後、ページングの$pageのurlを作って、$_get[]に 飛ばすというイメージです。 よろしくお願いします。 以上

    • 締切済み
    • PHP
  • PHPのfor文

    送り側で次の情報を送ると、 select SyaName from Syain where SyaNo = 2select SyaName from Syain where SyaNo = Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /result.php on line 33 という文がループします。 SyaNo=1 から SyaNo=10 の計算をさせたいのですが、 なぜこれではだめなのでしょうか。。。 どう表記したらよろしいのでしょうか? 送り側>----------------------------<input type="text" name="WorDateYear" size="8" maxlength="4">年 <input type="text" name="WorDateMonth" size="5" maxlength="2">月<br> <input type="submit" name="create" value="作成"> >------------------------------- 受け側>---------------------------- $sql = "select WorDate,ComName,GenName,StrTime,EndTime,SyaNo1,SyaNo2,SyaNo3,SyaNo4,SyaNo5,SyaNo6,SyaNo7,SyaNo8,SyaNo9,SyaNo10 from Denpyo where WorDate like '%" . $_GET['WorDateYear'] . "-%" . $_GET['WorDateMonth'] . "%'"; $result1 = mysql_query($sql,$link); <? $body .= "<table> while($col = mysql_fetch_array($result1)){ for($cnt=1; $cnt<=10; $cnt++){ $sql = "select SyaName from Syain where SyaNo = " . $col[SyaNo.$cnt]; print $sql; $result2 = mysql_query($sql,$link); $col2 = mysql_fetch_array($result2); $SyaNo . $cnt = $col2['SyaName']; } $body .= "<tr>\n"; $body .= "<td rowspan='2'>" . date("j",$col['WorDate']) . "日</td>\n"; $body .= "<td rowspan='2'>" . date("w",$col['WorDate']) . "曜日</td>\n"; $body .= "<td rowspan='2'>" . $col['ComName'] . "</td>\n"; $body .= "<td rowspan='2'>" . $col['GenName'] . "</td>\n"; $body .= "<td>" . $col['StrTime'] . "</td>\n"; $body .= "<td>" . $col['EndTime'] . "</td>\n"; $body .= "<td>" . $SyaNo1 . "</td>\n"; $body .= "<td>" . $SyaNo2 . "</td>\n"; $body .= "<td>" . $SyaNo3 . "</td>\n"; $body .= "<td>" . $SyaNo4 . "</td>\n"; $body .= "</tr>\n"; $body .= "<tr>\n"; if ($col['StrTime'] < 074500){ $Str = 074500 - $col['StrTime']; } $body .= "<td>" . $Str . "</td>\n"; if ($col['EndTime'] > 170000){ $EndT = $col['EndTime'] - 170000; } $body .= "<td>" . $EndT . "</td>\n"; $body .= "<td>" . $SyaNo5 . "</td>\n"; $body .= "<td>" . $SyaNo6 . "</td>\n"; $body .= "<td>" . $SyaNo7 . "</td>\n"; $body .= "<td>" . $SyaNo8 . "</td>\n"; $body .= "</tr>\n"; } $body .= "</table>\n"; print $body; ?> >-------------------------------

    • ベストアンサー
    • PHP
  • phpのエラーについてです

    mysql上のデータをphpでブラウザに表示するコードを書いています。 下記のプログラムを実行した所 Warning: mysql_fetch_assoc() expects parameter 1 to be resource, boolean given in C:\xampplite\htdocs\shop\index.php on line 18 というようなエラーが表示されます。 本の通りに進めているので間違っていないはずなんですが・・ どこが成立していないのでしょうか??? <?php mysql_connect('localhost', 'root', '') or die(mysql_error()); mysql_select_db('mydb'); mysql_query('SET NAMES UTF8'); $recordSet = mysql_query('SELECT m.name, i.* FROM makers m, my_ items i WHERE m.id=i.maker_id ORDER BY id DESC'); ?> <table width="100%"> <tr> <th scope="col">ID</th> <th scope="col">メーカー</th> <th scope="col">商品名</th> <th scope="col">価格</th> </tr> <?php while ($table = mysql_fetch_assoc($recordSet)) { ?> <tr> <td><?php print(htmlspecialchars($table['id'])); ?></tb> <td><?php print(htmlspecialchars($table['name'])); ?></tb> <td><?php print(htmlspecialchars($table['item'])); ?></tb> <td><?php print(htmlspecialchars($table['price'])); ?></tb> </tr> <?php } ?> </table>

    • ベストアンサー
    • PHP