• ベストアンサー

表示を一覧表形式にしたいのですが組みかたを教えてください。

検索データを一覧表で表示したく、いろいろやってみたのですができません。なぜできないのか、どこがいけないのかおしえていただきたいのですが・・・ 一応、一覧表で表示されていたスクリプトをお手本にやっていたのですが、知識がなさすぎてわかりません。よろしくおねがいします。 sub search { &header; print "<table border=1 cellspacing=1><tr>\n"; print "<th>情報提供者<th>ユーザ名<th>業務<th>顧客管理元<th>責任者<th>コメント</tr>\n"; # キーワード前準備 $in{'word'} =~ s/ / /g; @word = split(/\s+/, $in{'word'}); open(IN,"$logfile") || &error("Open Error : $logfile"); $i=0; while (<IN>) { ($no,$sub,$com,$p1,$p2,$p3,$p4) = split(/<>/); if ($in{'P1'} ne "99" && $in{'P1'} ne "$p1") { next; } if ($in{'P2'} ne "99" && $in{'P2'} ne "$p2") { next; } if ($in{'P3'} ne "99" && $in{'P3'} ne "$p3") { next; } if ($in{'P4'} ne "99" && $in{'P3'} ne "$p4") { next; } # キーワードマッチ $flag=1; foreach $key (@word) { if (index($_,$key) >= 0) { $flag=1; } else { $flag=0; last; } } if (!$flag) { next; } $i++; print "<td><b><a href=\"$script?mode=view&no=$no\">$sub</a></b></td>"; print "<td>$part1[$p1]</td><td>$part2[$p2]</td><td>$part3[$p3]</td><td>$part4[$p4]</td>"; print "<td><small>$com</small></td></tr>\n"; print "</table><P>\n"; } close(IN);

  • bori
  • お礼率67% (40/59)
  • Perl
  • 回答数2
  • ありがとう数7

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

  • ベストアンサー
  • ryouchi
  • ベストアンサー率41% (52/125)
回答No.1

まず、何ができないのかを教えて貰えませんか? たとえば、どんなエラーがでるのか?など。 また、これはプログラムのサブルーチンの一部のようですね。 おそらく、FORM変数をwordの中にどっかでいれて、@wordの配列にいれて、Logファイルの中身と照合するってことをやっているのかしら? あと、サブルーチンなら、最後の行に}がいりますね。 close(IN); } ってかんじですね。

bori
質問者

お礼

再度、教えていただいた部分を見直していたら、できました!ヾ(@^▽^@) ありがとうございました。

bori
質問者

補足

質問の仕方が悪くてすいません。m(._.)m なにができないのかといいますと、一覧表で表示したいのに、 表の項目の横に検索結果の1件目が並んで表示されるうえに、2件目以降の結果は、表からはみ出て表示されるのです。 □・・・項目(表形式) ■・・・結果1(表形式) △・・・結果2(ただの文字列のみ) □□□□■■■■ △△△△ △△△△ △△△△ といったような感じで表示されるのです。これを下図のような表示にしたいのです。 □□□□ ■■■■ ▲▲▲▲(表のなかにおさまるように) ▲▲▲▲

その他の回答 (1)

  • imeruchan
  • ベストアンサー率43% (45/104)
回答No.2

質問に書かれているスクリプト、最後にテーブルに書き出す部分ですが、<tr>が抜けてますよ。 $i++; print "<tr><td>... ~~~~ このようになるのでは?

bori
質問者

お礼

ありがとうございました。おかげで、項目と1件目はちゃんと改行されて表示されました。 (。・_・。)ノが、やはり2件目以降の検索結果は、表形式では表示されません。また、お気づきの点があれば、教えてください。

