忍者ブログ

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

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

[PR]

×

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

PHP011(アンケートフォーム03 array(),fopen(ファイル名,モード),flock(ファイルポインタ,モード),fputcsv(ファイルポインタ,配列),fclose(ファイルポインタ))

write_question.phpを作りましょう。




<!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>
<?php
// 購入日
$pdate = $_POST['pdate'];
// 平均購入額
$pprice = $_POST['pprice'];
// 評価
$star = $_POST['star'];
// 興味のある言語
for ($i =0; $i < 6; $i++) {
if (isset($_POST['lang'][$i])) {
$lang[$i] = $_POST['lang'][$i];
} else {
$lang[$i] = '';
}
}
$job = $_POST['job'];

// 日付チェック
// 全角から半角へ変換
$pdate = mb_convert_kana($pdate,'as','UTF-8');

// 「/」で分割
if (empty($pdate)) {
echo '年月日を入力してください。)<br />';
} elseif (preg_match("/([0-9]{4})[-\/]+([0-9]{1,2})[-\/]+([0-9]{1,2})/", $pdate)) {
list($year,$month,$day) = explode('/',$pdate);
} else {
echo htmlspecialchars($pdate, ENT_QUOTES) . '(年月日を「/」で区切って下さい。)<br />';
}
// 日付チェック
if (isset($year,$month,$day)) {
checkdate($month,$day,$year);
}
// 数値チェック
// 全角から半角変換
$pprice = mb_convert_kana($pprice,'as','UTF-8');
// 数値チェック
if (!is_numeric($pprice)) $pprice = '';

// 保存データ
$data = array($pdate,$pprice,$star,$lang[0],$lang[1],$lang[2],$lang[3],$lang[4],$lang[5],$job);

// 保存ファイルパス
$filename = 'uploads/question.csv';

// appendモードで開く
$handle = fopen($filename,'a');

// 排他的ロック
flock($handle, LOCK_EX);


// CSV書き込み
fputcsv($handle, $data);

// 排他的ロック解除
flock($handle, LOCK_UN);

// 閉じる
fclose($handle);
?>
<body>
<p>■アンケートを登録しました。</p>
<a href="uploads/question.csv"> CSVファイルのダウンロード</a>
</body>
</html>


まずchap4ディレクトリにuploadsディレクトリを作っておいてください。ここではCSVファイルを作ります。CSVファイルの特徴としては、データをカンマ区切り表す。エクセルで扱える。表に近い感覚で扱える。MIMEタイプが「text/csv」なのでメモ帳でも編集可能です。ECサイトの売り上げ・ユーザー情報出力ファイルなどに使用。などです。



array()

配列の一括指定ができる便利な関数です。
$data=[0 ] = $pdata;
$data=[1 ] = $pprice;
$data=[2] = $star;
$data = array(0 =>$pdata, 1=>$pprice, 2=> $star,・・・・・)的な感じです。
連想配列の場合は
$ary = array('naem '=>$usename, 'age'=>$age);みたいな感じです。
とばす場合は
$ary = array(3=> 1,2,3・・・・・);
$ary[3]・・・1
$ary[4]・・・2
$ary[5]・・・3的な感じです。
二次元配列は
$ary = array('tanaka' =>array('age'=>$age, 'tel'=>$tel), 'product' =>array('price'=> $price, num=> $num));
$ary['tanaka']['age']
$ary['tanaka']['tel']
$ary['product']['price']
$ary['product']['num']
的なややこしさです。


fopen(ファイル名,モード)

ファイルまたはURL?をオープンする関数です。
モードは'a'で追加書き込み、ファイルがない場合は新規作成です。
'r'で読み込み用にファイルを開くです。


flock(ファイルポインタ,モード)

ファイルをロックしたり。ロック解除したりもできます。ファイルポインタについてはいろいろ調べたのですが今一つ理解できません。モードは
LOCK_EX・・・排他的ロックです。(排他的ロックされていると、たぶんほかの人はアクセスできません。
LOCK_UN・・・ロック解除です。


fputcsv(ファイルポインタ,配列)

配列を一行分のデータとしてCSVの書式で書き込みます。


fclose(ファイルポインタ)

ファイルを閉じます。fopenのモードは問わないそうです。


CSVファイルに書き込み成功すると↓のような画面になります。
CSV書き込み完了画面
(※画像はクリックで拡大できます。画面はCSSで多少装飾してあるので、本当はもっとシンプルな画面です。)


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

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

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

カウンター