【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集

現在、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です。
よろしくお願いいたします。

A 回答 (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-repor …
    • good
    • 0
この回答へのお礼

早速の書き込み、ありがとうございます。
試してみたところ問題なくエラーがなくなりました。

PHP5への変更にまだ慣れていないので、ほんとに
たすかりました!!issetがポイントですね。
ありがとうありがとうございます!!

お礼日時:2008/08/25 15:02

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報