PHP 関数($_SESSION etc)

<font color ="ff####">▪️strlen() 文字列の長さを得る</font>

```php
<?php
$str = 'abcdef';
echo strlen($str); // 6

$str = ' ab cd ';
echo strlen($str); // 7
?>
```

[strlen関数(参考ページ)](http://php.net/manual/ja/function.strlen.php)

##**$_SESSION**
###**$_SESSION**
<font color ="ff####">▪️$_SESSION[セッション変数名] = 値</font>
[  ]の中に保存したいセッションの名前（ここではusername）を書き、代入演算子 = で代入したいもの（tanaka）を書きます。

```php
<?php
session_start();
$_SESSION[‘username’] = ”yamada”;
?>
```

セッションとは、コンピュータのサーバー側に一時的にデータを保存する仕組みのこと

![セッション.png](https://qiita-image-store.s3.amazonaws.com/0/95187/6098794d-5c1b-fc7e-527e-ab16e7faa80e.png)


###**$_SESSION 使い方**
セッションの使い方ですが、シンプルに <font color = "ff####">session_start関数</font> を使って開始し、この下でセッションを保存していくことができます。

###**$_SESSION 中身の取り出し方**
取り出し方は、echo でこの SESSION[‘username’] を取り出してあげれば、中身を取り出すことができます。

[定義済み変数$_SESSION(参考ページ)](http://techacademy.jp/magazine/4970)

```php
session_start();
$_SESSION[‘username’] = ”tanaka”;
echo $_SESSION[‘username’] ;
?>
```
![スクリーンショット 2016-07-29 17.08.50.png](https://qiita-image-store.s3.amazonaws.com/0/95187/5c7cdcfa-3644-2bce-96f2-9a37451e3253.png)

###**PHPSESSID**

|　　　　　||
|:--|:--|
|**PHPSESSID**|セッションが利用するクッキーの値|
|**セッションID表示**|$_COOKIE["PHPSESSID"]|

```php:例
<?php
    session_start();
?>
<?php
// クライアント側にセッションIDがクッキーとして書き込まれるのかどうかを確認
    if (!isset($_COOKIE["PHPSESSID"])){
        print('初回の訪問です。セッションを開始します。');
    }else{
        print('セッションは開始しています。<br>');
        print('セッションIDは '.$_COOKIE["PHPSESSID"].' です。');
    }
?>
```

```php:実行結果
セッションは開始しています。
セッションIDは knv7dmv9l353lhjfeccclcoop7 です。 
```

###**session_regenerate_id**

```php:test39-input.php
<?php
session_start();
?>
<form action="test39-output.php" method="post">
<p>
<input type="text" name="name">
</p>
<input type="submit" value="送信" name="submit">
<!-- <input type="submit" value="SESSION削除" name="sessionDelete"> -->
</form>
```

```php:test39-output.php
<?php
session_start();
if(isset($_POST['submit'])){
$_SESSION['name'] = $_POST['name'];
$name = $_SESSION['name'];
}
?>
<?php
if(isset($_SESSION['name'])){
echo $_SESSION['name'];
echo $_COOKIE['PHPSESSID'];
}
if(isset($_POST['sessionDelete'])){
session_regenerate_id();
}

?>
<form action="" method="post">
<input type="submit" value="SESSION再生成" name="sessionDelete">
</form>
```

![20170418.png](https://qiita-image-store.s3.amazonaws.com/0/95187/753c4763-974c-e62f-5ae1-a9dac715c765.png)


##**$_COOKIE**
###**$_COOKIEの中身**

```php:例
<?php var_dump($_COOKIE);?>
```

```php:実行結果
array (size=1)
  'PHPSESSID' => string '30fmvbq1bdltdjnegbtvk0j7e2' (length=26)
```

###**$_COOKIE削除**

```php:クッキー名のみ指定
setcookie('クッキー名');
```

```php:クッキー名入れてクッキー値に空の文字を指定
setcookie('userid','');
```

###**setcookie**
<font color="red">setcookie(クッキーの名前,保存する値,有効期限,パスの指定);</font>

|　　　　　||
|:--|:--|
|**保存する値**|文字列or数字。配列や複雑なデータは指定できない|

##if文
[if(参考ページ)](http://wp3.jp/2010/11/12/if-else/)

##class属性(html)
[class属性(参考ページ1)](http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1045201905)
[class属性(参考ページ2)](http://www.tagindex.com/html_tag/attribute/class.html)

##class PHP
[class PHP(参考ページ)](http://www.tohoho-web.com/php/class.html)

#**関数**
##**rand()**
|　　　　　||
|:--|:--|
|**rand()**|0～32767の乱数を返す|
|**getrandmax()**|乱数の最大値を返す|

```php:1～5までの乱数を出す
echo rand(1,5);
```

###**rand()で画像をランダムに表示**

```php:
echo '<img src="hanep',rand(1,3),'.gif">';
```

画像ファイルは
hanep1.gif
hanep2.gif
hanep3.gif
です。
![hanep1.gif](https://qiita-image-store.s3.amazonaws.com/0/95187/3d9ccc00-0e96-9a45-b648-cd226b26292d.gif)→![hanep2.gif](https://qiita-image-store.s3.amazonaws.com/0/95187/59779db6-69e4-133d-1bd6-dd4518739430.gif)→![hanep3.gif](https://qiita-image-store.s3.amazonaws.com/0/95187/0ba24229-c0c2-ad66-bc2c-0578822e06b1.gif)
ランダムに画像が変わります。

■偶数だけ生成
rand(1,5)*2

■(1以上9以下の)奇数だけを生成
rand(1,5)*2-1
rand(0,4)*2+1

##**htmlspecialchars()**
htmlspecialcharsはtext/plainをtext/htmlに変換する。
htmlspecialchars関数にかけてから表示をしないと、
入力された文字によっては画面が壊れてしまったりするので、
決まり文句として覚えとく。
[htmlspecialchars()(参考ページ)](http://qiita.com/mpyw/items/19e6fed835ccdbcb0d6d)

##▪️text/plain
plain text(平文)。一般的な文字列形式。

##▪️ハッシュ化
ハッシュ化とは、元のデータから一定の計算手順に従ってハッシュ値と呼ばれる規則性のない固定長の値を求め、その値によって元のデータを置き換えること。
hashは英語で寄せ集めにする、ごた混ぜにする、めちゃくちゃにするという意味。

##**ceil関数**
**ceil(数値)** 端数の切り上げ

▪️例

```php
<?php
echo ceil ( 225.8 );
?>
```

▪️例 実行結果
226

##intval関数
intval() 引数に指定した値を整数値(integer)に変換する関数

▪️例　

```php
<pre>
<?php
$str = "11";
$str2 = 2;
$str3 = "テスト";
echo intval ( $str );
print ("\n") ;
echo intval ( $str2 );
echo ("\n");
echo intval ( $str3 );
echo ("\n");
echo intval ( 154.7 );
echo ("\n");
?>
</pre>
```

▪️例 実行結果
11
2
0
154

#**mb_convert_kana関数**
- [x] POINT、_________________________________              
**mb_convert_kana**              
・mb_convert_kana(文字列,変換オプション,文字エンコーディング)       
_________________________________________________________

<font color='red'>カタカナを半角から全角へ変換する</font>

```php:kadai_27_zenhan-kana-input.php
<?php require 'header.php';?>
<p>お名前のフリガナを入力してください。</p>
<p>フリガナを半角から全角に変換する。</p>
<form action="kadai_27_zenhan-kana-output.php" method="post">
<input type="text" name="furigana">
<input type="submit" value="確定">
</form>
<?php require 'footer.php';?>
```

```php:kadai_27_zenhan-kana-output.php
<?php require 'header.php';?>
<?php
//フリガナを半角から全角に変換する
echo 'フリガナは「', mb_convert_kana($_REQUEST['furigana'],'K','UTF-8'), '」です。';
?>
<?php require 'footer.php';?>
```

■実行結果
![20161227.png](https://qiita-image-store.s3.amazonaws.com/0/95187/79785603-2a8b-d401-3a1e-944bec68ecf5.png)
確定ボタン押下↓
![201612271.png](https://qiita-image-store.s3.amazonaws.com/0/95187/3610d71a-1b97-3800-ee43-ee7177881a37.png)

<font color='red'>数値を全角から半角へ変換する</font>

```php:kadai_27_zenhan-number-input.php
<?php require 'header.php';?>
<!-- 数値を全角から半角へ変換する -->
<p>購入個数を入力してください。</p>
<p>数値を全角から半角へ変換する。</p>
<form action="kadai_27_zenhan-number-output.php" method="post">
<input type="text" name="count">
<input type="submit" value="確定">
</form>
<?php require 'footer.php';?>
```

```php:kadai_27_zenhan-number-output.php
<?php require 'header.php';?>
<?php
//n→全角数字を半角に変換
//数値を全角から半角へ変換する
$count = mb_convert_kana ( $_REQUEST ['count'], 'n','UTF-8');
if (preg_match ( '/[0-9]+/', $count )) {
	echo $count, '個を購入します。';
} else {
	echo $count, 'は数値ではありません。';
}
?>
<?php require 'footer.php';?>
```

■実行結果
![201612273.png](https://qiita-image-store.s3.amazonaws.com/0/95187/48625c68-2319-b5dc-1196-bfefe3e9c15e.png)
確定ボタン押下↓
![201612274.png](https://qiita-image-store.s3.amazonaws.com/0/95187/cafdc48a-c838-856e-22dd-e9ccd9a8b3ab.png)

#**if文**
##**{}がない**

if分は括弧が無い場合、次の1文の命令のみが対象になる。
{}内の処理が複数の文の場合には{}を省略することができない。

```php:test27-edit3.php
if(isset($_REQUEST['command'])) {
	switch ($_REQUEST['command']){
	case 'insert':
		//if文は、括弧がない場合、次の1文の命令のみが対象になる
		//実行文が1行のときは{}を省略できる
		if(empty($_REQUEST['name']) || !preg_match('/[0-9]+/', $_REQUEST['price']))
			break;
		//それ以外だったら
		$sql = $pdo->prepare('insert into product values(null,?,?)' );
		$sql = execute(array(htmlspecialchars($_REQUEST['name']),$_REQUEST['price']));
			break;
	}
}
```

```php:これと同じ意味
       case 'insert' :
            if (empty ( $_REQUEST ['name'] ) || ! preg_match ( '/[0-9]+/', $_REQUEST ['price'] )) {
                break;
            }
            $sql = $pdo->prepare ( 'insert into product values(null,?,?)' );
            $sql->execute ( array (
                    htmlspecialchars ( $_REQUEST ['name'] ),
                    $_REQUEST ['price']
            ) );
```

[参考サイト](http://alphasis.info/2012/05/php-control-if-elseif-else/)

```php:test26.php
<?php
$s = 'あ';
$s1 = 'い';
switch ($s) {
	case 'あ' :
		if ($s1 == 'い')
			echo 'Hello';
		break;
		// breakした時点でswitch構造を抜けるから、通らない
		echo 'World';
		break;
}
?>
```

```php:Worldと表示される
<?php
$s = 'a';
$s1 = 'c';
switch ($s) {
	case 'a' :
		if ($s1 == 'b')
		break;
		// breakした時点でswitch構造を抜けるから、通らない
		echo 'World';
		break;
}
?>
```

```php:Worldと表示されない
<?php
$s = 'a';
$s1 = 'c';
switch ($s) {
	case 'a' :
		if ($s1 == 'b')
			echo 'Hello';
		break;
		// breakした時点でswitch構造を抜けるから、通らない
		echo 'World';
		break;
}
?>
```