スマフォサイト制作
jQuery MobileでGoogle Mapを表示する
jQuery Mobileで構築しているスマフォサイト制作で、Google Mapを設置したいと考えた。しかし、apiとscriptを記述してもうまく表示されない。(描画が途中でストップしている)
そこで、jQuery Mobileを使用しGoogle Mapが表示されなかった時の対処方法を検索した。その中で、以下の記述方法が散見された。
$('#selector').bind('pageshow', function () { //地図を表示するスクリプトを書く });
だが、いくら試しても表示されず諦めかけた時ふと原点に立ち返り、
「'pageshow'の正しい記述方法」を検索してみよう。
その結果、下記の記述を発見し、見事表示された。
$(document).on('pageshow', '#selector', function() { //地図を表示するスクリプトを書く });
先人達の対処方法は大変貴重な物ではあるが、全て鵜呑みにするのではなく、きちんとした知識を自分の中に蓄える必要があると感じた。
- 参考サイト:「WEB EGG」
お問い合わせ:データベース(1)
入力されたデータを保存するためのデータベース
- サーバー上にデータベースを構築する
- SQL文を記述する
- お問い合わせ内容を格納するデータベースを作る
データベース作成
- 有料サーバーの場合、契約内容によってデータベースの作成数が決まっているので注意する
テーブルを作成
- テーブル名「inquiry」、フィールド数「4」
カラム | 種別 | 長さ/値 | デフォルト値 | NULL | インデックス | A_I |
---|---|---|---|---|---|---|
id | INT | なし | × | PRIMARY | チェックを入れる | |
name | VARCHAR | なし | × | |||
VARCHAR | なし | × | ||||
message | VARCHAR | なし | × |
id
- ユニークコード(通し番号)
- 1件1件の問い合わせを識別する為
データ種別 | 意味 | 文字数 | 範囲 |
---|---|---|---|
INT | 整数 | 文字ではないので指定しない | -2147483648〜2147483647 |
VARCHAR | 文字列 | 最大文字数を指定する | 0〜65,535文字 |
インデックス:PRIMARY
- インデックスは「索引」の意味
- これを設定するとデータの検索が早くなる
- PRIMARYは1つのテーブルの中で1つのフィールドにしか設定できないインデックス
- そのテーブルを代表するフィールド
- 「主キー」とも呼ばれる
A_I(AUTO INCREMENT)
- 自動的に通し番号をセットしてくれる
- テーブルの最終レコードのコードを取得する
- その値に1をプラスする
- 新しいレコードのコードフィールドにその値をセットする
SQL文を記述
INSERT INTO inquiry (name, email, message) VALUES ('山田', 'yamada@gamil.com', 'はじめまして。');
- SQLタブをクリック
- 「INSERT INTO」がレコード追加命令
- VALUESの左のフィールドに右の値をセットする
- 実行する
表示で確認
- 表示タブをクリック
お問い合わせデータをデータベースに自動保存
- データベースに「接続」する
- データベースエンジンにSQL文で命令を出す
- データベースから「切断」する
データベースに「接続」
$dsn = 'mysql:dsname=データベース名;host=データベースホスト名'; $user = 'ユーザー名'; $password = 'パスワード'; $dbh = new PDO($dsn, $user, $password); $dbh -> query('SET NAMES UTF8');
- XAMPP内では
$dsn = 'mysql:dbname=contactus;host=localhost'; $user = 'root'; $password = 'root'; $dbh = new PDO($dsn, $user, $password); $dbh -> query('SET NAMES UTF8');
データベースエンジンにSQL文で命令を出す
$sql = 'ここにSQL文を書く'; $stmt = $dbh -> prepare($sql); $stmt -> execute();
データベースから「切断」
$dbh = null;
入力画面の作成
《input.php》
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <title>お問い合わせフォーム</title> </head> <body> <div id="confirmation"> <form action="check.php" method="post" id="inquiry"> <table> <tr> <th><label for="name">お名前</label></th> <td><input type="text" name="name" size="20" id="name" class="text1"></td> </tr> <tr> <th><label for="email">メールアドレス</label></th> <td><input type="text" name="email" size="50" id="email" class="text2"></td> </tr> <tr> <th><label for="message">ご意見</label></th> <td><textarea name="message" cols="50" rows="5" class="text3" id="message"></textarea></td> </tr> </table> <input type="submit" value="確認画面へ"> </form> </div> </body> </html>
入力されたデータの確認
《check.php》
<?php //フォームデータが空の場合は処理終了 if(empty($_POST)) { echo '処理終了'; exit; } require_once 'Encode.php'; //セッションの開始 session_start(); ?> <!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <title>確認画面</title> <style> section { width: 500px; margin: auto; text-align: center; } table { text-align: left; border: none; } td { width: 300px; padding: 3px; } td.subButtom { column-span: 2; text-align: right; } </style> </head> <body> <section> <h1>確認画面</h1> <p>内容を確認してください。</p> <?php //入力値のチェック if(empty($_POST['name'])) { echo 'お名前を入力してください。'; exit; } if(empty($_POST['email'])) { echo 'メールアドレスを入力して下さい。'; exit; } if(empty($_POST['message'])) { echo 'メッセージを入力してください。'; exit; } //入力値の取得・加工 $name = e($_POST['name']); $email = e($_POST['email']); $message = e($_POST['message']); $_SESSION['name'] = $name; $_SESSION['email'] = $email; $_SESSION['message'] = $message; ?> <form method="post" action="thanks.php"> <table> <tr> <td>お名前</td> <td><?php echo $name; ?></td> </tr> <tr> <td>メールアドレス</td> <td><?php echo $email; ?></td> </tr> <tr> <td>メッセージ</td> <td><?php echo nl2br($message); ?></td> </tr> <tr> <td class="subButtom"> <input type="submit" name="sub1" value="送信する"> </td> </tr> </table> </form> </section> </body> </html>
SQLを使う‐基本
データを挿入する
INSERT INTO schedule (sdate, stime) VALUES ('2013-10-31', '19:00:00');
INSERT文
- 作ったテーブルにデータを挿入するには「INSERT」構文を使う
INSERT テーブル名(フィールド名1, フィールド名2...) VALUES (値1,値2...);
- 「SET」を使った書式は下記になる
INSERT テーブル名 SET フィールド名1=値, フィールド名2=値...;
phpMyAdminを使う
データベースユーザーを作成する
- サイドメニューにある作成したデータベース[mydb]リンクをクリックする
- ナビゲーションバーの[特権]をクリックし、[ユーザーを追加する]リンクをクリックする
- 登録フォームが表示されたら適宜入力し、[ユーザーを追加する]ボタンをクリックする
テーブルを作成
- 新しいテーブルを作る
- サイドメニューの[mydb]リンクをクリックし、データベースの操作画面を表示する
- [テーブルを作成]欄から、名前に「schedule」、カラム数に「5」と入力し[実行]ボタンをクリックする
フィールドの詳細を設定する
- フィールド(テーブルの列項目)を設定する画面が表示されるので、以下のように入力する
- 入力が完了したら、[保存する]ボタンをクリックする
カラム | 種別 | 長さ/値 | デフォルト値 | NULL | インデックス | A_I |
---|---|---|---|---|---|---|
sid | INT | なし | × | PRIMARY | チェックを入れる | |
title | VARCHAR | 100 | 無題 | × | ||
sdate | DATE | なし | × | |||
stime | TIME | なし | × | |||
memo | TEXT | なし | × |
フィールドの型
VARCHAR | 文字数を指定する必要がある文章で、例えば桁数の決まったコードなどを格納する時などに使う。 |
---|---|
TINYINT SMALLINT BIGINT |
INTと同様に整数のフィールドですが、上限と下限によっていくつか準備されている。TINYINTは「-128から127」、SMALLINTは「-32768から32767」、BIGINTの場合は「兆」を超えた桁数という非常に大きな桁数を扱える。 |
FLOAT DOUBLE |
少数を扱う型でDOUBLEの方が大きなデータを扱うことが出来る。 |
DATE DATETIME |
日付または日付と時間を扱うことが出来る。 |
BLOB | 「バイナリデータ」と呼ばれる、コンピュータ用のデータをそのまま取り込むことが出来る。 |
新規のデータを登録する
- scheduleテーブルの[挿入]リンクをクリックする
- 図のようにデータを入力したら[実行]ボタンをクリックする
- 成功メッセージが確認できたら、テーブル一覧画面からscheduleテーブルの[表示]リンクをクリックする
- 入力された内容が反映されている事を確認する
- 同様に以下のデータ5件を[挿入]で登録する
title | sdate | stime | memo |
---|---|---|---|
WINGS会議 | 2013-10-02 | 17:00:00 | 配布資料の用意 |
PHP10講習会 | 2013-10-17 | 10:00:00 | PPT資料の予備データ持参 |
新規メンバー面接 | 2013-10-17 | 14:00:00 | 応募資料のコピー |
B企画の打ち上げ | 2013-10-25 | 18:00:00 | 四谷駅に集合 |
佐藤さんと打ち合わせ | 2013-10-31 | 15:00:00 | 203会議室 |
既存のデータを編集する
- データの一覧から変更したいデータの上をクリックする
- カーソルが表示され変更可能な状態になるので変更する
- 上記手順で変更可能な状態にならなかった場合は、変更したいデータの[編集]リンクをクリックして編集フォームから変更する
WordPress実習(4):テキストP250 〜 P305
固定ページを1段組レイアウトにする
page.phpを用意する
- 編集中のテーマ「sample」フォルダにpage.phpファイルを何も記述せずにアップロードする
《page.php》
<?php get_header(); ?> <!-- コンテンツ --> <div id="content" class="page"> <?php if(have_posts()): while(have_posts()): the_post(); ?> <div class="post"> <h2><a href="<?php the_permalink(); ?> <?php the_title(); ?></a></h2> <?php the_content(); ?> </div> <?php endwhile; endif;?> </div> <?php get_footer(); ?>
《style.css》
/* 固定ページ */ div#content.page { width:100%; }
ナビゲーションバーを作成する
register_nav_menus()
- カスタムメニューの機能を有効にする
<?php wp_nav_menu(); ?>
- カスタムメニューを出力する
《functions.php》
//カスタムメニュー register_nav_menus(array('navigation' => 'ナビゲーションバー'));
《header.php》
<!-- ナビゲーションバー --> <div id="nav"> <?php wp_nav_menu(array('theme_location' => 'navigation')); ?> </div>
《style.css》
/* ナビゲーションバー */ div#header { margin-bottom: 0; } div#nav ul { background-color: #000000; padding: 8px 0; margin: 0 0 20px; } div#nav li a { font-size: 0.75em; color: #FFFFFF; text-decoration: none; } div#nav li a:hover { color: #FFAA00; } div#nav li { display: inline; list-style-type: none; border-right: 1px #FFFFFF solid; padding-left: 15px; padding-right: 15px; }
トップページをビジネスサイト風のページにする
ビジネスサイト風のページ専用のテンプレートを用意する
- 編集中のテーマ「sample」フォルダにbusiness.phpファイルを何も記述せずにアップロードする
《header.php》
<?php if(!(is_page('ビジネス風のページ'))): ?> <p id="image"><img src="<?php bloginfo('template_url'); ?>/header.jpg" alt="*" width="760" height="200"></p> <?php endif;?>
《business.php》
<?php /* Template Name: ビジネスサイト風テンプレート */ ?> <?php get_header(); ?> <!-- content --> <div id="topcontent"> <?php if(have_posts()): while(have_posts()): the_post(); ?> <p><img src="<?php bloginfo('template_url'); ?>/topimage.jpg" alt="*" width="760" height="370"></p> <?php the_content(); ?> <?php endwhile; endif; ?> </div> <?php get_footer(); ?>
《style.css》
/* ナビゲーションバー */ div#nav { clear: both; width:100%; } …略… /* トップページ */ div#topcontent p { text-align: center; font-size: 0.875em; line-height: 1.5; margin: 0 0 20px; }
固定ページにだけに出力する
条件分岐の結果を逆にする
管理画面でヘッダー画像を変更できるようにする
add_custom_image_header()
- カスタムヘッダーの機能を有効にする
<?php header_image(); ?>
- カスタムヘッダーのヘッダー画像を出力する
<?php if(get_header_image()): ?>〜<?php endif; ?>
- ヘッダー画像がある場合は中身を出力する
《function.php》
//カスタムヘッダー add_custom_image_header('', 'admin_header_style'); function admin_header_style() { ?> <style type="text/css"> #headimg { width: 760px!important; } </style> <?php } define('NO_HEADER_TEXT', true); define('HEADER_IMAGE', '%s/default_header.jpg'); define('HEADER_IMAGE_WIDTH', 760); define('HEADER_IMAGE_HEIGHT', 200); ?>
《header.php》
<!-- ヘッダー --> <div id="header"> …略… <?php if(!(is_page('ビジネスサイト風のページ'))): ?> <?php if(get_header_image()): ?> <p id="image"><img src="<?php header_image(); ?>" alt="*" width="<?php echo HEADER_IMAGE_WIDTH; ?>" height="<?php echo HEADER_IMAGE_HEIGHT ?>"></p> <?php endif; ?> <?php endif; ?> </div>
管理画面で背景画像を変更できるようにする
add_custom_background()
- カスタム背景の機能を有効にする
《function.php》
…略…
define('HEADER_IMAGE_HEIGHT', 200);
//カスタム背景
add_custom_background();
?>
《header.php》
…略… <link rel="alternate" type="application/rss+xml" title="RSSフィード" href="<?php bloginfo('rss2_url'); ?>"> <?php wp_head(); ?> </head> <body <?php body_class(); ?>> //WordPress3.3以降はこの指定が必要
《style.css》
/* コンテンツの背景 */ div.post, p.feed, #comments { background-color: #FFFFFF; }
WordPress3.3.x以降でカスタム背景を表示する方法
習得度確認試験4
問題
Q2 PHPの特徴として正しいものはどれか
- Windows環境でのみ動作
- コンパイラ型言語
- クライアントPCで動作
- オブジェクト指向言語
Q3 PHPの変数名として、使用可能な名前は次のうちどれか
- #class
- $12data
- $_file
- HENSUU!
Q4 PHPの文法の特徴として正しいものはどれか
- 大文字と小文字は区別しない
- 全角と半角は区別しない
- コマンドは自由に大体合っていれば動作する
- コマンドは日本語でも英語でも動作する
- 全て正しくない
Q5 PHPにおけるインデントとは何を指すか
- 改行
- 処理の終了
- 重み付け
- カンマ区切り
- 数文字分のスペース
Q6 1行コメントを記述する為に必要とされる記号はどれか
- / (スラッシュ)
- \ (エンマーク)
- * (アスタリスク)
- // (ダブルスラッシュ)
- 1から4以外
Q7 下記を実行するとブラウザに出力される値はどれか
<?php $x = "PHPは、"; $y = 1; $z = "番楽しい"; print $x . $y . $z . "です!";
Q8 下記を実行するとブラウザに出力される値はどれか
<?php $a = 3; $b = 6; $c = $a++; $d = ++$b; $e = $c + $d; print '変数の値は' . $e . 'です。';
- 変数の値は12です。
- 変数の値は10です。
- 変数の値は11です。
- 変数の値は$eです。
Q9 下記を実行するとブラウザに出力される値はどれか
<?php $x = 10; $y = 2; $a = $x + $y; $b = $x - $y; $c = $x * $y; $d = $x / $y; $e = $x % $y; print "$a" + $b + $c + $d + $e;
- $a82050
- 45
- $a33
- $a38
練習問題
定数の記述で正しいものはどれか
- final FILENAME = "mondai.txt";
- const FILENAME = "mondai.txt";
- const(FILENAME = "mondai.txt");
- define("FILENAME", "mondai.txt");
PHP01
- 変数「$a」に「1000」を代入し、変数「$a」の値を画面に表示しなさい
PHP02
- 変数「$greeting」に「おはよう」を代入し、「$greeting」の値を画面に表示しなさい
- そのあと、その変数「$greeting」に「こんにちは」を代入し、「$greeting」の値を画面に表示しなさい
PHP03
- 変数「$x」に「100」を代入し、更にその「$x」を「$y」に代入し、「$y」の値を画面に表示しなさい
PHP04
- 定数値「7」の定数「DAYS_IN_WEEK」を宣言し、「DAYS_IN_WEEK」の値を画面に表示しなさい
PHP05
- 変数「$syosu」に「1.4142」を代入し、変数「$syosu」の値を画面に表示しなさい
PHP06
- 変数$aと$bに100を代入し、さらに変数$aと$bをかけた値を変数$cに代入して、変数$cの値を画面に表示しなさい
PHP07
- 変数$xに'好きな果物は'を、変数$yに'りんごです。'を代入して、さらに変数$xと変数$yを連結した文字列を、複合演算子を利用して変数$xに代入して、変数$xの値を画面に表示しなさい
習得度確認試験:解答
Q1:3、Q2:4、Q3:3、Q4:5、Q5:5、
Q6:4、Q7:2、Q8:2、Q9:2、Q10:5
Q8の補足説明
<?php $a = 3; $b = 6; $c = $a++; //(1) $d = ++$b; //(2) $e = $c + $d; print '変数の値は' . $e . 'です。';
- (1)の値は変数に代入してから1加算するので「3」、(2)の値は1加算してから変数に代入するので「7」になる
練習問題:解答
- 定数の記述方法
define('定数名', '値');
define('BIRTHDAY', '9月15日です。'); print BIRTHDAY; //定数BIRTHDAYを表示する
PHP01
<?php $a = 1000; print $a;
PHP02
<?php $greeting = 'おはよう.<br>'."\n"; print $greeting; $greeting = 'こんにちは'; print $greeting;
PHP03
<?php $x = 100; $y = $x; print $y;
PHP04
<?php define('DAYS_IN_WEEK','7'); print DAYS_IN_WEEK;
PHP05
<?php $syosu = 1.4142; print $syosu;
PHP06
<?php $a = 100; $b = 100; $c = $a * $b; print $c;
PHP07
<?php $x = '好きな果物は、'; $y = 'りんご'; //print $x.$y; $x .= $y; print $x;