PHPの出力方法

print

戻り値として常に1を返す

echoとは違い複数の引数は指定できない

 

var_dump

変数に関する情報を出す。変数の型も出してくれる。

<?php
$test_str  = 'test';
$test_int  = 1;
$test_bool = true;

$test_array = array(
    'test' => array(1, '2', 'aaa', false, 'true')
);

var_dump($test_str);
// 出力結果:string(4) "test" //文字列

var_dump($test_int);
// 出力結果:int(1)  //整数型

var_dump($test_bool);
// 出力結果:bool(true)  //trueかfalseかのデータ型のこと

var_dump($test_array);
/*
出力結果
array(1) {
  ["test"]=>
  array(5) {
    [0]=>
    int(1)
    [1]=>
    string(1) "2"
    [2]=>
    string(3) "aaa"
    [3]=>
    bool(false)
    [4]=>
    string(4) "true"
  }
}
*/

/*
この書き方も使えます!
var_dump($test_str, $test_int, $test_bool, $test_array);
*/

 

print_r

指定した変数に関する情報をわかり易く表示する。

自動的に改行されないので、"\n"を、この出力の下にechoで表示させる必要がある。

引数は一つしか選択できない。

 

<?php
$test_str  = 'test';
$test_int  = 1;
$test_bool = true;

$test_array = array(
    'test' => array(1, '2', 'aaa', false, 'true')
);

print_r($test_str);
echo "\n";
// 出力結果:test

print_r($test_int);
echo "\n";
// 出力結果:1

print_r($test_bool);
echo "\n";
// 出力結果:1

