CGIカスタマイズでテーブル生成エラーが発生する理由

このQ&Aのポイント
  • search.cgiの表示部分でテーブルを一つずつ生成させようと思ったのですが、エラーが出ます。
  • split関数の扱い方がよく分かっていません。具体的な原因や対処法を教えてください。
  • データベースから取得した個々のデータをテーブルに表示する際に、正しくsplit関数を使う必要があります。
回答を見る
  • ベストアンサー

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の扱い方が良く分っていません。 御存知の方御指導下さいませ。

  • ya-ya-
  • お礼率42% (110/256)
  • CGI
  • 回答数1
  • ありがとう数0

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

  • ベストアンサー
  • sisya
  • ベストアンサー率39% (97/245)
回答No.1

splitと言うのは文字列を特定の文字で分割してくれる命令です。 (この場合「,」で区切ります) エラーの原因ですが、「""」で囲まれた文字列の中に 「"」が描かれてしまっているため、 途中で文字列が解除されてしまいエラーになっています。 4行目から「if ($next_num ne '') {」の部分までの いたる所に問題がありますので、 以下のように文字列の中の「"」の前に「\」をつけてみてください。 × print "<table width="450" border="0" cellspacing="0" ○ print "<table width=\"450\" border=\"0\" cellspacing=\"0\"

ya-ya-
質問者

補足

お返事有難う御座います。 修正してパールチェックしながら トライして見ます。

