忍者ブログ

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

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

[PR]

×

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

PHP015(アンケートフォーム07 date(日時の取得,タイムスタンプ),strotime(),ユーザー定義関数,SELECT文,ORDER BY,mysql_fetch_object())

アンケート結果
1.検索結果(query_question.php)

2.結果画面(show_question_db.php)

↑こんな感じで作っていきます。

ではquery_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" />
<link rel="stylesheet" href="style.css" type="text/css" />
<style>
</style>
<title>アンケート検索</title>
</head>
<body>
<p>■検索条件を入力してください。</p>
<form action="show_question_db.php" method="POST">
<p>購入日:<br />
<label>①<input type="text" name="sdate" value="<?php echo date('Y/m/d',strtotime('-1 month'));?>" /></label>
~<label>②<input type="text" name="edate" value="<?php echo date('Y/m/d');?>" /></label>
</p>
<p>
<label><input type="radio" name="sort" value="date" checked="checked" />購入日でソートする</label>
<label><input type="radio" name="sort" value="pprice" />平均購入額でソートする</label>
<label><input type="radio" name="sort" value="star" />評価でソートする<label><br />
<label><input type="radio" name="sort" value="job" />職業でソートする</label>
<label><input type="radio" name="sort" value="entry_date" />アンケートの登録日でソートする</label>
</p>
<p>
<input type="submit" value="アンケートを表示する" />
</p>
</form>
</body>
</html>

date(日時の取得,タイムスタンプ)

