WEBデザイナーも知っておきたいPHP初級講座

自己紹介

自己紹介

運営サイト

著書

講座の概要

PHPとは

PHPとは

「ピーエイチピー」と読みます。

PHPで作れるもの

一方、以下のようなものはPHPで作れません。

PHPでの処理の流れ

WebサーバーにあるPHPファイルに書かれたプログラムが実行され、その結果がHTML文章として送り返されます。

スクリーンショット スクリーンショット

PHPでの処理の流れ

PHPはWebサーバー側でプログラムが実行されます。(ブラウザソフトが受け取るのは実行結果のみ。)

一方、JavaScriptはブラウザ上で実行されます。

開発環境の準備

テキストエディタ

テキストエディタ

スクリーンショット スクリーンショット

XAMPP

「ザンプ」もしくは「エグザンプ」と読みます。

Linux + Apache + MySQL + PHP = LAMP

XAMPP

インストールの流れ。

XAMPP

Skypeを使っている場合、「ツール」→「設定」から「詳細」→「接続」を選択し、「上記ポートの代わりに、ポート80を使用」のチェックを外します。

スクリーンショット

PHPプログラム作成の基本

Apacheの起動とファイルの配置

XAMPPのコントロールパネルから、Apacheを起動しておきます。

※XAMPPを C:\xampp にインストールした場合
※Macの場合は /Applications/XAMPP にインストールされる
※PHPプログラムの拡張子は php にする

スクリーンショット

スクリーンショット

http://localhost/test/sample.html

はじめてのPHP

プログラムをHTMLに埋め込んで書くことができます。

<html>
<head>
<title>サンプル</title>
</head>
<body>
<p>今年は<?php echo date("Y"); ?>年です。</p>
</body>
</html>

sample.php として保存して実行すると、ブラウザに

今年は2012年です。

のように表示されます。

はじめてのPHP

スクリーンショット

スクリーンショット

C:\xampp\htdocs\test\sample.php

http://localhost/test/sample.php

はじめてのPHP

実行結果のHTML

<html>
<head>
<title>サンプル</title>
</head>
<body>
<p>今年は2012年です。</p>
</body>
</html>

はじめてのPHP

動かないときは

UTF-8とUTF-8Nについて

PHPプログラムをUTF-8で書くときは、「BOMなし」のUTF-8にします。

UTF-8とUTF-8Nについて

スクリーンショット

プログラムの基本的なルール

<html>
<head>
<title>サンプル</title>
</head>
<body>
<p><?php

//画面に文字を表示する命令です
echo "こんにちは。<br />";
echo "PHPの世界へようこそ!";

/*
echo "ここは実行されません。";
*/

?></p>
</body>
</html>

プログラムの基本的なルール1

PHPプログラムは

<?php ~ ?>

の中に書く。その外に書くと普通のHTMLとして扱われる。

プログラムの基本的なルール2

echo "表示したい文字";

echo に続いてダブルクォートかシングルクォートで囲った文字を指定すると、画面に出力されます。

命令の最後には ; を書きます。書き忘れてエラーになることが多いので注意。

プログラムの基本的なルール3

//

から始まる行はコメントとして扱われます。

/* ~ */

と書くと、複数行をコメントにできます。

用途はHTMLのコメントと同じです。

プログラムの基本的なルール3

<!--ここからメインコンテンツ-->
<!--2012/05/01修正-->
<!--
<ul>
  <li>一時的に非表示にしたいコンテンツ</li>
</ul>
-->

プログラムの基本的なルール

<html>
<head>
<title>サンプル</title>
</head>
<body>
//画面に文字を表示する命令です
echo "こんにちは。";
</body>
</html>

<?php ~ ?> の外に書くと、PHPの文法に従って処理されません。

プログラムの基本的なルール

<html>
<head>
<title>サンプル</title>
</head>
<body>
<p><?php

//画面に文字を表示する命令です
echo "こんにちは。<br />";
echo "PHPの世界へようこそ!";

/*
echo "ここは実行されません。";
*/

?></p>
</body>
</html>

プログラムの基本的なルール

スクリーンショット

スクリーンショット

プログラムの基本的なルール

実行結果のHTML

<html>
<head>
<title>サンプル</title>
</head>
<body>
<p>こんにちは。<br />PHPの世界へようこそ!</p>
</body>
</html>

変数

変数=値を格納できる箱。

スクリーンショット

変数

$aaa = 5;
$keisan = 2 + 4;
$data = "こんにちは";

$ から始まる文字は変数とみなされ、値を格納できます。

値は後で計算に使用したり、echo で表示したりできます。

$aaa = 5;
$bbb = $aaa + 3;
$data = "さようなら";

echo $aaa;
echo $bbb;
echo $data;

変数

<html>
<head>
<title>サンプル</title>
</head>
<body>
<p><?php

//計算結果を変数に格納
$answer = 5 + 3;

//変数の内容を表示
echo $answer;

?></p>
</body>
</html>

