• ベストアンサー

このスクリプトのエラー原因は何でしょうか

2chビューワーを作っている初心者です。 レスを表示する所がどう改善しても表示されません。 現在のスクリプトを書きます。 for( $i = 0, $n = 1; $n == $b; $i++, $n++ ){ echo "<dt>".$n." :<font color=green><b>".$name[$i]."</b></font>:".$date[$i]."<dd>".$in[$i]."<br><br>\n"; } nameは名前欄の配列、dateは時間、IDの配列、inは内容、$bはレス数です。 どうか教えていただけないでしょうか。 宜しくお願いします。

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

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

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.3

forでもいいですがforeachの方がわかりやすいかも <?PHP $name=array("name1","name2","name3","name4"); $date=array("date1","date2","date3","date4"); $in=array("in1","in2","in3","in4"); //forの例 $b=count($name); for( $i = 0, $n = 1; $n <= $b; $i++, $n++ ){ echo "<dt>".$n." :<font color=green><b>".$name[$i]."</b></font>:".$date[$i]."<dd>".$in[$i]."<br><br>\n"; } print "<hr>"; //foreachの例 $n=1; foreach( $name as $key=>$val){ echo "<dt>".$n++." :<font color=green><b>".$val."</b></font>:".$date[$key]."<dd>".$in[$key]."<br><br>\n"; }

S-DUCK
質問者

お礼

Foreachでも可能••• keyを使うことを思いつきませんでした! 勉強になりました。

その他の回答 (2)

  • shimix
  • ベストアンサー率54% (865/1590)
回答No.2

RTFM. http://www.php.net/manual/ja/control-structures.for.php ----- 引用ここから 最初の式(式1)は、ループ開始時に無条件に 評価(実行)されます。 各繰り返しの開始時に、式2が評価されます。 その式の値がTRUEが場合、ループは継続され、括弧 内の文が実行されます。値がFALSEの場合、ループの 実行は終了します。 各繰り返しの後、式3が評価(実行)されます。 ----- 引用ここまで 最初のチェック時に式2($n == $b)はfalseですよね(汗

S-DUCK
質問者

お礼

第二引数の条件が満たされた時に処理が終了すると間違って覚えてました・・・ ご回答ありがとうございます!

回答No.1