関連するQ&A

  • 検索結果の表示形式を表形式にしてだしたいのですが・・・

    CGI初心者です。データベース検索のCGIをフリーからカスタマイズをかけて利用を試みています。今の状態では、検索結果が、 print "<LI><a href=\"$script?mode=view&no=$no\">$sub</a>\n"; 状態で表示されます。 が、これをメンテするときの一覧状態にしたいのです。 メンテ時の表示プログラムは、 # 管理画面を表示 &header; $count = @lines; print "<center>\n"; print "<form action=\"$script\" method=\"$method\">\n"; print "<input type=hidden name=pass value=\"$in{'pass'}\">\n"; print "<input type=hidden name=mode value=\"admin\">\n"; print "<input type=hidden name=action value=\"delete\">\n"; print "<table border=1 cellspacing=1><tr>\n"; print "<th>削除<th>料理名<th>食種<th>食材<th>調理法<th>コメント</tr>\n"; foreach $line (@lines) { local($no,$sub,$com,$p1,$p2,$p3) = split(/<>/, $line); $com =~ s/<br>/ /g; $com =~ s/</&lt;/g; $com =~ s/>/&gt;/g; if (length($com) > 60) { $com = substr($com,0,58); $com = "$com" . '..'; } print "<tr><th><input type=checkbox name=del value=\"$no\"></th>"; print "<td><b><a href=\"$script?mode=mente&no=$no\">$sub</a></b></td>"; print "<td>$part1[$p1]</td><td>$part2[$p2]</td><td>$part3[$p3]</td>"; print "<td><small>$com</small></td></tr>\n"; } print "</table><P>\n"; です。どうしたら、メンテ時のような一覧の表形式で表示できるのでしょうか? あと、あまりに言語がわからないので、なにか良い参考書及びHPがあれば教えてください。

    • 締切済み
    • CGI
  • データ)表示件数について

    PHPとCSVでデータを表示させる事は出来ました。 希望は、 Pagerを使い1ページに表示する件数を10件としたいのですが、うまくいきませんでした。 よろしければ修正 or ご教授よろしくお願い致します。 <?php require("Pager/Pager.php"); $params = array( 'mode' => 'sliding', 'perPage' => 20, 'delta' => 5, 'urlVar' => 'p', 'separator' => ' |', 'curPageSpanPre' => '', 'curPageSpanPost' => '', 'prevImg' => '&lt;前の20件', 'nextImg' => '次の20件&gt;', 'firstPageText' => '最初', 'firstPagePre' => '[', 'firstPagePost' => ']', 'lastPageText' => '最後', 'lastPagePre' => '[', 'lastPagePost' => ']', 'spacesBeforeSeparator' => 0, 'spacesAfterSeparator' => 1, 'totalItems' => 1000, 'altFirst' => '最初のページへ移動', 'altPrev' => '前のページへ移動', 'altNext' => '次のページへ移動', 'altLast' => '最後のページへ移動', 'altPage' => 'ページ', ); $pager =& Pager::factory($params); $links = $pager->getLinks(); if ($links['pages'] != '') { echo $links['first'], $links['back'], ' | ', $links['pages'], ' | ', $links['next'], ' ', $links['last']; } print<<<eof <table width="550" class="table01"> <tr> <td width="32" height="18"><div align="center"><strong>画像</strong></div></td> <th width="123"><strong>名前</strong></th> <th width="58"><strong>材料</strong></th> <th width="56"><strong>時間</strong></th> <th width="53"><strong>費用</strong></th> <th width="55"><strong>美味しさ</strong></th> <th width="56"><strong>日</strong></th> <th width="81"><strong>詳細ページ</strong></th> </tr> eof; $csv = fopen ("item.csv", "r") or die(print "ファイルを開く事が出来ませんでした"); while ($items = fgetcsv ($csv, 1000,",")) { print "<tr>\n"; print "<td height='40' rowspan='2'><img src='$items[0]'/></td>\n"; print "<td><center>$items[1]<center></td>\n"; print "<td>$items[2]</td>\n"; print "<td>$items[3]</td>\n"; print "<td>$items[4]</td>\n"; print "<td>$items[5]</td>\n"; print "<td>$items[6]</td>\n"; print "<td>$items[7]</td>\n"; print "</tr>\n"; print "<tr>\n"; print "<td height='16' colspan='7'><div align='left'><a href="$items[8]"></a></div></td>\n"; print "</tr>\n"; } fclose($csv); ?>

    • ベストアンサー
    • PHP
  • CGIのカスタマイズについて

    ネットレスキューさんの簡易データベースについて search.cgiの表示部分でテーブルを一つずつ生成させようと思ったのですがエラーが出ます。 どこが悪いのでしょうか? ----------ここから------- foreach $data (@NEW) { ($d,$DATE,$PREF,$NAME,$EMAIL,$HURL,$AGE,$HANDLE,$REM) = split(/\,/,$data); print "<table width="450" border="0" cellspacing="0" cellpadding="0" class="p12_16">\n"; print "<tr>\n"; print "<td colspan="2" bgcolor="#CC0033" height="14"><font color="#FFFFFF">● $NAME</font></td>\n"; print "</tr>\n"; print "<tr>\n"; print "<td width="70">地域</td>\n"; print "<td width="380">$PREF</td>\n"; print "</tr>\n"; print "<tr>\n"; print "<td height="14">Eメール</td>\n"; print "<td><a href=\"mailto:$EMAIL\">$EMAIL</a></td>\n"; print "</tr>\n"; ---中略---- print "<td height="14">内容</td>\n"; print "<td>$REM</td>\n"; print "</tr>\n"; print "</table>\n"; if ($next_num ne '') { while (($key,$val) = each %FORM2) { if ($key ne 'FF') { $buf = "$buf&$key=$val"; } } print "<h3>↓<a href=\"search.cgi?$buf&FF=$next_num\">次の$page件</a></h3>\n"; } } print "</body></html>\n\n"; exit; --------------ここまで----- splitの扱い方が良く分っていません。 御存知の方御指導下さいませ。

    • ベストアンサー
    • CGI
  • 表の色を交互に変更

    以下の<tr bgcolor=\"#ffffff\">の部分を<tr bgcolor=\"#eeeeee\">と交互に表示させたいのですが、方法がわかりません。よろしくお願いいたします。 open(IN,"$file") || &error("file"); while (<IN>) { ($now,$host) = split(/<>/); print "<tr bgcolor=\"#ffffff\">\n"; print "<td>$now</td>\n"; print "<td>$host</td>\n"; } close(IN);

    • ベストアンサー
    • Perl
  • 掲示板で親のデータを子に反映させる方法

    スミマセン。基本だと思いますが、教えてください。 Joyful系の掲示板のファイルなのですが、 各記事の親記事にある特定のデータを、 取り出す方法を教えて下さい。 5<>IP<>1234567890<> 3<><>2012/01/12(Thu) 08:42<>ウサギ<>Yahoo<> 5<>3<>2012/01/12(Thu) 09:04<>ネコ<><> 1<><>2012/01/12(Thu) 08:41<>イヌ<>Google<> 2<>1<>2012/01/12(Thu) 08:41<>ウサギ<><> 4<>1<>2012/01/12(Thu) 09:03<>タヌキ<><> こんな感じで、データが記入されるdatファイルがあります。 「1のレスが2・4」「3のレスが5」です。 それで、親記事に「Yahoo」や「Google」というデータが入っているので、 親記事1にレスしてる2・4でも、 親記事に入ってる「Google」といった文字を反映したいのです。 うまく伝えられ無いので、画像にしてみましたので見てやって下さい。 私が見てるプログラムでは、 レスはレスで、「Google」等の文字を探してしまっているので、望む形にならないのです; どうぞ、よろしくお願いします! ↓ざっくり。この辺りの最初の方に、親だけ読み込んで、$search1 とかに、セットできないかと考えています。 ★━━━━━━━━━━━━━━━━━━━━★ local($ipt,$wh,$i,$flag); # 記事を展開 open(IN,"$logfile") || &error("Open Error : $logfile"); $top = <IN>; $i=0; $x=1; $flag=0; # ソート無し:必要最小限だけ読み込み if(!$sort && !$threadsuu){ while(<IN>){ if((split(/<>/))[1] eq "") { $i++; } if ($i < $page + 1) { next; } if ($i > $page + $p_log) { next; } push(@DATA,$_); } } # ソート無し、スレッド表示有り elsif(!$sort && $threadsuu){ @DATA = <IN>; } # ソート有り:全データを読み込んでソート実行 else{ @DATA = <IN>; if($sort == 1){ &ressort; } if($sort == 2){ &nosort; } } close(IN); # 新着スレッドを表示 if($threadsuu || $up_down){ &thread; } # レスの表示制限をする場合には、配列を改造 if($max_res){ &omit; } foreach(@DATA){ ($no,$reno,$date,$name,$mail,$search) = split(/<>/); # ページ処理 if($sort || $threadsuu){ if ($reno eq "") { $i++; } if ($i < $page + 1) { next; } if ($i > $page + $p_log) { next; } } if (!$reno && $flag) { print "</td></tr></table><br><br>\n\n"; $flag=1; } if (!$reno) { print "<table class=\"table1\" align=\"center\" cellspacing=0 cellpadding=2>\n<tr><td>"; $flag=1; } if ($reno && $line_color) { print "<hr noshade size=1 width='85%' color=\"$line_color\">\n"; } print "<table width=100% border=0 cellpadding=2 cellspacing=0>\n<tr>"; if ($reno) { print "<td rowspan=2 width=40><br></td>"; } if($line_color){ print"<td>"; } elsif($reno){ print"<td class=\"b2\">"; } else{ print"<td class=\"b1\">"; } if (!$reno) { print "<span class=\"sub\"> <font color=\"$t_color\"><b>$sub </b></font></span>";} else { print "Re:<font color=\"$t_color\"><b>$sub </b></font></span>";} if($search == "yahoo") { print "投稿者:<span class=\"name\">$name</span> yahooで検索";} elsif($search == "google") { print "投稿者:<span class=\"name\">$name</span> Googleで検索";} else { print "投稿者:<span class=\"name\">$name</span> その他で検索";}

    • ベストアンサー
    • Perl
  • A.cgiで認証チェックされてから、B.thmlが表示されるようにしたい。

    1/17付CGIについての質問の関連です。 質問はパスワード付forum.cgi(付録フリーCGI)で、forum.cgiを入室後、ID&PW情報をA.cgiに渡したまま、新しいHTMLウィンドウを立上げることでした。 この質問は、こちらの教えてGOOでご教授いただきました。ありがとうございます。 できたCGIでは、A.cgiでID&PWを入力しないでも、B.thmlが表示されてしまいます。 # ID/PW認証 # sub pass_check { local($time,$time2,$inpw,$flag,$id,$pw,$check); # 時間を取得 $time = 略; $timeout = 略; $password = '略'; $pwdfile = '略; #中略 if ($in{'id'} eq "") { &header; print "<table><tr><td>\n"; print "<td><form action=\"$script\" method=\"GET\"onsubmit=\"window.open('B.html,'new')\">\n"; print "<tr><th><UL><LI>すでにパスワード取得済みの方は・・・略 print "<tr><th>ログインID<th><input type=text name=id size=8></tr>\n"; #中略 print "<tr><th colspan=2><input type=submit value=' 認証する '></tr>\n"; #中略 if ($in{'pw'} eq "") { &error("パスワードの入力モレです"); } $flag=0; open(IN,"$pwdfile") || &error("Open Error : $pwdfile"); while (<IN>) { ($id, $pw) = split(/:/); if ($in{'id'} eq $id) { $flag=1; $pw=~s/\n//; last; } } close(IN); if (!$flag) {&error("該当のIDは見当たりません"); } $check = &decrypt("$in{'pw'}", "$pw"); if ($check ne "yes") { &error("パスワードが違います"); } # パスワードを第2暗号化 以下略 } 認証の送信をしたときに、エラー時エラーメッセージに飛ぶ(分岐する?)にはどういう記述にしたら良いでしょうか? 見にくいかもしれませんが、どんなヒントでも結構ですので宜しくお願いします。

    • 締切済み
    • CGI
  • 複数のCSVファイルを1つの表にして出したい

    あるCSVファイルを、Perl+HTMLで、プラウザに「表」で表示させるようにしました。 しかし、追加で複数のCSVファイルを読み込ませて、同じ表に入れることができません。(今ある表のなかの、$r1,2,3と番号が存在してる以外の空欄になっている表に入れたいのです) どのようにすればいいのか、どなたかお教え下さい!>< ちなみに、今作ってあるものはこんなかんじです。 動作確認済み。 #!/usr/local/bin/perl #----------------------------------- $file = "a.20090504.csv"; #----------------------------------- print "Content-type: text/html\n\n"; print "<html>\n"; print "<body>\n"; print "<br><br>\n"; print "<center>\n"; print "<table border=1 >\n"; $days = $file; $days =~ s/a.//g; $days =~ s/.csv//g; open(IN,"$file"); @kasou = <IN>; close(IN); foreach $line (@kasou){ ($r1, $r2, $r3, $r4, $r5, $r6, $r7) = split (/,/, $line); print "<tr>\n"; print "<td>$days</td>\n"; print "<td>$r1</td>\n"; print "<td></td>\n"; print "<td>$r2</td>\n"; print "<td></td>\n"; print "<td></td>\n"; print "<td>$r3</td>\n"; print "<td></td>\n"; print "<td></td>\n"; print "<td>$r4</td>\n"; print "<td>$r5</td>\n"; print "<td>$r6</td>\n"; print "<td>$r7</td>\n"; print "</tr>\n"; } print "</table>\n"; print "</body>\n"; print "</html>\n"; ※ちなみに、これですとCSVファイル名の20050504だけがtrに入るようになっています。これは、こうしたいのでこうしているのですが、繰り返しtrに投入されるようになっているのも気になります。 どうしたら直るでしょうか。

  • CSVデータベース

    PHPを使い CSVのデータを表示させる事ができました。 がっ見た目がどうも汚いですよね・・・ もっとすっきりする方法はあるんでしょうか? あとCSVのデータを検索させるようにしたいのですが何かサンプルとかありませんでしょうか? 注文多くて申し訳ないですが、是非ともご教授よろしくお願い致します。 <table width="550" class="table01"> <tr> <td width="32" height="18"><div align="center"><strong>画像</strong></div></td> <th width="123"><strong>情報1</strong></th> <th width="58"><strong>情報2</strong></th> <th width="56"><strong>情報3</strong></th> <th width="53"><strong>情報4</strong></th> <th width="55"><strong>情報5</strong></th> <th width="56"><strong>情報6</strong></th> <th width="81"><strong>対象</strong></th> </tr> <?php $csv = fopen ("./data/new.csv", "r") or die(print "ファイルを開く事が出来ませんでした"); while ($items = fgetcsv ($csv, 1000,",")) { print "<tr>\n"; print "<td height='40' rowspan='2'><img src='$items[0]'/></td>\n"; print "<td><center>$items[1]<center></td>\n"; print "<td>$items[2]</td>\n"; print "<td>$items[3]</td>\n"; print "<td>$items[4]</td>\n"; print "<td>$items[5]</td>\n"; print "<td>$items[6]</td>\n"; print "<td>$items[7]</td>\n"; print "</tr>\n"; print "<tr>\n"; print "<td height='16' colspan='7'><div align='left'>$items[8]</div></td>\n"; print "</tr>\n"; } fclose($csv); ?> </table>

    • ベストアンサー
    • PHP
  • フォルダの画像一覧

    下記の画像一覧のcgiを下位フォルダをリンク表示して下位フォルダにも進んでいけるようにしたいのですが、どのようにしたらよいでしょうか。下記も教えていただいたものを利用している素人です。よろしくお願いいたします。 $width_height = 'WIDTH=40 HEIGHT=55'; $dir = './'; #################### print "Content-type: text/html;CHARSET=x-sjis\n\n"; print "$dir の jpg一覧<P>\n"; print "<TABLE BORDER>\n"; print "<TR><TH>イメージ<TH>ファイル名<TH>サイズ(k)\n"; opendir(DIR, "$dir"); while ($_ = readdir(DIR)) { if (substr($_,-4,4) eq "\.jpg") { # jpgだけ出力 ($size) = (stat("$dir/$_"))[7]; # ファイルサイズ所得 print "<TR>"; print "<TD><A HREF=\"$dir/$_\" TARGET=\"jpg\"><IMG SRC=\"$dir/$_\" $width_height></A>"; # 画像(リンクあり) print "<TD><A HREF=\"$dir/$_\" TARGET=\"jpg\">$_</A>"; # ファイル名(リンクあり) print "<TD ALIGN=RIGHT>$size\n"; # サイズ } } closedir(DIR); print "</TABLE>\n"; exit:

    • ベストアンサー
    • Perl
  • mysql内データ一覧表示

    for文を使用し、データ一覧を出しています。 ソースは for ($i = 0; $i < 10; $i ++) { if($row = mysql_fetch_array($result)) { $name1 = $row['name1']; $name2 = $row['name2']; $names .= '<tr>'."\n"; $names .= '<td>' .$name1. '</td>'."\n"; $names .= '<td>' .$name2. '</td>'."\n"; $names .= '</tr>'."\n"; } } echo $names; としています。 データベース内に内容10個あればもちろん10個表示されます。 例えば8個しか内容がない場合は8個表示されるのですが、残りの2個を空の<tr>~</tr>で埋めたいのですが、どのように記述したらよろしいでしょうか? 例は8個目までは <tr> <td>$name1の値</td> <td>$name2の値</td> </tr> 8個目以降は <tr> <td></td> <td></td> </tr> としたいです。 宜しくおねがいします。

    • ベストアンサー
    • PHP