日時を取得します。
date('Y/m/d H:i:s)で年/月/日 時:分:秒になります。/や:の文字列は自色々な文字列を使えます。タイムスタンプを省略すると現在の日付になります


strotime()

文字列からタイムスタンプ(※1970年1月1日 00:00:00からの秒数です。)を取得します。
strotime('now')で今です。
strotime('+1 month')で1ヶ月後です。色々記述の仕方があるらしいので、使うときにググるのがいいかと思います。


↓こんな感じの画面です(※画像はクリックで拡大できます。)


データ検索画面


↓次にshow_question_db.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" />
<link rel="stylesheet" href="style.css" type="text/css" />
<style>
</style>
<title>アンケート結果</title>
</head>
<body>
<?php
// 日付のチェック関数の作成
function get_checked_date($date){

// 全角から半角へ変換
$checked_date = mb_convert_kana($date,'as','UTF-8');

// 「/」で分割
if (empty($checked_date)) {
echo '年月日を入力してください。<br />';
} elseif (preg_match("/([0-9]{4})[-\/]+([0-9]{1,2})[-\/]+([0-9]{1,2})/", $checked_date)) {
list($year,$month,$day) = explode('/',$checked_date);
} else {
echo htmlspecialchars($checked_date, ENT_QUOTES) . '(年月日を「/」で区切って下さい。)<br />';
}

// 日付チェック
if (!checkdate($month,$day,$year)) {
// 現在の日付
$checked_date = date('Y/m/d');
}
return $checked_date;
}

$sdate = get_checked_date($_POST['sdate']);
$edate = get_checked_date($_POST['edate']);
$sort = $_POST['sort'];
?>
<p<■アンケート結果</p>
<table border="1">
<tr>
<tr bgcolor="#cccccc">
<td>ID</td>
<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>
<td>登録日</td>
</tr>

<?php
// MySQLへの接続
$conn = mysql_connect('localhost','sample_user','sample_pass');

if($conn) {
//データベースの選択
mysql_select_db('sample_db',$conn);
//データベースへのお問い合わせSQL文
$sql = 'SELECT question_id,purchase_date,purchase_price,star,lang_php,lang_perl,
lang_java,lang_cs,lang_cpp,lang_basic,job,entry_date FROM question_td WHERE purchase_date>="'.$sdate.'"AND purchase_date<="'.$edate.'"';
// ソート
if($sort == 'date'){
$sql = $sql.'ORDER BY purchase_date';
}elseif($sort == 'pprice'){
$sql = $sql.'ORDER BY purchase_price';
}elseif($sort == 'star'){
$sql = $sql.'ORDER BY star';
}elseif($sort == 'job'){
$sql = $sql.'ORDER BY job';
}elseif($sort == 'entry_date'){
$sql = $sql.'ORDER BY entry_date';
}
// SQL文の送信
$query = mysql_query($sql, $conn);

// データの取り出し
while($row=mysql_fetch_object($query)){
echo '<tr>';
echo '<td>'.$row-<question_id.'</td>';
echo '<td>'.$row-<purchase_date.'</td>';
echo '<td>'.$row-<purchase_price.'</td>';
echo '<td>'.$row-<star.'</td>';
echo '<td>'.$row-<lang_php.'</td>';
echo '<td>'.$row-<lang_perl.'</td>';
echo '<td>'.$row-<lang_java.'</td>';
echo '<td>.$row-<lang_cs.'</td>';
echo '<td>'.$row-<lang_cpp.'</td>';
echo '<td>'.$row-<lang_basic.'</td>';
echo '<td>'.$row-<job.'</td>';
echo '<td>.$row-<entry_date.'</td>';
echo '</tr>';
}
//データベースへの評価の平均点を取り出すSQL文
$sql_avg = 'SELECT ROUND(AVG(star),1) AS star_average, ROUND(AVG(purchase_price),1) AS price_average FROM question_td';
// 評価の平均点の表示
$query_avg = mysql_query($sql_avg,$conn);
$row_avg=mysql_fetch_object($query_avg);
echo '<tr><td bgcolor="#cccccc" colspan="6">購入額の平均額</td><td colspan="6">'.$row_avg-<price_average.'</td></tr>';
echo '<tr><td bgcolor="#cccccc" colspan="6">評価の平均点</td><td colspan="6">'.$row_avg-<star_average.'</td></tr>';
}
?>
</table>
</body>
</html>

ユーザー定義関数

functionで自分で関数が作れます。
①引数1つ、戻り値あり
function tax($num){$num*=1.05;
return $num}
$price = tax(10000);
これでtax()と言う名前の関数ができました。消費税の計算をできますね。戻り値とは関数に引数を入れて出た値の事です。たぶんです。②戻り値なし
function h($str){
$str = htmlspecialchars($str, ENT_QUOTES);
echo $srt;}
h(POST_[''messagr]);でサニタイズできます。なんで戻り値なしなんだろう?なんか難しいです。
③引数を2つ(省略不可)
functio taxIn($price,$tax){
return $price*$tax;
}
$price = taxIn(10000,1.05);で掛け算ですね。また消費税の掛け算です。引数を2つを省略して使えないって意味です。
④引数2つ(第2引数省略可)
function taxIn($price,$tax = 1.05){
return $price*$tax;
}
$price = taxIn(10000); →「10500」
$price = taxIn(10000,1.07); →「10700」
です。この場合第2引数に初期値(1.05)を入れているのいるので第2引数を省略することも可能です。このまま第3引数もある場合、第2引数省略時、第3引数は渡せないそうです。難しいけど、よく考えると理屈はわかります。後、初期値のない引数は省略できないので第1引数にするそうです。この辺は実際、使うようにならないとわからなのかもしれません。要は慣れなんでしょうね。


SELECT文

SQL文です。
lang_java,lang_cs,lang_cpp,lang_basic,job,entry_date FROM(←※question_tdから テーブル名です。) question_td WHERE(※条件①→) purchase_date>="'.$sdate.'"AND(※条件②→) purchase_date<="'.$edate.'"';>
みたいな感じです。

ORDER BY

ソート(※データの集合を一定の規則に従って並べること。らしいです)の場合に使います。
ORDER BY フィールド名; 又はORDER BY フィールド名 ASC;で昇順
ORDER BY フィールド名 DESC;で降順です。頭が限界です。


mysql_fetch_object()

データを1行分オブジェクト型で受け取るらしいです。ここでは
while($row(←※オブジェクト)=(←※代入)mysql_fetch_object($query)){
echo '<tr>';
echo '<td>'.$row(←※オブジェクト)-<(←※-<は決まっている)question_id(←※プロパティ ここはフィールド名、クォーテーション不要です。).'</td>';
echo '<td>'.$row-<purchase_date.'</td>';



echo '</tr>';
}みたいな感じです。なんか配列と同じような感がします。ムズイです。

↓アンケートの結果はこんな画面で表示されます。やってる本人も完全には理解できません。


アンケートの検索結果

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

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

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

カウンター