条件分岐

if (条件) {
  条件に一致した時に実行するプログラム
}

動的に変化するページを作ることができます。

条件分岐

<html>
<head>
<title>サンプル</title>
</head>
<body>
<p><?php

echo "いらっしゃいませ!";

//条件に従って文字を表示します
if (date("d") > 25) {
  echo "毎月26日以降はお客様感謝デーです!";
}

?></p>
</body>
</html>

関数

関数=あらかじめPHPに用意されている命令で、その関数名を書くと処理の結果が返ってきます。必要なら、値を渡すこともできます。

日時を表示

date(フォーマット)

カッコの中に特定の文字を指定すると、日時が返ってきます。

echo date('d');  //日(「01」など)
echo date('m');  //月(「06」など)
echo date('H');  //時間(「18」など)
echo date('m/d');  //月日(「06/01」)
echo date('Y/m/d H:i:s');  //日時(「2012/06/01 18:30:02」など)

メールを送信

mb_send_mail("送信先", "件名", "本文", "From: 送信元");

メールを送信できます。送信できたか否かの結果が返ってきます。

mb_send_mail(
  "example@example.com",
  "テストメール",
  "これはPHPからのテストメールです。",
  "From: from@example.com"
);

自分のパソコンにインストールしたXAMPPからは送信できないことがあります。

ファイルの読み書き

file_get_contents("読み込むファイル名");

ファイル名を指定すると、ファイルの内容が返ってきます。

file_put_contents("書き込むファイル名", "書き込む内容");

ファイル名と書き込む内容を指定すると、ファイルに書き込む。書き込めたか否かの結果が返ってきます。

ファイルの読み書き

アクセスカウンタ

<html>
<head>
<title>サンプル</title>
</head>
<body>
<p><?php

$count = file_get_contents("count.txt") + 1;

file_put_contents("count.txt", $count);

echo $count;

?></p>
</body>
</html>

命令の使い方を調べる方法

スクリーンショット

大抵のことは、PHPにあらかじめ用意された命令で実現できます。命令の数が非常に多いので、すべてを覚えるのは不可能です。必要に応じて調べましょう。

データベース

データベースとは

スクリーンショット

MySQLとは

「マイエスキューエル」と読みます。

スクリーンショット

SQLとは

「エスキューエル」もしくは「シークェル」と読みます。

1,000円以上の商品の名前を、最大10件取得する。

SELECT name FROM catalogs WHERE price >= 1000 LIMIT 10;

MySQLの基本的な用語

スクリーンショット

MySQLの基本的な用語

データベース
エクセルではファイルにあたる。複数作成ができる
テーブル(表)
エクセルではシートにあたる。データベースの中に複数のテーブルを作成できる
レコード(行・ロウ)
エクセルでは行にあたる。一件一件のデータ
フィールド(列・項目・カラム)
エクセルでは縦の列にあたる

データベース管理ツール

XAMPPにはphpMyAdminという管理ツールが付属します。

スクリーンショット

データベース管理ツール

スクリーンショット スクリーンショット スクリーンショット スクリーンショット スクリーンショット スクリーンショット スクリーンショット スクリーンショット

PHPとの連携方法の概要

PHPにはMySQLを操作するための命令が用意されています。

PHPとの連携方法の概要

//データベースに接続
$con = mysql_connect('localhost', 'taro', 'Xjh93k');

//データベース選択
$result = mysql_select_db('phpdb', $con);

//命令を実行
$result = mysql_query('SELECT name FROM address LIMIT 10;', $con);

//結果を受け取る
$data = mysql_fetch_array($result);

//結果を表示
echo $data['name'];

//接続を切断
$con = mysql_close($con);

エラーやトラブル

エラーメッセージについて

プログラムにエラーがあった際、その内容を表示できます。

C:\xampp\php\php.ini の533行目(Macの場合は /Applications/XAMPP/xamppfiles/etc/php.ini の277行目)

display_errors = On

C:\xampp\php\php.ini の516行目(Macの場合は /Applications/XAMPP/xamppfiles/etc/php.ini の270行目)

error_reporting = E_ALL | E_STRICT
error_reporting = E_ALL
error_reporting = E_ALL & ~E_NOTICE

エラーメッセージについて

E_ALL | E_STRICT
すべてのエラーを表示。PHP5で推奨されない書き方も警告
E_ALL
すべてのエラーを表示。
E_ALL & ~E_NOTICE
すべてのエラーを表示。致命的でないものは無視

※PHP5.3の場合
※本番環境では、エラーメッセージを表示しない方がいい

よく見かけるエラーメッセージとデバッグのポイント

<?php

echo 'こんにちは。';
rcho 'PHPの世界にようこそ!';

?>
Parse error: syntax error,
unexpected T_CONSTANT_ENCAPSED_STRING
in C:\xampp\htdocs\test\sample.php on line 4

echo のスペルミス。

よく見かけるエラーメッセージとデバッグのポイント

<?php

