初めに
PHPを勉強しています。
自分用にメモしています。
テキストボックスからデータを取得する
<input type="text" name="count" >
<?php echo echo $_REQUEST['count'],'個の商品をカートに追加しました';?>
リクエストパラメータの取得
$_REQUEST['リクエストパラメータ名']
isset関数
isset($_REQUEST['count'])
//isset関数は、変数に値が導入されていて、かつ値がNULLではない時にTRUEを返す
if(isset($_REQUEST['count'])){
echo "カートに商品が入っています”;
}else{
echo "カートに商品が入っていません";
}
比較演算子を使った式
$count==0
if($count==0){
echo 'カートに商品がありません'
}
配列(array関数)
//PHP5.4よりも古いバージョンを使用する場合
<?php
$question=array(
'初めての映画は?',
'ペットの名前は?',
'学校の名前は?',
'生まれた下関は?'
);
echo $question[1];
//PHP5.4以降
$question=[
'初めての映画は?',
'ペットの名前は?',
'学校の名前は?',
'生まれた下関は?'
];
echo $question[1];
?>
foreach
//上記の配列をセレクトボックスで作成する場合
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で「指定するデータベースが存在する場合に」という条件を表す
データベースの作成
create database shop default character set utf8 collate utf8_general_ci
//create databaseは「データベースを作成するコマンド」
//default character setは「データベースで用いる文字コードを表す」
//collateは「データベースにおいて行を並べる順番を決めるための方式」
ユーザーの作成
grant all on shop.* to 'staff'@'localhost' identified by 'staff0120'
//grant 「ユーザーに対してデータベースを操作する権限を与えるコマンド」
//all on shop.*「shopデータベースの全てのテーブルに対して権限を与える」ことを示す
//to 'staff'@'localhost'「ユーザー名」と「ホスト名」
//identified byは「ユーザーがデータベースにログインするためのパスワード」
データベースへ接続
use shop;
//useは「データベースに接続するためのコマンド」
テーブルの作成
create table product (
id int auto_increment primary key,
name varchar(200) not null,
price int not null
);
//create table「テーブルを作成するためのコマンド」
商品番号の列
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文をデータベースに対して実行する
取得したデータを1行ずつ処理する
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'; ?>