PHP 基本メモ

#初めに
PHPを勉強しています。
自分用にメモしています。


######テキストボックスからデータを取得する

```php

<input type="text" name="count" >

<?php echo echo $_REQUEST['count'],'個の商品をカートに追加しました';?>
```

######リクエストパラメータの取得

```php

$_REQUEST['リクエストパラメータ名']
```

######isset関数

```php

isset($_REQUEST['count'])
//isset関数は、変数に値が導入されていて、かつ値がNULLではない時にTRUEを返す

if(isset($_REQUEST['count'])){
  echo "カートに商品が入っています”;
}else{
  echo "カートに商品が入っていません";
}
```

######比較演算子を使った式

```php

$count==0

if($count==0){
  echo 'カートに商品がありません'
}

```

######配列(array関数）

```php

//PHP5.4よりも古いバージョンを使用する場合
<?php
$question=array(
  '初めての映画は?',
  'ペットの名前は?',
  '学校の名前は?',
  '生まれた下関は?'
);
echo $question[1];

//PHP5.4以降
$question=[
  '初めての映画は?',
  'ペットの名前は?',
  '学校の名前は?',
  '生まれた下関は?'
];

echo $question[1];
?>

```

######foreach

```php

//上記の配列をセレクトボックスで作成する場合
foreach($question as $item){
  echo '<option value="',$item,'">',$item,'<option value>';
}
//$itemのみだとうまく出力されない',$item,'←が必要

``

##データベース(phpMyAdmin)
######データベースの削除

```php

drop database if exists shop

//drop databaseはデータベースを削除するSQLコマンドです。
//if existsで「指定するデータベースが存在する場合に」という条件を表す
```

######データベースの作成

```php

create database shop default character set utf8 collate utf8_general_ci

//create databaseは「データベースを作成するコマンド」
//default character setは「データベースで用いる文字コードを表す」
//collateは「データベースにおいて行を並べる順番を決めるための方式」

```

######ユーザーの作成

```php

grant all on shop.* to 'staff'@'localhost' identified by 'staff0120'

//grant 「ユーザーに対してデータベースを操作する権限を与えるコマンド」
//all on shop.*「shopデータベースの全てのテーブルに対して権限を与える」ことを示す
//to 'staff'@'localhost'「ユーザー名」と「ホスト名」
//identified byは「ユーザーがデータベースにログインするためのパスワード」

```

######データベースへ接続

```php

use shop;

//useは「データベースに接続するためのコマンド」

```

##テーブルの作成

```php

create table product (
  id int auto_increment primary key,
  name varchar(200) not null,
  price int not null 
);

//create table「テーブルを作成するためのコマンド」

```

######商品番号の列

```php

  id int auto_increment primary key,

//idは「列の名前」、intは「列のデータ」
//auto_incrementを指定すると「行を追加した時に番号が自動的に加算される」
//primary key＝「主キー」と呼び「行を一意に識別するための値をあらわす」

```

######商品名の列

```
  name varchar(200) not null,

//「name」は列の名前「varchar(200)」は型で「not null」はこの列をNULLにしてはならないという意味

```
######価格の列
```
  price int not null

//priceは「列の名前」intは「整数を表す列のデータ」 「not null」はこの列をNULLにしてはならないという意味
```
######データの追加
```
insert into product values(null, '豚肉', 600);

//insert intoは「指定したテーブルに新しい行を追加するためのコマンド」
//追加するデータはvalues(null, '豚肉', 600)のように「,」で区切って指定する
//文字データは「'」で囲み、数値データはそのまま記述することができる
```

##データの取得
######SQLのselect文
```
SELECT * FROM product;

//セレクト文を使うと「指定したテーブルの、指定した列を取得することができる」
//select 配列名　from テーブル名;
//初めにselectと書き、次の「*」は全ての列を指定している
//from productは「productテーブルを指している」
```
##PDDからデータベースに接続する方法
######PDOによるデータベース接続
PDOはクラスの一種でデータベースを操作するための変数や関数がまとめて定義されている

```
$pdo=new PDO('mysql:host=localhost;dbname=shop;charset=utf8','接続するユーザー名','パスワード');
foreach ($pdo->query('select * from product') as $row){
  echo '<p>';
  echo $row['name'];
}
```
######PDOのインスタンス生成
```
$pdo=new PDO(...);

