Webデザインの勉強と製作 | あかとんぼ

フェリカテクニカルアカデミーの学習をベースに、Webについての勉強と製作の過程をまとめています。

[Flash]AS3.0によるFlashの制作…基本構造

ActionScript3.0

オブジェクト指向とは

  • オブジェクトとは…プロパティ(性質)とメソッド(行動)をもったひとつの塊
クラスとインスタンス
  • オブジェクトの原型をクラス、そこからオブジェクトの複製を作ることをインスタンス化という
  • var mc:MovieClip = new MovieClip();
  • ↑MovieClip();は設計図にあたるクラス。new命令によってインスタンス化し、変数mcに代入。
プロパティとメソッド
クラスの継承
  • プロパティやメソッドを別のクラスに引き継ぐことができる
  • 「自動車」クラスを「乗用車」クラス、「クレーン車」クラスに継承する概念のイメージ

表示リスト…Flashの階層構造

  • オブジェクトは「ステージ」の中に内包され、さらにそれぞれを
  • 親はparent、子はchild、自身はthisで参照できる
階層構造
  • シンボルにASリンケージ(つながり)を設定してスクリプトから呼び出す
  • インスタンスの重なり順序は深度(z-index)で決定される
  • 子の座標は親の座標からの相対になる

f:id:akatonbo_web:20150717200503p:plain

import flash.display.MovieClip;

var MClipA: MovieClip = new Shikaku();
MClipA.x = 0;
MClipA.y = 0;
addChild(MClipA);

var MClipB: MovieClip = new Sankaku();
MClipB.x = 50;
MClipB.y = 50;
addChild(MClipB);

var MClipC: MovieClip = new Maru();
MClipC.x = 100;
MClipC.y = 100;
addChild(MClipC);

var MClipD: MovieClip = new Hoshi();
MClipD.x = 200;
MClipD.y = 0;
MClipC.addChild(MClipD);

[PHP][SQL]データベースの構築①

データベースの構築

データベースの作成
  • データベースを制作すると、テーブルに実際のデータが格納される。
  • 個別テーブルをクリック>タブ「表示」をクリックする。データはEcelのような表示。
データベースの追加
  • 挿入タブから→データベース末尾に追加される
  • 表示タブから→それぞれを直接編集できる
  • 入力できる文字数の制限などは「構造」タブから設定できる
SQL
  • データベースを操る言語、phpとは別物
  • テーブルを選んだ状態でSQLタブを選択・基本構文4つ
  • SELECT文
  • DELETE文
  • UPDATE文
  • INSERT文
  • CRUDの概念…create read update delete
SELECT文
  • データを選ぶ
  • 基本構文→SELECT カラム名 FROM テーブル名;
INSERT文
  • 挿入
  • 基本構文→INSERT INTO テーブル名 (挿入先カラム名) VALUES (値)※セミコロン不要
UPDATE文
  • 更新 誤操作に注意!
  • 基本構文→UPDATE テーブル名 SET カラム名 = '値';
  • どの行にたいして更新するか指定しないとカラムが1行まるごと更新されてしまう→WHERE句を使う
  • 基本構文→UPDATE テーブル名 SET カラム名 = '値' WHERE カラム名 = カラム番号;
  • シングルクォートとアポストロフィーの書き間違いに注意 runble1.com
DELETE文
  • 削除 誤操作に注意!
  • DELETE FROM テーブル名 WHERE カラム名=カラム番号;

データベースの制作まとめ

  • データベース名をつけ、カラム数を設定する
  • 一つ目のカラムは、データ型int インデックスをPRIMARYにしておく(主キー)さらにAIをチェック(autoIncrement、自動的に1加算)
  • PRIMARY(主キー)には一意性の、それぞれが他と重複しないデータを設定する
  • すなわち一つ目はデータ照合用の連番データとなる
  • 文字を格納するカラムにはデータ型varchar(短い文字列型)、照合順序はutf8-general_ciに設定する、また文字数を設定

[PHP]フォームの制作…まとめ

構造

  • index.php…フォームを記述、フォームをpostで送信
  • check.php…送られた内容のチェック、合っていればsendへ、間違っていれば戻る
  • send.php…メールの送信
  • func.php…共通化できる関数をまとめ呼び出せるようにする