print_r($test_array);
echo "\n";
/*
出力結果
Array
(
    [test] => Array
        (
            [0] => 1
            [1] => 2
            [2] => aaa
            [3] => 
            [4] => true
        )

 

調べたこと 第二十五回

フォームからレコードを操作する

<?PHP

//SQLとのコネクションを開く

$link =mysql_connect("localhost","sample","パスワード","sample");

//SQL文字コードを設定する

mysql_set_charset($link, "utf8");

 

//入力された値を、SQLに入れるための、「INSERT文」を作る

$sql = "INSERT INTO address (username, zip, address1, address2,tel)"." VALUES(".

             " ' " . mysql_real_escape_string($link,$_POST["username "]). " ' , " .

              " ' " . mysql_real_escape_string($link,$_POST["zip"]). " ' , " .

               " ' " .mysql_real_escape_string($link, $_POST["address1"]) . " ' , " .

               " ' " .mysql_real_escape_string($link, $_POST["address2"]). " ' , " .

               " ' " . mysql_real_escape_string($link,$_POST["tel"]). " ');";

 

//「INSERT文」を発行する

 mysql_query($link,$sql);

// コネクションを閉じる

mysql_close($link);

echo "レコードを追加しました。";

?>

 

流れが、

1,PHPSQLとのコネクションを開く。

2,SQL文字コードを指定する。

3,入力された値をSQLに入れるための、INSERT文を作る。

4, INSERT文を発行する。

5,コネクションを閉じる。

 

になる。

単純な文字列の統合で、入力されたデータを$_POST[”フィールド名”]で探して、

結合させて、INSERT文を作っている。

 

顧客情報を入力する画面で、登録ボタンを押すとデータが登録されていく。

 

mysql_real_escape_string  ー> は必須!!

文字列に「 ’ 」が入っていたらエラーになってしまうので、必ずSQLエスケープと言われる上の関数を付け加えること。

SQLインジェクションという、攻撃が仕掛けられたら、SQLの内容が勝手に書き換え

 られてしまう)

 

 

 

 

 

             

              

                 

調べたこと 第二十四回

データベースのエクスポート

テーブルを作成する時にどのようなSQL文が発行されたかは、テーブルをエクスポートすると分かる。

エクスポートのやり方

 

データベースのファイル項目を選んで、その中に「Export」があるので、それをクリックして、エクスポートする先のディレクトリとファイル名を指定する。

 

その後に、指定したファイルをテキストエディタで開いてみると、テーブル作成時の

命令文が記述されている。これで、CREATE TABLE の文が存在することを確認できる。

 

逆に、このエクスポートしたファイルをインポートすることができる。

その方法は、データベースのファイル項目を選んで、その中に、「import」があるので、それをクリックし、インポートしたいファイルを選ぶ。

(新しくそのファイルでデータベースを作成したいときは、Yes、

          今開いているデータベースに追加したい場合は、No、を選ぶ)

 

命令文の種類

UPDATE文ー>データの更新

SETー>変更する値を置く

 

 UPDATE address SET tel='987 6543 2198' WHERE id=1;

の場合だと、Idが1であるレコードのTelカラムを、987 6543 2198 に書き換える

ということになる。

 

 

DELETE文ー>レコードの削除

 DELETE FROM address WHERE id=1;

アドレステーブルの、idが1のレコードを削除する。

 

 

これらの操作を、プログラムからどのように実行するのか?

1,データベースに接続

  接続する時に必要なのは、データベースが稼働しているサーバの名前とIPアドレス

  データベース名、ユーザー名、パスワード。

2,SQLの発行

3,レコードセットの読み込み

4,データベース接続を閉じる。

 

 

PHPからデータベースにINSERT分を発行するとき、、、(mysqliライブラリ)

<?

//コネクションを開く

$link = mysqli_connect("localhost", "sample","パスワード","sample");

 

//インサート文を発行する

mysqli_query($link,"INSERT INTO address(username,zip,address1,address2,tel)".

"VALUES('大越 張夫','117-117','広島県','広島市安佐北区桐陽台','987-6543-2198',);");

 

//コネクションを閉じる

mysql_close($link);

echo "レコードを追加しました。";

?>

 

これを実行すると、ぶらうざには レコードを追加しました。という

表示が出て、ちゃんとSQLには命令した通り、追加されている。

実行するたびに、同じレコードが追加される。

 

 

 

 

 

 

 

 

調べたこと 第二十三回

データベースについて

データベースは、それ自体が独立していて、プログラミング言語や各種ツールには依存していないので、様々なプログラミングから呼び出せるように作られている。

 

データベースにはいくつか種類があるけど、もっともよく使われるのは「リレーショナルデータベース管理システム」(RDBMS)というもの。

 

データの表のことを、「テーブル」

項目のことを、「カラム」

データのことを「レコード」

 

という。

 

データの管理の仕方は、

まず、情報に番号を付ける必要がある。同じような情報がたくさん載せられていると区別をすることが難しいので、そうする。

その番号を「主キー」(Primary Key)という。

主キーにしたいカラムを選んで、PRIMARYを指定すれば主キーになる。

 

カラムの「かた」と「サイズ」を指定しないといけない。

型には、数値型 文字列型 日付型 時刻型 などがある。

サイズは、文字列型のときー>長さをしめす。

     数値型のときー>整数であるか、小数も含めるか、最小値最大値は幾つ?

             なども含める。

 カラム  型  サイズ  意味

       id         数値型   ナシ  主キー。連番でつける。

 

という定義をする。

 

プログラムとデータベースがやり取りするには、プログラムからSQL文を送信して、受け取ったデータベースがSQL文を理解して、結果を返す という流れ。

 

 

NoSQLデータベース

RDBMS以外のデータベースのことをNoSQLという。

その中にも2つの種類がある。

 

キーバリュー型

キーと値のペアだけを保存するデータベースのこと。

複雑でないため、大量のデータを高速に読み書きできる。ユーザーごとに結びつけたい少量の保存によく使われる。

 

ドキュメント型

あらかじめスキーマを定義せず、テキスト全体を保存して、柔軟に検索ができるようにしたデータベース。

 

テーブル作成のためのSQL

データベースを作成するとき、ユーザーを作成するとき、テーブルを作成するとき、それぞれに実は、SQL文が発行されている。

 

どんなSQL文が発行されているかしりたいときは、「エクスポート」から調べることで、知ることができる。

このエクスポートは主に、バックアップや移行のときに使う。

 

エクスポートしたSQLテキストエディタで確認すると「CREATE TABLWE」が存在を確認することができる。

 

SQLでのデータ操作

 

INSERT文

INSERT INTO  ・・・ テーブルに情報を追加する(カラムとレコードを記入)

 INSERT INTO address(username) VALUES

(’デイビット スプレーン’);

 

SELECT文

SELECT ・・・  テーブルからレコードを取得する

例 

SELECT カラム1 カラム2、、、FROM テーブル名

WHERE 条件 ORDER BY 並べ替えるカラム;

         ↓

       並べ替えたいカラム

 

SELECT * FROM テーブル名 ・・・ 全レコードを取得する

 

 

 

 

 

 

 

 

調べたこと 第二十二回

CSSの装飾
ーボタンー
 
HTML
<div class="inline">

<a href="#" class="pre">Sign In</a>

 
</div>
 
 
CSS 
.pre1 {
-webkit-transform: translateY(4px);->素を回転、拡大縮小、傾斜、移動する
transform: translateY(4px); ->要素を二次元平面上の垂直方向で再配置
box-shadow: 0px 0px 1px rgba(0, 0, 0, 0.2);->数値で透明度を指定
border-bottom: none;    ↓  ↘
}                   色を指定。 0〜1で透明度を表す。  

.pre1 {
display: inline-block;
padding: 0.5em 1em;
text-decoration: none;
border-radius: 4px;
color: #ffffff;
background-image: linear-gradient(#678399 0%, #3d4e5b 100%);
  →二つ以上の色の間で、連続的な直線の変化から構成される画像を生成します。
box-shadow: 0px 2px 2px rgba(0, 0, 0, 0.29);
border-bottom: solid 3px #5e7fca;
}
 
今作っているCSSで、ボタンの作り方を調べて出てきた装飾の仕方です。
まだ良くわかっていませんが、とりあえず見たことがない関数を調べてみました。
中途半端に終っています。

調べたこと 第二十一回

セッション
どんな場面でクッキーに保存すべきではないかというと、例えば
ゲームなどで、集めたアイテムや掛けたお金などの情報をクッキーで保存していれば、ユーザーがクッキーを書き換えて、数や金額を変更できてしまう。
そういった絶対に変えられてはいけない情報をサーバ側に保存する。
 
セッション機能があるプログラミング言語やライブラリでは、アクセスしてきたクライアントごとにセッションIDを渡して、クライアントをそれぞれ識別する。
このIDの保存領域に保存された情報はクライアントには見えないため安心。
 
このセッションIDの作成はプログラムの実行環境やライブラリで自動的に行われる。
セッションIDはクッキーを通してクライアントに渡される。
 
2回目にセッションIDをクッキーとして提出してくれる。保存領域は変わらない。
 
プログラムではこのように書く↓
 
session_start();    ー>この呼出によって、セッションIDの生成、保存領域との結びつき
          が可能になる。
if(!isset($_POST["order"])){  ー>入力値がない場合。
     unset($_SESSION["order"]);
} else{
     $ordervalue=$_POST["order"];
     $_SESSION["order"]=$ordervalue; ー>セッション変数に格納。
}
 
セッションに格納した値を参照するには、、↓
session_start(); ー>読み取るときもセッションスタートする。
if*1 || ($_SESSION["order"]=="")){
echo "商品が選択されていません"
}else{
$ordervalue=$_SESSION["order"]; ー>値を読み取る。
echo "の購入の手続きを開始いたします"
}
 
セッションIDを見る
開発者ツールを使ってクッキーを確認すると、アクセスした時に 「Set-Cookie」ヘッダ
が送信されていることが確認できる、
で、そこにランダムな文字列が並んでいるけど、それがセッションIDとなる。
ブラウザが閉じるまで有効。
 
セッションは、クッキーと違ってブラウザを閉じた時点でなくなるわけではなく、一定時間は残っている。サーバ側にはブラウザを閉じても残っているけど、PHPだと一時間に設定されているらしいけど、それくらいで無くなる。
 
逆に長いことブラウザを開いたままで、操作しなければクッキーは有効でセッションは消えてしまうという事が起こる。
そのときには、また違う新しい領域を作って割り当ててくれる。
 
セッションハイジャックを防ぐには、、、
1,セッションIDをクッキーを使って送るので、送信する時にSSL化しておくと、セッションIDをより予測不可能な文字列にできる。
たとえ、盗まれることがあったとしても解読するのに時間がかかる。
2,セッションIDは盗まれる前提で、最終決済のときなどに、もう一度ユーザ名&パスワードを再入力してもらうという作りにしておく。
 
 
 
 

 

*1:!isset($_SESSION["order"]

調べたこと第二十回

Cookieとセッション

WEBプログラムは、複数のページから構成されることがほとんど。

この複数のページから構成される場合、ページ間でのデータ共有が必要になる。

HTTPの基本機能。

 

Cookie

       クライアント側にデータを保存する仕組み。

  サーバがクライアントになにかデータを保存したいときに、ヘッダ情報を送信する。その値は、どのドメインのサイトから送られてきたかという情報とともに、ブラウザが管理する場所(メモリやディスク)に保存される。

そして、ブラウザは次に同じドメインのサイトにアクセスする時に、保存されているクッキー情報があれば、ヘッダ情報を追加してアクセスするので、

WEBプログラム側で前回クライアントに送信したデータを参照できる。

クッキーが送られるのは同じドメインのサイト

 

PHPcookieを設定 -> クライアントに返されるデータ

setcookie("名称","値");  ->  Set-Cookie:名称=値

 

セッション情報

   サーバ側にデータを保存する仕組み。クライアントを区別するためのランダムな

   IDを割り当てて、そのIDに対応するデータの保存域をサーバ側に作成。

   プログラム実行環境やライブラリによって提供される。

 

[リファラー]

WEBブラウザでは、クリンクをclickして別のページに移動したとき、そのリンク元のページのURLを「Refere」というヘッダとして送信する。

これをリファラーという。

WEBプログラムでリファラーを調べると、リンク元が分かる。

ただし、リファラーはWEBブラウザが付与している情報にすぎないので、WEBブラウザによっては送信されないこともある。