忍者ブログ

おやっさんのWEBサイト制作への道

WEBサイト制作ど素人のおやっさんが、HTML、CSS、PHPなど学んでいく技術ブログです。

[PR]

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

PHP012(アンケートフォーム04 setlocal(カテゴリ,'言語-地域'),fgetcsv(ファイルポインタ,1行の最大長),while文)

今度は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ファイルからデータを取得できなくなるまでループします。


エラーが出なければ下のような画面ができます↓(※画像はクリックで拡大できます。)
CSVファイルデータをブラウザで表示

PR

コメント

お名前
タイトル
文字色
メールアドレス
URL
コメント
パスワード Vodafone絵文字 i-mode絵文字 Ezweb絵文字

カレンダー

04 2024/05 06
S M T W T F S
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31

フリーエリア

にほんブログ村 IT技術ブログ HTML/CSSへ にほんブログ村 IT技術ブログ PHPへ

最新コメント

[11/23 テスト]

プロフィール

HN:
おやっさん
性別:
非公開

バーコード

ブログ内検索

P R

忍者ツールズプロフィール

忍者ツールズプロフィールは終了しました

カウンター