作成日:2021/04/12 更新日:2022/08/03

#8 PHPを便利にするいろんな記号

変数をつなげる

文字列や変数をつなぐためには.ドットを使います。

<?php
$name    = '大橋太郎';
$measage = 'こんにちは!';

echo $name . $measage;		/* 大橋太郎こんにちは */
echo $name . 'さん' . $measage;	/* 大橋太郎さんこんにちは */

$aisatsu  = 'おはようございます、';
$aisatsu .= '寒いですね'. $name . '。';
echo $aisatsu;			/* おはようございます、寒いですね大橋太郎。 */
?>
$aisatsu.='寒いですね' は$aisatsu = $aisatsu . '寒いですね'を略したものです。

足し算、引き算、掛け算、割り算

簡単な四則演算(+ - × ÷)をさせるための記号です。

<?php
$a = 2;
$b = 5;

echo ($a + 3);	/* 2+3 = 5 */
echo -$b;		/* -5 */
echo ($b - 3);	/* 5-3 = 2 */
echo ($a * $b);	/* 2*5 = 10 */
echo ($a / $b);	/* 2/5 = 0.4 */
echo ($a % $b);	/* 2%5 = 2 */
echo ($a ** $b);	/* 2**5 = 32 */
?>
名前結果
$a + $b足し算(加算)$a および $b の合計
-$a負(正)にするプラスをマイナスに、マイナスをプラスに変更
$a - $b引き算(減算)$a および $b の積
$a * $b掛け算(乗算)$a および $b の積
$a / $b割り算(除算)$a および $b の商
$a % $b剰余$a を $b で割った余り
$a ** $b累乗$a の $b 乗。(PHP 5.6 から導入)

変数に代入する

文字や数字を代入するための記号です。

<?php
$a = 3;
echo $a;  /* 3 */

$b = 5;
$c = 8;
$b += $c; /* $b+$cの値を、$bに代入 */
echo $b;  /* 13 */
?>
$a = 3 とは $a は 3 と等しい…ではなく、$a という箱の中に数字の 3 を代入するということです。

1づつ足す(引く)


<?php
$i = 5;
echo ++$i;	/* 6 */

$i = 10;
echo $i++;	/* 10 */
echo $i;	/* 11 */

$i = 20;
echo --$i;	/* 19 */

$i = 50;
echo $i--;	/* 50 */
echo $i;	/* 49 */
?>
変数の中身が数値の場合は$i++$i = $i + 1と動作は同じです。
++: インクリメントと呼びます。
--: デクリメントと呼びます。
結果
++$i$i に 1 を加え、$i を返します
$i++$i を返し、$i に1を加えます
--$i$i から 1 を引き、$i を返します。
$i--$i を返し、$i から 1 を引きます。

条件を`2つ`にする


<?php
$math    = 48; /* 数学 */
$english = 87; /* 英語 */

if ($math > 50 || $english > 60){   /* 条件: 数学は50点以上、英語は60点以上、どちらかが真なら。という式 */
  echo "合格です";	/* 条件のどちらかがtrueならこの文が実行 */
}else{
  echo "不合格です";	/* 条件のどちらもfalseならこの文が実行 */
}
?>
上記の例では、$mathは数字が下回っているのでfalseになりますが、$englishはtrueになるので、最初の文が実行され、`合格です`が出力echoされます。
結果
$a and $b$a および $b が共に TRUE なら TRUE
$a && $b$a および $b が共に TRUE なら TRUE
$a or $b$a または $b のどちらかが TRUE なら TRUE
$a || $b$a または $b のどちらかが TRUE なら TRUE
$a xor $b$a または $b のどちらかが TRUE でかつ両方とも TRUE でない場合に TRUE
!$a$a が TRUE でない場合 TRUE

データの型を比較する


<?php
$a = '1'; /* string型(文字列) */
$b = 1;   /* integer型(整数)*/

if($a == $b){
  echo '真';  /* どちらも`1`となりこの文が実行される */
}else{
  echo '偽';
}