index.php
<?php
require_once dirname(__FILE__).'/func.php';
$name ='';
$email ='';
$message ='';
$name_error='';
$email_error='';
$message_error='';
if(isset($_SESSION['mail']['name'])){
  $name = $_SESSION['mail']['name'];
}
if(isset($_SESSION['mail']['email'])){
  $email = $_SESSION['mail']['email'];
}

if(isset($_SESSION['mail']['message'])){
  $message = $_SESSION['mail']['message'];
}
if(isset($_SESSION['mail']['name_error'])){
  $name_error = $_SESSION['mail']['name_error'];
}
if(isset($_SESSION['mail']['email_error'])){
  $email_error = $_SESSION['mail']['email_error'];
}
if(isset($_SESSION['mail']['message_error'])){
  $message_error = $_SESSION['mail']['message_error'];
}
?>

<!DOCTYPE HTML>
<html lang="ja">
<head>
<meta charset="utf-8">
<title>お問い合わせフォーム</title>
<style>
span {
  color:red;
}
</style>
</head>
<body>
<h1>お問い合わせフォーム</h1>
<form action="check.php" method="post">
<table>
<tr>
<th><label for="name">お名前:</label>(20文字以内)</th><td><input type="text" name="name" id="name" value="<?php echo h($name);?>" maxlength="20" maxlength="20" size="50" placeholder="例:猫田猫男" required  autofocus>
<?php 
if(!empty($name_error)){
    echo "<span>{$name_error}</span>";
}
?>
</td>
</tr>
<tr>
<th><label for="email">Eメール:</label>(25文字以内)</th><td><input type="email" name="email" id="email" value="<?php echo h($email);?>" maxlength="25" placeholder="例:example@example.com" size="50" required><?php if(!empty($email_error)){echo "<span>{$email_error}</span>";}?></td>
</tr>
<tr>
<th><label for="message">お問い合わせ:</label>(150文字以内)</th><td><textarea name="message" id="message" maxlength="150" placeholder="例:資料を請求いたします。" cols="40" rows="5" required><?php echo h($message);?></textarea><?php if(!empty($message_error)){echo "<span>{$message_error}</span>";}?></td>
</tr>
</table>
<input type="submit" value="確認">
</form>
</body>
</html>
check.php
<?php
require_once dirname(__FILE__).'/func.php';
if(!isset($_POST['name'])||!isset($_POST['email'])||!isset($_POST['message'])){
  header('Location:index.php');
  exit;
}
$name = $_POST['name'];
$email= $_POST['email'];
$message = $_POST['message'];

$success = true;
$name_error='';
$email_error='';
$message_error='';
//@がはいってるかのチェック
if(strpos($email,'@')===false){
  $email_error =  '@マークがありません';
  $success = false;
}

if(strlen($email)!=mb_strlen($email,'utf-8')){
  $email_error =  'Eメールに全角文字が含まれています';
  $success = false;
}

if(mb_strlen($name,'utf-8')>20){
  $name_error = 'お名前が長すぎます';
  $success = false;
}
if(mb_strlen($email,'utf-8')>25){
  $email_error =  'Eメールが長すぎます';
  $success = false;
}
if(mb_strlen($message,'utf-8')>150){
  $message_error =  'お問い合わせ内容が長すぎます';
  $success = false;
}

if(empty($name)){
  $name_error= '名前が入力されてません';
  $success = false;
}
if(empty($email)){
  $email_error= 'Eメールが入力されてません';
  $success = false;
}
if(empty($message)){
  $message_error= 'お問い合わせ内容が入力されてません';
  $success = false;
}
$_SESSION['mail']['name']= $_POST['name'];
$_SESSION['mail']['email']= $_POST['email'];
$_SESSION['mail']['message']= $_POST['message'];
$_SESSION['success'] = $success;

$_SESSION['mail']['name_error'] = $name_error ;
$_SESSION['mail']['email_error'] = $email_error  ;
$_SESSION['mail']['message_error'] = $message_error ;

if(!$success){
  header('Location:index.php');
  exit;
}
?>
<!DOCTYPE HTML>
<html lang="ja">
<head>
<meta charset="utf-8">
<title>お問い合わせ確認</title>
</head>
<body>
<h1>お問い合わせ確認</h1>
<table>
<tr>
<th>お名前:</th><td><?php echo h($name);?> </td>
</tr>
<tr>
<th>Eメール:</th><td><?php echo h($email);?></td>
</tr>
<tr>
<th>お問い合わせ:</th><td><?php echo nl2br(h($message)); ?></td>
</tr>
</table>
<p><a href="index.php">戻る</a></p>
<p><a href="send.php">送信</a></p>
</body>
</html>
send.php
<?php
require_once dirname(__FILE__).'/func.php';

