• 締切済み

PHPアンケート集計のスプリクトエラーに困っています。

現在、PHPで下記のような集計して表示しようとしてます。値は、dataフォルダからカンマ区切りのテキストデータを読み込み集計されて表示はされるのですが・・・PHP4を使ってテストしたときはエラーは出なかったのですが、PHP5に変更してから走らせたところ下記のエラーが出てしまい困っています。どうやら値が未定義・初期値を与えないといけないらしいとこまでは、少し分かったのですが、そこからいろいろと試したのですがうまく動きません。スクリプトは「WebクリエイティブのためのPHPサンプルブック」を参考したもので、間違っているとは考えにくいのですが…。 エラーの内容 =================================================== Notice: Undefined variable: corner in/var/www/html/test/XXXXX.php on line 30 Notice: Undefined index: 3 in /var/www/html/test/XXXXX.php on line 30 Notice: Undefined index: 1 in /var/www/html/test/XXXXX.php on line 30 Notice: Undefined index: 2 in /var/www/html/test/XXXXX.php on line 30 スクリプトの内容 ============================================== $cnt=0; $i=0; $d = dir("data/"); //print_r($d); //検索対象ディレクトリ指定 while (($entry = $d->read())) { //ディレクトリ検索 if(eregi("2008",$entry)){ $l=file("data/$entry"); //該当ファイル読み込み $lines[$cnt]=$l[0]; //データベース$linesの各行に格納 $cnt++; } } $d->close(); function cmp ($a, $b) { if ($a == $b) return 0; return ($a > $b) ? -1 : 1; } foreach($lines as $l){ $op=explode(",",$l); $key=$op[4]; $corner[$key]++; } uasort($corner,"cmp"); $label=array("ほぼ毎日","週1~2回","月1~2回","半年に1~2回","今回がはじめて"); echo"<table width=600 border=1>"; echo"<tr><td colspan=2><b>問1.XXXXXXXXにどのくらいの頻度で訪問していますか。</b></td></tr>"; foreach($corner as $key => $value){ $ratio=$value/count($lines); $length=300*$ratio; echo"<tr><td>$label[$key]</td><td width=350>"; echo"<img src=\"./square.gif\" height=\"10\" width=\"$length\">"; echo" $value</td></tr>"; } echo"</table>"; 環境:Apache2 PHP5 MySQL5です。 よろしくお願いいたします。

みんなの回答

  • Shin417
  • ベストアンサー率64% (9/14)
回答No.1

30行目の $corner[$key]++; が警告の原因です。 お気付きの通り、初期化してあげれば問題解決です。 if (isset($corner[$key])) { // $corner[$key]が初期化済みなら $corner[$key]++; // +1 } else { $corner[$key] = 0; // 0で初期化 } 1行にまとめるなら $corner[$key] = isset($corner[$key]) ? $corner[$key]+1 : 0; ちなみに、警告が出るようになったのはPHPの設定の問題だと思われます。 PHP4のときは警告が表示されない設定だったのが、 PHP5では表示される設定になっているためです。 「error_reporting」で調べてみればわかると思います。

参考URL:
http://jp.php.net/manual/ja/function.error-reporting.php
ccgp
質問者

お礼

早速の書き込み、ありがとうございます。 試してみたところ問題なくエラーがなくなりました。 PHP5への変更にまだ慣れていないので、ほんとに たすかりました!!issetがポイントですね。 ありがとうありがとうございます!!

関連するQ&A