PHPを学ぼう!

▼PHPを学ぶチャプターです。


フリーランスの求人サイト

 

素材メニュー

 ◆Chapter 1

 ◆Chapter 2

 ◆Chapter 3

 ◆Chapter 4

 

制作ヒント

 ◆制作のヒント

 

レッスンメニュー

 ◆Chapter2 練習問題

 ◆Chapter3 DB練習問題

 

サイト運営者がPHPを学んだ
お勧めの書籍です!
これ一冊で基本的なPHPの仕組み、簡単なプログラムの作成、SQLiteを使ったデータベースなどかなり学べる要素が詰まっています!

↓↓↓ ↓↓↓

PHPレッスンブック―PHP5対応

新品価格
¥2,520から
(2013/2/24 04:38時点)

 

 

サイバーテロの技法について書かれた書籍です!
ハッカーの手法を知ることでご自身のサイトがハッカーに攻撃されたときそれを防ぐ手法を紹介しています。

↓↓↓ ↓↓↓

PHPサイバーテロの技法―攻撃と防御の実際

新品価格
¥1,890から
(2013/11/5 10:09時点)

 

 

★初年度100円! サブドメインやメールアカウントを無制限に設置できます。
PHPやCGIは勿論、WordPress、Movable Type Open Source、掲示板、ブログ、ショッピングサイトなどが簡単に導入できるので複数サイトを運営したい場合に便利なサービスです。

↓↓↓ ↓↓↓

 

PHPが動作するサーバー

 

はじめてのHP | 無料素材 | タグ辞典 | CSSガイドEX | PHPを学ぼう!

◆Tip 4 - 二重投稿の対応(チケットの考え方)

アンケートや投稿、問い合わせ、ショッピングカートなどでユーザーが不意にページを更新したり、ページを戻ったりした場合に二重投稿(処理)される場合があります。
これは、「更新」や「戻ったり」することで再度、そのページが読み込まれ設定していた処理がされることで起こりうる現象なのです。

 

ネットショッピングサイトのカートでよく見かけたりする現象ですが、これもPHPで簡単に対応できます。

 

利用者に「ページの更新をしないでください」、「戻らないでください」とお願いするのもちょっと格好悪いですよね・・・。
その様なプログラムを作成する時には参考にしてください。

 

考え方としては、送信されたデータにチケット、いわゆるタイムスタンプのようなユニークIDを付けてやることで解決できます。
"POST"するタイミングでユニークIDを発行し、プログラム処理用のチケットとするのです。
"SESSION"にも同時に格納することで互いが一致すれば処理をし、そうでなければ処理をしない仕組みにすればページを「更新」、「戻ったり」しても同じ処理をすることを回避できるのです。

 

[チケットのイメージ]
フロー

 

サンプル 1では、チケットを発行しない場合の動作確認ができます。
サンプル 1

 

サンプル 2では、チケットを発行した場合の動作確認ができます。
サンプル 2

 

それぞれのソースの確認は、サンプルで閲覧できます。

 

チケットには、ランダムな数字や記号を使います。
ランダムに育成できるのであれば、"randam"や"time"など何を使ってもよいのでしょうが、多少なりの課題がるようです。
"rand関数"は、数秒の差ではありますが育成するのに時間がかかります。
"time関数"では、育成されるタイムスタンプが可能性としては低いのですが、同時にアクションした人と同じものになる可能性がありセキュリティ上問題を残します。

 

サンプル 2では、チケットの発行を次のとおりとしています。

$_SESSION['ticket'] = md5(uniqid().mt_rand());

 

"uniqid関数"に加えて"mt_rand関数"でランダムなユニークIDを作成し重複のチケット育成を防いでいます。
これを"$_SESSION['ticket']"に代入しています。
SESSIONの使い方は、セッションとクッキーを参照ください。

 

「購入する」ボタンが押されると、育成されたチケットを"$_SESSION['ticket']"の値で送ってあげます。
"form"タグに次の様に、"hidden"を追加します。

//ショートタグ利用の場合
<input type="hidden" name="ticket_chk" value="<?= $_SESSION['ticket']; ?>'" />

 

"POST"された"ticket_chk"と"$_SESSION['ticket']"が一致すれば処理し、そうでなければ処理しないという分岐をしてあげれば、ページ更新などよる二重処理が防げるのです。

if($_SESSION['ticket'] == $_POST['ticket_chk']){
  ...
}else{
  ...
}

 

詳しくは、サンプル 2でソースを確認ください。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ex-mode.net | ツールEX | 素材EX | アフィモール | 初級者向 初めてのホームページ作り | Htmlタグ辞典 | 初めてのプランター菜園 | リンク・ボード
気のみ気のままなブログ | CSSガイドEX | ホビ★コレ | 班長日記!

▲UP

Copyright (C) ex-mode.net 2017. All Rights Reserved.