if($a === $b){
  echo '真';
}else{
  echo '偽';  /* 型が違うので、この文が実行される */
}
?>
左辺の値を、右辺の値と比較してどうなるかをtrueとfalseで返します。 例では同じ「1」ですが$aは文字としての「1」、$bは数字としての「1」になります。
=右辺の値を左辺に代入
==等しい(データ型を無視)等しいとtrue
===等しい(データ型も含む)等しいとtrue
!=等しくない等しくないとtrue(<>も同じ)
!==等しくない(データ型も含む)等しくないとtrue
$a < $b$aが$bより小さい小さいtrue
$a <= $b$aが$bより小さいか等しい小さいか等しいとtrue

データの型を知ろう

データ型とはデータの性質(種類)のことです。
文字型'Hello!' '1'stringsストリング。文字として認識される文字列のこと
整数型1, 100integerインテジャー。足し算引き算できる数字
不動小数点数型1.4142, -0.08, 120.5floatフロート。どこかに小数点が入るような数字
論理型TRUE FALSEbooleanブーリアン。正しいか、誤っているか
配列型array('りんご', 'apple')arrayアレイ
オブジェクト型$obj = new someclass();objectオブジェクト
ヌル型NULLnullヌル。無とか空。ゼロではない
文字型や配列型、オブジェクト型がよく出て来ますね。

if文を簡単に。三項演算子


<?php
$lang = 'English';
$message = $lang === 'Japanese' ? 'こんにちは' : 'Hello';

echo $message;  /* Helloが出力されます */
?>
条件式 ? 真の式 : 偽の式
$lang == 'Japanese' であれば、'こんにちは' そうでないなら 'Hello' を表示させるという式です。
その結果を変数$messageに代入してね。という式です。
if文のような機能ですが、あくまで式(値)を呼び出すだけです。ifのように条件式はかけませんが、シンプルに式を書けます。

実際にこれらの記号は演算子と呼ばれ、にはそれぞれ名称がついていますが、機能を先に身につけて名称はおいおい覚えておきましょう。
PHPマニュアル

+、-、*、/、%代数演算子だいすう えんざんし簡単な四則演算(+ - × ÷)をさせるための記号です。
+代入演算子だいにゅう えんざんし文字や数字を代入するための記号です。
.ドット結合演算子けつごうえんざんし左と右のものを足す
.=結合代入演算子けつごうだいにゅうえんざんし$a .= $bの結果は$a = $a . $b 文字列の結合
+=、-=、*=算術代入演算子さんじゅつだいにゅう えんざんし$a += $bの結果は$a = $a + $b
and、||、&&理論演算子りろん えんざんし条件の複数指定
++、--加算子/減算子かさんし/げんざんし1つづつ足す(引く)

#9 データベース(DB)を作る

データベースとはわかりやすく言えばエクセルのおばけ 👻 です。エクセルでも簡単な計算はできますが、 データベースはリレーショナル データベース マネジメント システムRDBMS 複数のテーブルデータを連携させたデータベース管理の考え方 という考え方で、 SQLという言語を使ってデータをかなり複雑に計算できようになります。
データベースで使われる用語としては「テーブル」「カラム」「レコード」があります。
データベーステーブルを入れるための一つのくくり
テーブルエクセルで言うところのシートです。複数のテーブル同士を組み合わせて欲しいデータを抽出します。
カラムデータを入れるための枠で、一般的には(縦軸)と表現されます。エクセルでいう`セル`のようなものです。
レコードデータそのものです。1カラムに対して複数のレコード(横軸)が入ります。

例)
No.氏名年齢
1新垣結衣23←レコード
2齋藤飛鳥20←レコード
3佐々木希30←レコード
↑カラム↑カラム↑カラム

phpMyAdminでMySQLを設定する準備

MAMP画面のOpen WebStart pageをクリックすると、ブラウザでページが開きます。
TOOLS > PHPMYADMIN をクリックします。
もしくは「http://localhost:8888/phpMyAdmin/」をクリック
このようにphpMyAdminのトップ画面が表示されます。ここでデータベースやテーブルを作っていきます。