for( $i = 0, $n = 1; $n == $b; $i++, $n++ ){ ↓ for( $i = 0, $n = 1; $n <= $b; $i++, $n++ ){ じゃないの?

S-DUCK
質問者

お礼

成る程・・・for文自体をよくわかって居なかったようです。 回答ありがとうございした!

関連するQ&A

  • ユーザ入力が表示されない原因を教えてください。

    CGI初心者です。基礎を勉強しただけなのでまだまだ理解が足りないせいかもしれません。現在データ検索のカスタマイズをしています。 ユーザが入力したものを検索条件の一部にと考えているのですが、なかなかできません。どこがいけないのかおしえていただけないでしょうか? インプット print "<P>● 業 務 <input type=text name=P2 size=30>\n"; アウトプット print "<td valign=top nowrap><font color=\"$t_color\">■</font> <B>業 務</B><br>\n"; print "<select name=P2 >\n"; print "<option value=\"99\" selected>指定なし\n"; $i =99; foreach $line (@lines) { ($name,$value) = split(/\,/,$line); chop; if ($name ne '') { $i++; $names{($name)[0]}++; $n++; } } foreach (keys %names) { print "<option value=\"$_\">[$_]\n"; } print "</select></td>\n"; と表記してます。クッキーを利用して反映できるようにはしていて、 入力したものを、登録内容の確認や、削除するときやメンテするときにはちゃんと表示されています。

  • 掲示板で親のデータを子に反映させる方法

    スミマセン。基本だと思いますが、教えてください。 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
  • データの配列

    POSTで送られたデータから配列を作りたいのです。 下記はPOSTのデータをprint_r($_POST)で全て表示していますが、 この中から[NO0~11]までを array([0]=>11 [1]=>6 ~)というような形で配列として表示したので すが、方法が分かりません。 Array ( [N00] => 11 [NAME0] => a [N01] => 6 [NAME1] => b [N02] => 9 [NAME2] => c [N03] => 3 [NAME3] => d [N04] => 12 [NAME4] => e [N05] => 10 [NAME5] => f [N06] => 1 [NAME6] => g [N07] => 5 [NAME7] => h [N08] => 2 [NAME8] => i [N09] => 7 [NAME9] => j [N010] => 4 [NAME10] => k [N011] => 8 [NAME11] => l)

    • 締切済み
    • PHP
  • エラー原因がよくわかりません。

     レンタルサーバー上で、以下のphpを実行したところ、行44,63にエラーが出てしまいました。考えられる原因を教えていただきたいのですが、どうぞよろしくお願いいたします。   //1件ずつ取り出すループ 44行目 while( $rec = mysql_fetch_array( $rs, MYSQL_ASSOC ) ){ echo "<tr>\n"; echo "<td><A HREF=\"event_mnt.php?post_mode=" . urlencode("検索") . "&post_date=" . _hs($rec['event_date']) . "\">修正/削除</A></td>\n"; echo "<td>" . _hs($rec['event_date']) . "</td>\n"; echo "<td>" . _hs($rec['event_name']) . "</td>\n"; $r_detail = _hs($rec['event_detail']); $r_detail = nl2br($r_detail); echo "<td>" . $r_detail . "</td>\n"; echo "<td><A HREF=\"event_chk.php" . "?post_event_date=" . _hs($rec['event_date']) . "&post_event_name=" . urlencode(_hs($rec['event_name'])) . "\">出欠状況</A></td>\n"; echo "</tr>\n"; } //結果セットの解放 63行目 mysql_free_result( $rs );

    • ベストアンサー
    • PHP
  • ポインタのエラー?

    配列とポインタを使って多数桁の加算をするプログラムを作ったのですが、演算結果を表示した後にエラーが出てしまいます。初心者なので書式もばらばらで読みにくいと思いますが、お願いします。 #include <stdio.h> #include <stdlib.h> #define N 10 void main() { int *a,*b,*result,carry,i; a=(int *)calloc(N+1,sizeof(int)); b=(int *)calloc(N+1,sizeof(int)); result=(int *)calloc(N+1,sizeof(int)); /*配列aへの読み込み*/ for(i=1;i<N+1;i++) scanf("%d",&*(a+i)); *a=0; printf("入力された数値:"); for(i=1;i<N+1;i++) printf("%d",*(a+i)); printf("\n"); /*配列bへの読み込み*/ for(i=1;i<N+1;i++) scanf("%d",&*(b+i)); *b=0; printf("入力された数値:"); for(i=1;i<N+1;i++) printf("%d",*(b+i)); printf("\n"); /*配列resultの初期化*/ for(i=0;i<N+1;i++) *(result+i)=0; carry=0; /*result=a+bの演算*/ for(i=(N+1);i>=0;i--){ *(result+i)=*(a+i)+*(b+i)+carry; if(*(result+i)>=10){ *(result+i)-=10; carry=1; } else carry=0; } /*演算結果の表示*/ printf("和:"); for(i=0;i<N+1;i++) printf("%d",*(result+i)); printf("\n"); /*メモリ領域の解放*/ free(a); free(b); free(result); }

  • リセットボタンとエラー画面

    PHPを始めて1週間ほどのド初心者です。 本を買って勉強中ですが、本やネットでも調べてもわからないので 質問させて頂いています。 あるところからサンプルを引っ張ってきてフォームを作るところです。↓ session_start(); $errors = 0; if(!isset($_SESSION["form1"])){ $_SESSION["form1"] = "input"; $error["name"]["message"] = "<br><font color=\"#FF9900\">《必須》</font>"; $error["birt"]["message"] = ""; $error["sexx"]["message"] = "<br><font color=\"#FF9900\">《必須》</font>"; $name1 = ""; $name2 = ""; $sex = ""; $year = ""; $mon = ""; $day = ""; }else{ $name1 = stripslashes( $_POST["name1"] ); $name2 = stripslashes( $_POST["name2"] ); if((0==strlen($name1))&&(0==strlen($name2))) { $error["name"]["message"] = "<br><font color=\"#FF0000\">《名前が未入力です》</font>"; $errors++; } elseif(0==strlen($name1)) { $error["name"]["message"] = "<br><font color=\"#FF0000\">《性が未入力です》</font>"; $errors++; } elseif(0==strlen($name2)) { $error["name"]["message"] = "<br><font color=\"#FF0000\">《名が未入力です》</font>"; $errors++; } else { $error["name"]["message"] = ""; } $year = $_POST["year"]; $mon = $_POST["mon"]; $day = $_POST["day"]; if( (($year<1900)||(date("Y")<$year)) || (($mon<1)||(12<$mon))|| (($day<1)||(31<$day)) ) { $error["birt"]["message"] = "<br><font color=\"#FF0000\">《生年月日が無効です》</font>"; $errors++; } else { $error["birt"]["message"] = ""; } $sex = $_POST["sex"]; if(!isset($_POST["sex"])) { $error["sexx"]["message"] = "<br><font color=\"#FF0000\">《性別が未選択です》</font>"; $errors++; } else { $error["sexx"]["message"] = ""; } if(0 == $errors){ $_SESSION["form1"] = "checked"; } } ?> ~~~~~~~中略~~~~~~~~ echo "<tr><td colspan=2 align=center><input type=submit name=submit value=\"申 込\">  \n". "<input type=reset name=cancel value=\"クリア\"></td></tr>\n". "</table> ~~~~~~~以降略~~~~~~~ 配布されているサンプルなのでこのままUPすれば正常に動きます。 フォームに何も入力しないで送信ボタンを押すとエラー表示されます。 何か入力をしてリセットを押すと、入力された値はリセットされて消えますが、 エラー表示がそのままになってしまいます。 つまり、エラー表示されたままなので、これをリセットボタンを押すことにより 初期の(エラー表示されていない)状態に戻したいのです。 $reset = true; などの例文を拝見しても難しくて解決できません(T-T) 何か良い方法があったら教えて下さい。 宜しくお願いします。

    • 締切済み
    • PHP
  • Cygwinでの実行時に生じるエラーの原因を教えてください!

    以下は2次元の配列を左に90度回転させるのにかかるサイクルカウントを計測するプログラムです。 --------------------------------------------------- #include "clock.h" #define N 512 typedef int matrix_t[N][N]; void naive_rotate(matrix_t src, matrix_t dst){ int i, j; double d; start_counter(); for(i=0; i < N; i++){ for(j=0; j < N; j++){ dst[N-1-j][i] = src[i][j]; } } d = get_counter(); printf("CycleCount:%f\n",d); return; } int main(){ int i,j; matrix_t a,b; for(i=0; i < N; i++){ for(j=0; j < N; j++){ a[i][j] = j; } } naive_rotate(a,b); return 0; } ------------------------------------------------- Nを64,128・・・,2048のそれぞれでこいつをコンパイル、 $ gcc -O2 -I../include L_rotate.c ../lib/libcsapp.a 実行すると、Nが512以上のときは $ ./a.exe 45 [main] a 8024 _cygtls::handle_exceptions: Error while dumping state (probably corrupted stack) Segmentation fault (core dumped) と表示されてしまいます。libcsapp.aには問題はないので、このプログラム中のどこをどう直せばよいのでしょうか?

  • Scriptを読み込み中の表示について

    HTML <script language="JavaScript" type="text/javascript" src="AAA.js"></script> 外部JS <!-- google.load("feeds", "1"); function initialize() { var feed = new google.feeds.Feed("RSSURL"); feed.setNumEntries(5); feed.load(function(result) { if (!result.error) { var container = document.getElementById("mini_feed"); for (var i = 0; i < result.feed.entries.length; i++) { var entry = result.feed.entries[i]; var div = document.createElement("div"); var entry = result.feed.entries[i]; var dd = new Date(entry.publishedDate); // now var yearNum = dd.getYear(); if (yearNum < 2000) yearNum += 1900; var date = yearNum + "年"+(dd.getMonth()+1)+"月"+dd.getDate()+"日"; container.innerHTML += "<div>【"+"<b>" + date+"</b>" +"】<br /><a href='" + entry.link + "'>" + entry.title + "</a></div>"; } } }); } google.setOnLoadCallback(initialize); //--> を設置し、RSSをスクリプトで表示しています。 2秒くらい読込みが遅いので、その部分が、一時空白状態のままになります。 そこで、読み込み中に読込みしていますというぐるぐる回る画像を表示したいのですが、どのように記述すれば宜しいのでしょうか?

  • クッキーを使って投票欄に名前と住所を保存したい。

    下記の投票欄にクッキーを使って住所、名前を保存したいのですが、どなたか教えていただけませんか。 print "Content-type: text/html\n\n"; print "<HTML><HEAD><TITLE>$0</TITLE></HEAD>\n"; print "<BODY text=#000000 bgcolor=#f7f7e0>\n"; print "<center><table width=400 border=3>\n"; print "<br><br><tr><td><center><font color=0000ff size=\"$za\" face=\"$fon\"><br>$0</font><NOBR>\n"; print "<FORM method=POST action=\"ad.cgi\">\n"; print "<tr><td align=right><b>俳号:</b><INPUT type=text name=name size=24 value=$cookie{'name'}><BR></font> "; print "<tr><td align=right><font face=\"$fon\"><b>都道府県名:</b><INPUT type=text name=address size=24 value=$cookie{'address'}><BR></font>"; print "<tr><td align=right><font face=\"$fon\"><b>メールアドレス:</b><INPUT type=text name=mail size=24 value=$cookie{'mail'}><BR></font> ";

    • 締切済み
    • CGI
  • フォームデータのcsv保存について

    お世話になります。フォームに入力されたデータを csvファイルに保存するというcgiの作成をしています。 初めてcgiを作成するので、書籍の真似をして作成した のですが、おかしいデータが保存されてしまいます。 質問の項目数は5個で以下のとおりです <FORM ACTION="./ans1.cgi" METHOD="POST"> 名前:<br> <input type="text" name="name" size=30> <br> 1:<br> <input type="text" name="a1" size=30> <br> 2:<br> <input type="text" name="a2" size=30> <br> 3:<br> <input type="text" name="a3" size=30> <br> 4:<br> <input type="text" name="a4" size=30> <br> <INPUT type="submit" value="送 信"> <INPUT type="reset" value="リセット"> <BR> </FORM> cgiの中身です。 #! /usr/bin/perl require './cgi-lib.pl'; $answer = 5; $ansfile = "kotae.csv"; &ReadParse(*in); $name = $in{'name'}; for($n = 1; $n <= $answer; $n++ ) { $a[$n] = $in{"a$n"}; } open (FILE,">>$ansfile"); flock (FILE,2); print (FILE "\"", $name); for($i = 1; $i <= $answer; $i++ ) { $a[$i] = ~ s/\"/""/g; print FILE "\"\,\""; print FILE $a[$i]; } print FILE "\"\n"; flock(FILE,8); close(FILE); print "Content-type: text/plain\n\n"; print "<HTML><BODY>\n"; print "tesuto"; print "</body></HTML>"; exit; csvファイルの中身を見ると、最初の列には、項目1で 記入したデータが入ってますが、項目2以降 は4294967295と数字が入ってます。どうも1個目の回答 欄のデータはちゃんと取得されてるのですがそれ以降の が取得されていないみたいです。 よろしくお願いいたします。

    • ベストアンサー
    • CGI

専門家に質問してみよう