if(!$_SESSION['mail']['success']){
  header('Location:index.php');
  exit;
}
$name = $_SESSION['mail']['name'];
$email = $_SESSION['mail']['email'];
$message = $_SESSION['mail']['message'];
//配列の初期化
$_SESSION = array();
unset($_SESSION['mail']);
if(isset($_COOKIE[session_name()])){
  setcookie(session_name(),'',time()-42000,'/');
}
session_destroy();
$body =<<<EOF
{$name}様よりお問い合わせメールが送信されました。
内容は以下の通りです
******************************
{$message}
{$name}様のメールアドレス:{$email}
EOF;
$r=mb_send_mail('xxxx@.com','お問い合わせメール',$body);
?>
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>メール送信終了</title>
</head>
<body>
<h1>メール送信終了</h1>
<p>以下内容のでメールが送信されました</p>
<table>
<tr>
<th>お名前:</th><td><?php echo h($name);?> </td>
</tr>
<tr>
<th>Eメール:</th><td><?php echo h($email);?></td>
</tr>
<tr>
<th>お問い合わせ:</th><td><?php echo nl2br(h($message)); ?></td>
</tr>
</table>
<p><a href="index.php">トップに戻る</a></p>
</body>
</html>
func.php
<?php
function h($str){
  return htmlspecialchars($str,ENT_QUOTES,'utf-8');
}
session_start();

[jQuery] [jQuery]モバイル環境を考慮したタッチイベントの実装、onイベント、高速化テクニック

metaの記述

  • 表示幅の設定、ズームの禁止
<meta name="viewport" content="width=device-width,user-scalable=no,initial-scale=1,maximum-scale=1">
  • 数列が電話番号として認識させない
<meta name="format-detection" content="telephone=no">

タッチできないPCを考慮したタッチイベントの設定

(function ($) {

/* UAがタッチイベントをサポートしているかを判別 */
var isTouch = document.ontouchstart !== undefined;
/*三項演算子 タッチ開始またはマウスダウンを返す*/
var start = isTouch ? 'touchstart' : 'mousedown';
var end = isTouch ? 'touchend' : 'mouseup';

/* onを利用して、変数に格納したイベントを指定する*/
/* hoverアクションをCSSで表現する */
$('#button').on(start, function () {
    $(this).addClass('hover');
  })
    .on(end, function () {
      $(this).removeClass('hover');
    });

}(this.jQuery));
onイベント
  • 複数のイベントを指定するなど多様な対応が可能になる app.codegrid.net

jQueryの高速化

  • 基本、セレクタ読み込みに処理時間がかかる
  • セレクタ指定にIDを使うと高速化
  • セレクタは左から読み込まれるため省略すると高速化
  • 同じセレクタは変数に格納すると次の読み込みが省略化できる
  • 特殊なセレクタ$('#entry-form p:first');等は$('#entry-form p').first();とメソッドに書き換えると高速化 DOMを操作するappend,prependなどは動作が重いため呼び出す回数が少なくなるよう工夫する

millkeyweb.com

[HTML][CSS]実践的コーディングにおける注意点

全般

HTML
  • HTML内で、imgのwidth,heightは念のためつけておくこと。
  • サイズを指定する際は奇数にならないよう注意すること。
  • インデントのルールを統一すること。(タグで統一、半角スペ2つで統一など…)
  • 機種依存文字(半角かな、囲み数字、<>など)は数値文字参照すること。
  • marginの幅を改行で指定しない。(装飾指定はスタイルシートで行う原則)
CSS
  • コーディング規約がある場合は遵守すること。とくに隠し文字など。
  • CSSセレクタはむやみに細かく指定しない…可読性の低下、優先順位が無駄に高くなるためあとで不都合が生じやすいため
  • body #wrapper #nav ul li a → #nav li a のように、セレクタは右から読まれる性質を考慮し簡単に書く
  • div#nav li.item a → #nav .item a のようにタグの種類を判別する必要がないときは略する

リアルタイムコーディングのすすめ

  • chrome等を利用してリアルタイムプレビューしながらCSSをいじれる便利機能 ascii.jp