//newはインスタンスを生成する
//生成したインスタンスは変数に代入しておき、プロパティやメソッドを利用するために使う
```

######データベースを識別する情報
```
$pdo=new PDO('mysql:host=localhost;dbname=shop;charset=utf8','接続するユーザー名','パスワード');

//mysqlは「MySQLに接続することを表す」「:」以降に必要な情報を「;」で区切って並べる
//host=localhostは「MySQLがlocalhostに存在することを表す」
//dbname=shopは「shopデータベース」を指しcharset=utf8は「文字コードを表している」
```

######SQL文の実行
```
PDOの変数->query('SQL文')
```
######PHPからのselect文の実行
```
$pdo->query('select * from product') 

//PDOクラスのqueryメソッドを呼び出している
//メソッドの呼び出し方「変数->メソッド」
//queryメソッドは引数に指定したSQL文をデータベースに対して実行する
```

######取得したデータを１行ずつ処理する
```
foreach ($pdo->query('select * from product') as $row){
 ...
}

//データを代入する変数名は$row以外でもOK
```
######指定した列のデータを取り出す
```
$row['id']

//配列['配列名']
```
##商品データを検索する
######商品名で商品を検索する（入力画面）
```
<p>商品のデータを検索する</p>
<form action="user-output.php" method="post">
<input type="text" name="keyword">
<input type="submit" value="検索する">
```
######商品名で商品を検索する（出力用スクリプト）
```
<?php 
$pdo=new PDO('mysql:host=localhost;dbname=shop;charset=utf8','staff','staff0120');
$sql=$pdo->prepare('select * from product where name=?');
$sql->execute([$_REQUEST['keyword']]);
foreach ($sql as $row){
  echo '<tr>';
  echo '<td>',$row['id'],'</td>';
  echo '<td>',$row['name'],'</td>';
  echo '<td>',$row['price'],'</td>';
  echo '</tr>';
}
?>

```
######prepareメソッド（SQL文）
```
PDOの変数->prepare('SQL文')

//prepareメソッドはSQLが文がセットされたPDOStatementインスタンスを返します
```

######executeメソッド（SQL文）
```
PDOStatementの変数->exrcute([値])

//prepareメソッドで準備したSQLスクリプトをexecuteメソッドで実行する
```


######外部キーを含めたテーブルの作成
```
create table rpadat ( 
id int not null primary key, 
product_id int not null, 
fee int not null, 
foreign key(product_id) references product(id) )
```
##商品の購入
```
$sql=$pdo->prepare('insert into purchase values(?,?)');
if ($sql->execute([$purchase_id, $_SESSION['customer']['id']])) {
	foreach ($_SESSION['product'] as $product_id=>$product) {
		$sql=$pdo->prepare('insert into purchase_detail values(?,?,?)');
		$sql->execute([$purchase_id, $product_id, $product['count']]);
	}
	unset($_SESSION['product']);
	echo '購入手続きが完了しました。ありがとうございます。';
} else {
	echo '購入手続き中にエラーが発生しました。申し訳ございません。';
}
```
##ログイン機能を作成
```
<?php session_start(); ?>  //セッションの開始
<?php require '../header.php'; ?>
<?php require 'menu.php'; ?>
<?php
unset($_SESSION['customer']);　//すでに同名でログインしているユーザーをログアウトにする記述
　　　　　　　　　　　　　　　　　　 //unset関数は指定した変数を削除する
$pdo=new PDO('mysql:host=localhost;dbname=shop;charset=utf8', 
	'staff', 'password');
　　　　　　　　　　　　　　　　　　//PDOを使ってshopのデータベースと接続する
$sql=$pdo->prepare('select * from customer where login=? and password=?');
　　　　　　　　　　　　　　　　　　//ログイン名とパスワードを検索するためのSQL文
$sql->execute([$_REQUEST['login'], $_REQUEST['password']]);
　　　　　　　　　　　　　　　　　　//prepareメソッドで準備したSQLスクリプトをexecuteメソッドで実行する
foreach ($sql as $row) {
	$_SESSION['customer']=[
		'id'=>$row['id'], 'name'=>$row['name'], 
		'address'=>$row['address'], 'login'=>$row['login'], 
		'password'=>$row['password']];
                              //セッションデータの登録
　　　　　　　　　　　　　　　　　　//
}
if (isset($_SESSION['customer'])) {
	echo 'いらっしゃいませ、', $_SESSION['customer']['name'], 'さん。';
} else {
	echo 'ログイン名またはパスワードが違います。';
}
?>
<?php require '../footer.php'; ?>
```