0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

PHP 基本メモ

Last updated at Posted at 2020-08-22

初めに

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'; ?>
0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?