echo 'こんにちは。'
echo 'PHPの世界にようこそ!';

?>
Parse error: syntax error,
unexpected T_ECHO, expecting ',' or ';'
in C:\xampp\htdocs\test\sample.php on line 4

; の付け忘れ。

よく見かけるエラーメッセージとデバッグのポイント

<?php

echo 'こんにちは。;
echo 'PHPの世界にようこそ!';

?>
Parse error: syntax error,
unexpected T_STRING, expecting ',' or ';'
in C:\xampp\htdocs\test\sample.php on line 4

' の閉じ忘れ。

よく見かけるエラーメッセージとデバッグのポイント

<?php

if (date("d") > 25) {
  echo "毎月26日以降はお客様感謝デーです!";

echo "ご利用ありがとうございます!";

?>
Parse error: syntax error,
unexpected $end
in C:\xampp\htdocs\test\sample.php on line 9

} の閉じ忘れ。

プログラムを色分けしてくれるエディタを使う

スクリーンショット

インデントやスペースを使ってプログラムを読みやすく

<?php
while($data=mysql_fetch_array($result)){
if($data['age']==30){
$flag=true;
}
}
?>
<?php
while ($data = mysql_fetch_array($result)) {
  if ($data['age'] == 30) {
    $flag = true;
  }
}
?>

インデントやスペースを使ってプログラムを読みやすく

<div id="index">
<h2>目次</h2>
<ul>
<li>はじめにお読みください</li>
<li>活用方法</li>
<li>FAQ</li>
</ul>
<div id="news">
<h2>ニュース</h2>
<ul>
<li>FAQを公開しました</li>
<li>公式サイトオープン</li>
</ul>
</div>

インデントやスペースを使ってプログラムを読みやすく

<div id="index">
  <h2>目次</h2>
  <ul>
    <li>はじめにお読みください</li>
    <li>活用方法</li>
    <li>FAQ</li>
  </ul>
<div id="news">
  <h2>ニュース</h2>
  <ul>
    <li>FAQを公開しました</li>
    <li>公式サイトオープン</li>
  </ul>
</div>

セキュリティ対策

<span style="font-size:9999px;">いたずら</span>
<script>document.location='http://www.google.co.jp/'</script>

この手法は「Script Insertion」と呼ばれます。

基本は「入力内容のチェックを行う」です。

echo $message;
echo htmlspecialchars($message);

終わりに

参考書籍の紹介

参考サイトの紹介

質疑応答

おつかれさまでした!

時間があれば…

Cookie

訪問者のコンピュータに一時的にデータを書き込んで保存する仕組みです。

スクリーンショット スクリーンショット スクリーンショット スクリーンショット スクリーンショット スクリーンショット スクリーンショット

Cookie

<?php

//Cookieに書き込み
setcookie("xxx", "任意の値");

?>
<?php

//Cookieの内容を表示
echo $_COOKIE["xxx"];

?>

セッション

Cookieに似た機能です。ただしデータはサーバー側に保存され、訪問者を区別するためのIDのみCookieに保存されます。(IDは、実際は 70k10tkl7p1k2t39anju9hit55 のような値。)

スクリーンショット スクリーンショット スクリーンショット スクリーンショット スクリーンショット スクリーンショット スクリーンショット スクリーンショット スクリーンショット スクリーンショット

セッション

<?php
//セッションの利用を開始
session_start();
?>
<?php
//セッションに書き込み
$_SESSION["xxx"] = "任意の値";
?>
<?php
//セッションの内容を表示
echo $_SESSION["xxx"];
?>

セッション

フォームからの入力

スクリーンショット スクリーンショット

フォームからの入力

<html>
<head>
<title>サンプル</title>
</head>
<body>
<form action="view.php" method="post">
  名前:<br />
  <input type="text" name="name" size="30" value="" /><br />
  メールアドレス:<br />
  <input type="text" name="mail" size="30" value="" /><br />
  コメント:<br />
  <textarea name="comment" cols="30" rows="5"></textarea><br />
  <br />
  <input type="submit" value="登録する" />
</form>
</body>
</html>

フォームからの入力

<form action="view.php" method="post">
<input type="text" name="name" size="30" value="" />
$_POST["name"]
<textarea name="comment" cols="30" rows="5"></textarea>
$_POST["comment"]

フォームからの入力

<html>
<head>
<title>サンプル</title>
</head>
<body>
<dl>
  <dt>名前</dt>
    <dd><?php echo $_POST["name"] ?></dd>
  <dt>メールアドレス</dt>
    <dd><?php echo $_POST["mail"] ?></dd>
  <dt>コメント</dt>
    <dd><?php echo $_POST["comment"] ?></dd>
</dl>
</body>
</html>

WebAPI

WebAPI

<?php

$xml = simplexml_load_file(
  'http://api.twitter.com/1/users/show/masason.xml'
);

echo $xml->name;
echo $xml->screen_name;

?>

テンプレートエンジン

フレームワーク

おつかれさまでした!