関連するQ&A

  • 掲示板CGIで古い順ではなく新着順で表示させたい

    【CGI名】簡易データベース 【配布先】http://www.rescue.ne.jp/cgi/database/(cgirescue) 仕様では古い順に表示されるのですが、 それを新着順で表示したいのです。 以下の部分を編集すれば良いと思うのですが、どなたかお願いしますm(__)m もし、この部分以外の変更が必要な場合は、大変ご面倒ですが、 上記サイトからダウンロードお願いします。 宜しくお願いします。 foreach $data (@NEW) { ($d,$DATE,$NAME,$EMAIL,$SEX,$AGE,$HANDLE,$PREF,$REM) = split(/\,/,$data); print "<tr>\n"; print "<td nowrap>$DATE</td>\n"; print "<td nowrap>$NAME</td>\n"; print "<td nowrap><a href=\"mailto:$EMAIL\">$EMAIL</a></td>\n"; print "<td nowrap><center>$SEX</center></td>\n"; print "<tdnowrap><center>$AGE</center></td>\n"; print "<td nowrap>$HANDLE</td>\n"; print "<td nowrap>$PREF</td>\n"; print "<td>$REM</td>\n"; print "</tr>\n"; }

    • ベストアンサー
    • CGI
  • 不明の「1」が出る。

    CGIファイルを実行させると必ずといっていいほど、最後に「1」が表れます。 これは一体何なのでしょうか? なぜ出てくるのでしょうか? 現在以下のようなものを作成したのですが、 if条件であってたばあい、表示されたときに、1が複数出てしまって見栄えが悪いです。 これを消す方法を教えてください。 print "<TABLE CELLSPACING=1>\n"; print "<TR>\n"; print "<TD CLASS=TD1 WIDTH=100>名前</TD>\n"; print "<TD CLASS=TD1 WIDTH=100>ふりがな</TD>\n"; print "<TD CLASS=TD1 WIDTH=100>内線番号</TD>\n"; print "</TR>\n"; for ($i=0;$i<$gyou;$i++){ @log = split(/&/,$FILES[$i]); foreach(@log){ ($key,$value) = split(/=/,$_); $FORM{$key} = $value; $FORM{'SYOZOKU'} =~ s/\n$//g; } if ($searchkey eq $FORM{'SYOZOKU'}){ print &ok;} } sub ok{ print "<TR>\n"; print "<TD CLASS=TD1 HEIGHT=20>$FORM{'NAME'}</TD>\n"; print "<TD CLASS=TD1 HEIGHT=20>$FORM{'KANA'}</TD>\n"; print "<TD CLASS=TD1 HEIGHT=20>$FORM{'BANGOU'}</TD>\n"; print "</TR>\n"; } print "</TABLE>\n"; print "</BODY>\n"; print "</HTML>\n";

    • ベストアンサー
    • CGI
  • CGIでの表示の不具合について。

    座席表を作成しようと思い以下のようにしました。 最初の画面で行と列の数を入力。    ↓ その分でテーブルを作成し、入力画面を出す。    ↓ 名前と一緒に数字も入れ、机の向き(1:横向き、2:縦向き)も入力する。    ↓ 完成。 ある程度はうまくいくのですが、なぜか一定のものだけ表示がおかしくなります。 ┏━━━┳━━━━┳━┓ ┃    ┃      ┃  ┃ ┣━━━╋━━━━┫  ┃ ┃    ┃      ┃  ┃ ┗━━━┻━━━━┻━┛ とならなければならないところが ┏━━━┳━━━━┳━┓ ┃    ┃      ┃  ┃ ┣━━━╋━━━━┫  ┣━━┓ ┃    ┃      ┃  ┃   ┃ ┗━━━┻━━━━┻━┻━━┛ となることがあります。 この右端のものは全然関係ない行のログからひっぱられてきます。 でも出るものと出ないものがあります。 表示のコードは $gyou = @FILES; for($i=0;$i<$gyou;$i++){ @log = split(/&/,$FILES[$i]); foreach(@log){ ($key,$value)=split(/=/,$_); $FORM{$key} = $value; } if ($searchkey eq $FORM{'BUSYO'}){ last; } }#for終わり でログファイルを開いて分解し、 for($n=0;$n<$TATE;$n++){ print "<TR>\n"; for($r=0;$r<$YOKO;$r++){ if ($FORM{"NO$n$r"} eq '1'){ print "<TD COLSPAN=2 CLASS=TD WIDTH=100 HEIGHT=50 ALIGN=CENTER>$FORM{\"NAME$n$r\"}</TD>\n"; } elsif ($FORM{"NO$n$r"} eq '2'){ print "<TD ROWSPAN=2 CLASS=TD WIDTH=50 HEIGHT=100 ALIGN=CENTER>$FORM{\"NAME$n$r\"}</TD>\n"; } } #列の終了 print "</TR>\n"; } #行のfor終了 のように表示させています。

    • ベストアンサー
    • CGI
  • CGIのforeach文

    CGIを作成していてforeach文のところを通ってくれません。原因が不明なのですが下記でおかしいことなどがあったらおしえてください。 お願いします。 $entrycgi = "./touhyou.cgi"; $Location = '../images'; $imgVote = $Location."/click.gif"; $votefile = "./database/vtbl.dat"; sub vote_form{ print "<FORM ACTION=\"$entrycgi\" METHOD=\"post\" NAME=\"Form\">\n"; print "<INPUT TYPE=\"hidden\" NAME=\"proc\" VALUE='entry'>\n"; print "<INPUT TYPE=\"hidden\" NAME=\"Action\">\n"; print "<TABLE><TR><TD><IMG SRC=\"$Location."/top.gif\"></TD></TR></TABLE>\n"; open(FILE, "+<$votefile"); @output = <FILE>; close(FILE); print "<TABLE><TR>\n"; $i = 1; @output_sort = sort { $b <=> $a } @output; foreach $output_sort(@output_sort){ ($COUNT, $NM, $FILENM, $NO) = split(/\,/, $output_sort); $filename = $Location.$FILENM; print "<IMG SRC='$filename' HEIGHT=100 WIDTH=100></TD>\n"; if ($i == 5) { last; } else { print "<TD width=\"50\"></TD>\n"; $i++; } } print "</TR></TABLE>\n"; }

    • ベストアンサー
    • CGI
  • 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から書き出す、最終的な確認部分を、入力フォームから内容を受けた部分のみ表示しようとおもうのですが、以下の書式だとhtml内のsub部分の指示が効かずに、画面にそのままsub~と書き出されてしまいます。 どなたか良い方法を教えていただけないでしょうか? よろしくお願いいたします。 省略 $errNum = chkFormInput(); fixTags(); &okhtml(); sub okhtml{ print "Content-type:text/html\n\n"; print <<DATA; <html> <head> 省略 sub hoge { if ($hoge eq "") { print "<tr><td height="1" width="1"><img src="bitr.gif" width="1" height="1"></td></tr>\n"; }else{ print "<tr><td align=center width="30" bgcolor="#ffffdd"><font color="#333300" class="text2">8.</font></td> <td width="3"><img src="bitr.gif" width="1" height="1"></td> <td width="106" height="27" bgcolor="#ffffaa"><img src="bitr.gif" width="1" height="1"><font color="#333300" class="text2">連絡先<font class="text2" color="#cc0000"></td> <td width="3"><img src="bitr.gif" width="1" height="1"></td> <td width="414" bgcolor="#ffffdd"><img src="bitr.gif" width="1" height="1"><font class="text5">$hoge</font></td></tr> <tr><td colspan="5" height="2"><img src="bitr.gif" width="1" height="1"></td></tr>\n"; } }

    • ベストアンサー
    • Perl
  • CGIの動作環境に関して

    教えて下さい。 私の作成したapacheの環境では、   print "Content-type: text/plain\n\n"; print "Hello Perl !"; この表記ではダウンロードのポップアップが表示されてしまい、 調べたところ、 print "Content-type: text/html\n\n"; print "<html><h1>Hello Perl !</h1>"; のようにhtml形式にすれば正しく表示されるようになりました。 しかし、自分で作成しておきながら、html形式というものが 良くわかりません。 仮に、以下のような"行動予定表"のようなものを表示させたい場合、 どのように"html形式"で記述すれば良いでしょうか。。。。 # 行動予定表の表示 print "Content-type: text/html\n\n"; print qq! <HTML> <HEAD> <TITLE>行動予定表</TITLE> <META Http-Equiv="Content-Type" Content="text/html;charset=shift-jis"> </HEAD> <BODY link="#0000ff" vlink="#0000ff" alink="#0000ff"> <CENTER> <TABLE BORDER="0" WIDTH="90%"> <TD WIDTH="20%"> <FONT SIZE="4"> <IMG src="../../image/mrd3.gif" width="80" height="27" border="0"> </FONT> </TD> <TD WIDTH="60%" ALIGN="center"> <B><U>行動予定表</U></B> </TD> <TD WIDTH="20%" ALIGN="right"> <FONT SIZE="4"><U>$date</U></FONT> </TD> </TABLE> <FONT COLOR="#FF0000"><B>$error</B></FONT><BR> <TABLE BORDER="1" WIDTH="650" CELLPADDING="2" CELLSPACING="1"> <TR ALIGN="center"> <TD NOWRAP WIDTH="150" BGCOLOR="#DDDDDD"> <FONT SIZE="2"><B>名前</B></FONT> </TD> <TD NOWRAP WIDTH="300" BGCOLOR="#DDDDDD"> <FONT SIZE="2"><B>行  先</B></FONT> </TD> <TD NOWRAP WIDTH="150" BGCOLOR="#DDDDDD"> <FONT SIZE="2"><B>帰社時間</B></FONT> </TD> </TR> !; for($loop = 1;$loop <= $#LIST_NAME;$loop++) { $name = qq!<FONT SIZE="2">$LIST_NAME[$loop]</FONT>!; print qq! <TR> <TD WIDTH="2%" VALIGN="middle" NOWRAP> <A HREF="yotei_d1.cgi?edit=$loop">$name</A> </TD> <TD WIDTH="49%" VALIGN="top"> <FONT SIZE="2">$LIST_NOTE[$loop]{'AM'} </FONT> </TD> <TD WIDTH="49%" VALIGN="top"> <FONT SIZE="2">$LIST_NOTE[$loop]{'PM'} </FONT> </TD> </TR> !; } print qq! </TABLE> </CENTER> <CENTER> <TABLE BORDER="0" WIDTH="750" CELLPADDING="0" CELLSPACING="0"> </TABLE> </CENTER> <HR> <CENTER> <TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0"> <TR> <TD COLSPAN="3"> <FONT SIZE="2"><B>ご利用のヒント</B></FONT> </TD> </TR> <TR> </TR> <TR> <TD WIDTH="5%"> </TD> <TD WIDTH="15%"> <FONT SIZE="2"><B>■名前</B></FONT> </TD> <TD WIDTH="80%"> <FONT SIZE="2"> 編集したい名前を押すと、登録画面が表示されます。</FONT> </TD> </TR> </TABLE> </CENTER> <P> <CENTER> <P ALIGN="center"> <FONT SIZE=2><I> <A HREF="http://999999">イントラネットトップページへ </A> </I></FONT> </CENTER> </BODY> </HTML> !; 宜しくお願いします。

    • 締切済み
    • CGI
  • cgiログデータ入力

    下記のようなものを作成しました。 if ($FORM{'WORD'} eq 'フォーム'){ &form; } elsif($FORM{'WORD'} eq '確認'){ &kakunin; } elsif($FORM{'WORD'} eq '入力'){ &nyuuryoku; } sub kakunin{ print "<FORM METHOD=POST ACTION=top_nyuuryoku1.cgi>\n"; print "<TABLE CLASS=TABLE2 CELLSPACING=0 CELLPADDING=2>\n"; print "<TR><TD WIDTH=80 CLASS=TD1>社員番号</TD><TD CLASS=TD2>$FORM{'BANGOU'}<INPUT TYPE=HIDDEN NAME=BANGOU VALUE=$FORM{'BANGOU'}></TD></TR>\n"; print "<TR><TD WIDTH=80 VALIGN=TOP CLASS=TD1>本文</TD><TD CLASS=TD2>$FORM{'NAKAMI'}</TD><INPUT TYPE=HIDDEN NAME=NAKAMI VALUE=$FORM{'NAKAMI'}></TR>\n"; print "</TABLE>\n"; print "<BR>と入力されました。これでよければボタンを押してください。<BR><BR>\n"; print "<INPUT TYPE=HIDDEN NAME=WORD VALUE=入力>\n"; print "  <INPUT TYPE=SUBMIT CLASS=BUTTON VALUE=入力>\n"; print "</FORM>\n"; } sub nyuuryoku{ print "入力しました。<BR>\n"; print "<A HREF='top.cgi'>戻る</A>\n"; open (FILE,">>top.log"); flock(FILE,2); @FILES = "$buffer\n"; print FILE @FILES; flock(FILE,8); close(FILE); } ※多少省略あり。 ※$bufferはこれの前のページから受け取ったもの。 kakuninのところの$FORM{'NAKAMI'}ではちゃんと半角スペースや改行が認識されていますが、nyuuryokuになるとだめです。 一体何が原因なのでしょうか?

    • ベストアンサー
    • CGI
  • foreachの使い方

    ------------------------------------------- include.php <?php $kakaku = array(1=>'300', 2=>'500' ); $picture = array(1='img/pan.jpg', 2='img/choko.jpg' ); ?> ------------------------------------------- index.php <table border="1" height="188" width="461"> <tr> <td width="458" height="160"><img border="0" src="<?php echo $picture ;?>" width="190" height="157"> <font size="4" color="#FF00FF"><b><?php echo $kakaku ;?></b></font></td> </tr> </table> -------------------------------------------- この時に <tr> <td width="458" height="160"><img border="0" src="<?php echo $picture ;?>" width="190" height="157"> <font size="4" color="#FF00FF"><b><?php echo $kakaku ;?></b></font></td> </tr> の部分を変数の値の分だけ繰り返したい時、 <?php foreach($picture AS $key => $val) { ?> <? } ?> <?php foreach($kakaku AS $key => $val) { ?> <? } ?> はどう記述したらいいのですか?? 結果的には <table border="1" height="188" width="461"> <tr> <td width="458" height="160"><img border="0" src="img/pan.jpg" width="190" height="157"> <font size="4" color="#FF00FF"><b>300円</b></font></td> </tr>  <tr> <td width="458" height="160"><img border="0" src="img/choko.jpg" width="190" height="157"> <font size="4" color="#FF00FF"><b>500円</b></font></td> </tr> </table> というふうにしたいのです! よろしくお願いします。

    • ベストアンサー
    • PHP
  • CGIで表示されない文字

    print "<TD WIDTH=40 COLSPAN=8 CLASS=SOLIDSOLID ROWSPAN=3 ALIGN=CENTER HEIGHT=60>金 額<BR>算 出<BR>不能</TD>\n"; とした場合に、 <TD WIDTH=40 COLSPAN=8 CLASS=SOLIDSOLID ROWSPAN=3 ALIGN=CENTER HEIGHT=60>金 額<BR>算 出<BR>不可・/TD> となってしまいます。 どうしてでしょうか?

    • ベストアンサー
    • CGI