PHPに入門してみたメモ

#はじめに

PHPに入門したのでポイントを箇条書き的にメモしました。

* [HTMLとPHP](#HTMLとPHP)
  * [fontタグ](#fontタグ)
  * [imageタグ](#imageタグ)
  * [ハイパーリンク](#ハイパーリンク)
  * [PHPタグ](#PHPタグ)
  * [formタグ](#formタグ)
  * [ページ間データ受け取り](#ページ間データ受け取り)
  * [入力データを消さないでページを戻る](#入力データを消さないでページを戻る)
  * [シングルクォーテーションとダブルクォーテーション](#シングルクォーテーションとダブルクォーテーション)
  * [画面に表示しないでデータを渡す](#画面に表示しないでデータを渡す)
  * [サニタイジング](#サニタイジングhtmlspecialchars)
  * [メール送信](#メール送信)
  * [任意の画面に飛ばす（UIを使わない）](#任意の画面に飛ばす（UIを使わない）)
  * [画像を選択できるようにする](#画像を選択できるようにする)
  * [画像を任意のフォルダにアップロード](#画像を任意のフォルダにアップロード)
  * [画像ファイル削除](#画像ファイル削除)
  * [セッション](#セッション)
  * [ログアウト](#ログアウト)
  * [ブラウザに表示する関数](#ブラウザに表示する関数)
  * [関数を使うとき](#関数を使う時)
  * [配列の要素を削除](#配列の要素を削除)
  * [逆順ループ](#逆順ループ)
* [SQL](#SQL)
  * [文字化け対策](#文字化け対策)
  * [データの登録](#データの登録)
  * [SQLにアクセス](#SQLにアクセス)
  * [全データ取得](#全データ取得)

* [解決してないこと](#解決してないこと)
  * [半角数字チェックの正規表現](#半角数字チェックの正規表現)

#HTMLとPHP
###fontタグ

```.html
<font color="#00ff00" size="5">おはよう</font>
```
緑の文字が表示されます。

###imageタグ
```.html
<img src="sample.jpg">
```
`sample.jpg`ファイルの画像が表示されます。

###ハイパーリンク
```.html
<a href="hogehoge.html"><img src="sample.jpg"></a>
```
`sample.jpg`の画像をクリックすると`hogehoge.html`に飛びます。

###PHPタグ
```.php
<?php
  print `おはよう`;
?>
```
`<?php...?>`の中にphpの文を書く。`print`で出力。

###formタグ
```.html
<body>
  <form>
      <input name="nickname" type="text" style="width:100px">
      <input type="submit" value="送信">
  </form>
</body>
```
`input`で入力ボックスを表示。送信ボタンも表示できる。

```.html
<body>
  <form method="post" action="onion.php">
      <input name="nickname" type="text" style="width:100px">
      <input type="submit" value="送信">
  </form>
</body>
```
`action`でボタンを押した時の飛び先を設定。method="post"は__URLパラメータ__とかいうらしい。

```.html
<input type="radio" name="code" value="2"> //ラジオボタン出せたり
<input type="checkbox" name="sakujo"> //チェックボックス出せたり。
```


###ページ間データ受け取り

```.php
<?php
  print `おはよう`;
  print $_POST['nickname'];
?>
```
`$_POST['inputのname']`で前のページの指定した名前の値を表示する。

###入力データを消さないでページを戻る
```.html
<form>
  <input type="button" onclick="history.back()" value="戻る">
</form>
```
`onclick=history.back()`はJavaScript。機能を持ったボタンを表示。

###シングルクォーテーションとダブルクォーテーション
```.php
$hoge = 'geho'
print 'これは $hoge です';  //出力：これは $hoge です
print "これは $hoge です";  //出力：これは geho です
print 'これは'.$hoge.'です'

```
ダブルクォーテーションを使うと変数の中身が表示される（半角で区切らないといけない）。
シングルクォーテーションは`$hoge`がそのまま表示される。
シングルクォーテーションで`.（ドット）`で区切ると文字列を連結して変数の中身を表示できる。

###画面に表示しないでデータを渡す
```.html
<input name="nickname" type="hidden" value="'.$nickname.'">
```
valueの中身は変数`$nickname`の中身を指定するのでドットで区切って中身出してる。
`value=" $nickname "`でも大丈夫なはず。

###サニタイジングhtmlspecialchars
```.html
$nickname = htmlspacialchars($nickname);
```
`$nickname`の中身をただの文字列にするイメージ。

###メール送信
```.php
<?php

$mail_sub= 'メールタイトル';
$mail_body= $nickname."様へ¥n本文です。";
$mail_body=html_entity_decode($mail_body, ENT_QUOTES, "UFT-8");
$mail_head='From: xxx@xxx.co.jp';
mb_language('Japanese');
mb_internal_encoding("UTF-8");
mb_send_mail($email, $mail_sub, $mail_body, $mail_head);

?>
```

###任意の画面に飛ばす（UIを使わない）
```
header('Location: ファイル名?渡したい値=hoge');
```
`?`以降が__URLパラメータ__と言います。URLパラメータはブラウザの検索欄に表示されます。
これを遷移先で受け取るには次のように書きます。
```
$nantoka=$_GET['渡したい値'];
```
GETを使って取得できます。


###画像を選択できるようにする
```.html
<form method="post" action="ファイル名" enctype="multipart/form-data">
<input type="file" name="gazou" style="width:100px>
```
`enctype="multipart/form-data"`と`<input type="file"`を追加することで画像選択のUIが表示されます。

そして遷移先画面では、次のように受け取ります。
```
$gazou=$_FILE['gazou'];
```
`$_FILE`の中は、`size`、`tmp_name`、`name`とか情報を持ってます。

###画像を任意のフォルダにアップロード
```
move_uploaded_file($gazou['tmp_name'],'./フォルダ名/'.gazou['name']
```
これを書くと`フォルダ名`のフォルダに`'name'`で画像が保存されます。
相対パスは`.`でプログラムと同じフォルダ、`..`で一個上のフォルダを表す。

###画像ファイル削除
```
unlink('./フォルダ名/'.ファイル名);
```

###セッション
```
session_start();
session_regenerate_id(true);
```

###ログアウト
```
session_start();
$_SESSION=array();
if(isset($_COOKIE[session_name()])==true){
	setcookie(session_name(), '', time()-42000, '/');
}
session_destroy();
```

セッション変数をからにして、IDをクッキーから削除して、セッションを破棄してます。

###ブラウザに表示する関数

```.php
print_r();
var_dump();
```

###関数を使うとき

先頭に`include`するか、中に`require_once(ファイルパス)`する。

###配列の要素を削除

```.php
array_splice($hairetu,添字,個数);
```

###逆順ループ

```.php
for($i = 99;0 <= $i;$i--){
```

#SQL
###文字化け対策
my.cnfに以下の文を書く。

```.html
[client]
character-set-server = utf8

[mysqld]
character-set-server = utf8
skip-character-set-client-handshake

[mysql]
character-set-server = utf8
```
詳しいことは今度調べる。

###データの登録
```
INSERT INTO データベース名 ("field1", "field2", "field3") VALUES ("ho", "ge" ,"hoge")
```
って書くとそれぞれのcolumにVALUES以下のデータが登録される。

###SQLにアクセス
```.php
<?php
$dsn = 'mysql:dbname=phpkiso;host=localhost';
$user = 'root';
$password = '';
$dbh = new PDO($dsn, $user, $password);
$dbh -> query('SET NAMES utf8');

$sql = 'INSERT INTO anketo (field1, field2, field3) VALUES ("'.$field1.'","'.$field2.'","'.$field3.'")';
$stmt = $dbh -> prepare($sql);
$stmt -> execute();

$dbh = null;
```

###全データ取得
```
SELECT * FROM データベース名 WHERE 1
```




#解決してないこと
###半角数字チェックの正規表現
```
if(preg_match('/¥A[0-9]+¥z/', $pro_price)==0)
{
  print '価格を半角数字で入力してください。<br/>';
  print $pro_price;
} else {...
```
これで半角数字を入力してもelseに飛ばなかった。
ので次の表現でいけました。

```
if(preg_match("/^[0-9]+$/", $pro_price)==0)
```
理由というかそもそも正規表現の記法はまだわかりません。


#参考書籍
いきなり始めるPHP

http://www.ric.co.jp/book/contents/book_885.html

気づけばプロ並みPHP

http://www.ric.co.jp/book/contents/book_1065.html