①データベースの作成

スクリーンショット動画は違いますが、今回はデータベース名を「cri_sortable」にしましょう。

②テーブルの作成

idnameleft_xtop_y
1新垣結衣81056
2北川景子631302
3佐々木希788326
こんな感じのテーブルデータを作ります。まず最初に1つのテーブルと対応する4つのカラムを作ります。

▼テーブル、カラムの登録方法

top_yとleft_xはNULLにチェックを入れてね!(ここにチェック入れておくと、データが入らなかったら「データ無し」を登録できます)
データベース名「cri_sortable」にテーブル名を「sortable」を作り、それぞれのカラムに「データ型、属性、NULL、AI」などを設定していきます。
名前データ型属性NULLAI
idINTUNSIGNEDAUTO_INCREMENT
nameTEXT
left_xINTUNSIGNED
top_yINTUNSIGNED

データ型や属性はたくさん種類があるので、よく使うものを抜粋しています。
表示する/非表示にする

データ型

数値型値の範囲UNSIGNED付与(整数のみ)
TINYINT-128 から 1270 から 255
SMALLINT-32,768 から 32,7670 から 65,535
MEDIUMINT-8,388,608 から 8,388,6070 から 16,777,215
INT-2,147,483,648 から 2,147,483,6470 から 4,294,967,295

小数点を使う場合は「FLOAT、DOUBLE、DECIMAL」を使います。
文字型値の範囲(文字)使い所
CHAR(M)255固定長文字列(M文字以下の文字が入る場合は空白で補う)
VARCHAR(M)65,535可変長文字列(M文字以下の文字が入る場合でも空白で補わない)
TEXT65,535可変長文字列(大きな文字列を入れたい場合)
TINYTEXT255TEXTの短い版

属性

UNSIGNED整数(アン サインド)マイナスの数値は入れないよ
BINARYバイナリー検索時に大文字小文字を区別

NULL

NULL値はデータが存在しないことを表す値。空白" "や0とは違います。NOT NULLでNULLが入れられなくなります。

PRIMARY KEY

主キー。主キー制約が設定されたカラムの値は、ほかのカラムとの重複不可、かつNULLも不可。データにダブりがあるとだめな項目に。

AI

AUTO_INCREMENT(オート インクリメント)。自動で連番の値が格納されます。
またはSQL文で発行することも出来ます。phpMyAdminのSQLタブに入力することで実行できます。

CREATE TABLE `cri_sortable`.`sortable` (
  `id` INT UNSIGNED NOT NULL AUTO_INCREMENT ,
  `name` TEXT NOT NULL ,
  `left_x` INT UNSIGNED NULL ,
  `top_y` INT UNSIGNED NULL ,
  PRIMARY KEY ( `id` )
) ENGINE = InnoDB

③レコードの登録

データベース「cri_sortable」に「sortable」というテーブルを作ったので。sortableテーブルにレコード(データ)を登録してみましょう。
まず、挿入 > ID1に、新垣結衣という名前を入れて、(x,y)座標をそれぞれ(810, 56)にします。

▼レコードの登録方法
こんな感じでデータを挿入していくと面倒なので、csv形式のデータをインポートしてみましょう。 CSVとはレコードデータのフィールドをカンマ「,」区切りで1行ずつ記述されている書類です。 エクセルで作ることもできますし、テキストエディタでデータをカンマ区切りすることでも作れます。
※文字コードUTF-8の書類をエクセルで開くと文字化けします。エクセルで開きたいときはテキストエディタで文字コードをSHIFT-JISに変更します。

CSVダウンロード
▼CSVのインポート方法
CSVの中身(レコード)が一気に登録されました。

フォーマット特有のオプション:「Update data....」は、「インポート時に重複したキーが見つかった場合にデータを更新する」という意味です。 1番の新垣結衣さんが先に入っていて重複してしまいますから、強制上書きするオプションです。

ここまでで、データベースを作り、テーブルと各カラム(データ)を挿入できました。 データベースに登録したデータを、ブラウザ(html+php)で表示させていきましょう。