今度はCSVに書きだしたデータをブラウザで見るため
show_question.phpをchap4ディレクトリに作ります。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<style type="text/css">
</style>
<title>アンケート</title>
</head>
<body>
<table border=1>
<tr bgcolor="#cccccc">
<td>購入日</td>
<td>平均購入額</td>
<td>評価</td>
<td>PHP</td>
<td>Perl</td>
<td>Java</td>
<td>C#</td>
<td>C++</td>
<td>Basic</td>
<td>職業</td>
</tr>
<?php
	// ファイル名
	$filename = 'uploads/question.csv';
	// ローケル設定
	setlocale(LC_ALL, 'ja_JP');
	// readモードで開く
	$handle = fopen($filename,'r');	
	// CSVデータを取り出す
	while($data = fgetcsv($handle,1000)) {
	// 一行分のデータを取り出す
		list($pdate, $pprice, $star,$lang[0],$lang[1],$lang[2],$lang[3],$lang[4],$lang[5],$job) = $data;	
	// 一行分のデータを表示
	//echo '<tr>';
	//echo '<td>' . htmlspecialchars($pdate, ENT_QUOTES) . '</td>';
	//echo '<td>' . htmlspecialchars($pprice, ENT_QUOTES) . '</td>';
	//echo '<td>' . htmlspecialchars($star, ENT_QUOTES) . '</td>';
	// 別パターン
	echo '<tr><td>' . htmlspecialchars($pdate, ENT_QUOTES) . '</td><td>' . htmlspecialchars($pprice, ENT_QUOTES) . '</td><td>' . htmlspecialchars($star, ENT_QUOTES) . '</td>';
	for ($i =0; $i < 6; $i++) {
		if($lang[$i] == '') {
			echo'<td align="center">-</td>';
		} else {
			echo'<td align="center">○</td>';
		}
	}
	echo '<td>' . htmlspecialchars($job, ENT_QUOTES) . '</td>';
	echo '<tr>';
	}
	// 閉じる
	fclose($handle);
?>
</table>
</body>
</html>
setlocal(カテゴリ,'言語-地域')
日付、通貨、記号、単位等を指定した言語や地域に合わせる。とりあえずめんどくさいのでsetlocal(LC_ALL,'jp-JP')でいきましょう。LC_ALLは全部ってことです。後は日本的なって事で海外になったら違うのいきましょう。fgetcsv関数を使うときに必要です。
fgetcsv(ファイルポインタ,1行の最大長)
ファイルポインタから行を取得し、CSVフィールドを処理するだそうです。CSVファイルから1行取得するってことですかね?1行の最大長とは1行に書ける最大バイト数ですかね?UTF-8だと日本圏で1~4バイトで1文字らしいかな?この辺も難しいです。
while文
while(条件){条件を満たす場合はループします。}
配列やループ数が決まっているものはfor文、それ以外はwhile文でいきます。ここの場合、
while(fgetcsv($handle,1000)){
// 一行分のデータを取り出す
list($pdate, $pprice, $star,$lang[0],$lang[1],$lang[2],$lang[3],$lang[4],$lang[5],$job) = $data;
// 一行分のデータを表示
echo '<tr><td>' . htmlspecialchars($pdate, ENT_QUOTES) . '</td><td>' . htmlspecialchars($pprice, ENT_QUOTES) . '</td><td>' . htmlspecialchars($star, ENT_QUOTES) . '</td>';
for ($i =0; $i < 6; $i++) {
if($lang[$i] == '') {
echo '<td align="center">-</td>';
} else {
echo '<td align="center">○</td>';
}
}
echo '<td>' . htmlspecialchars($job, ENT_QUOTES) . '</td>';
echo '<tr>';
}
fget関数がCSVファイルからデータを取得できなくなるまでループします。
エラーが出なければ下のような画面ができます↓(※画像はクリックで拡大できます。)

PR