6/19 Sublime Text3 日本語化 / [PHP]データベース(ログイン・ログアウト・商品情報登録)
[課題]
▼各種ソフトインストール・日本語化
Sublime Text3 インストール・日本語化
参照:
http://luna-plate.com/archives/4637
http://blog.huwy.org/article/292827228.html
以下日本語化プラグインによる手順説明より
日本語化 手順
Package Control Messages
========================
- -
Japanese menu for Sublime Text 3
Sublime Text 3の日本語化プラグインです。
[ゆーがいぶろぐ](http://blog.huwy.org/article/292827228.html)さんの日本語化ファイルがベースです。
適用手順
1.C:\Users\ユーザー名\AppData\Roaming\Sublime Text 3\Packages\Japanizeにインストールされている*.jpファイルを、
C:\Users\ユーザー名\AppData\Roaming\Sublime Text 3\Packages\Default
にコピーします。※Defaultフォルダがない場合は作成してください。
2.コピーしたファイルをオリジナルのファイル(.jpが付かないファイル)と置き換えます。(念のため、オリジナルのファイルが有る場合は.orgなどを付けて保管しておきましょう。)
3.C:\Users\ユーザー名\AppData\Roaming\Sublime Text 3\Packages\Japanize\Main.sublime-menu(.jpが付かない方)を、
C:\Users\ユーザー名\AppData\Roaming\Sublime Text 3\Packages\User
にコピーします。すると、他のプラグインで上書きされてしまっているトップメニューも日本語化されます。
以上です。
メモ:
適用手順2について、
具体的には、Defaultフォルダ内のファイル(.jp)のファイル名をそれぞれ拡張子なしの状態に変更します。
※その際、拡張子を変更するとファイルが使えなくなるかもしれないとの警告メッセージが表示されますが、構わず実行します。
Eclipseインストール・日本語化 + Aptana
PHP 実行環境を作る
参照:
http://mergedoc.sourceforge.jp/
http://www.kkaneko.com/rinkou/javaintro/eclipse.html
Bootstrap導入
参照:
http://getbootstrap.com/
[PHP] データベース
▼コロン(:) 以下の記述について
SQLインジェクション回避のため
prepareステートメントを使用してデータを取得
(変数から受け取ったデータをそのまま使用しない)
▼prepare ステートメントを記述
$sql= 'SELECT * FROM users WHERE user_id =:user_id;';
外部から取得したファイルを使用する際には、prepareステートメントを使用
これにより、SQLインジェクションを回避することができる。
▼prepare ステートメント使用によるユーザー情報の取得
$sql= 'SELECT * FROM users WHERE user_id =:user_id;'; $stme = $dbh -> prepare($sql); $stmet -> bindParam(':user_id', $user); $stmt -> execute();
[正常処理後の結果]
※正常処理されていれば、dump実行で以下の値が表示されるはず。
array(4) { ["user_code"]=> string(1) "1" ["user_id"]=> string(4) "ユーザーID" ["user_pass"]=> string(60) "パスワードのハッシュ値" ["user_name"]=> string(8) "ユーザー名"
▼SQLインジェクション
参照:
今夜分かるSQLインジェクション対策
http://www.atmarkit.co.jp/fsecurity/column/ueno/42.html
▼prepareステートメント
参照:
PHP マニュアル 関数リファレンス データベース関連 抽象化レイヤー PDO
プリペアドステートメントおよびストアドプロシージャ
http://www.php.net//manual/ja/pdo.prepared-statements.php
▼bindParam() … 指定された変数名にパラメータをバインドする
参照:
PDOStatement::bindParam
http://www.php.net//manual/ja/pdostatement.bindparam.php
$r = password_verify($pass,$rec['user_pass']); var_dump($r);
[正常処理後の結果]
※正常処理されていれば、dump実行で以下の値が表示されるはず。
bool値の結果はtrue
array(4) { ["user_code"]=> string(1) "1" ["user_id"]=> string(4) "ユーザーID" ["user_pass"]=> string(60) "パスワードハッシュ値" ["user_name"]=> string(8) "ユーザー名" } bool(true)
参照:
https://www.php.net/manual/en/function.password-verify.php
パスワードの照合に成功したら、商品情報の画面に遷移するように設定
《login_check.php》
if($r){ header('Location:item_list.php'); //exit; } else { //ログイン失敗; header('Location:index.html'); } ob_end_flush();
登録商品一覧画面(login_check.php)にログアウト機能を追加
《login_check.php》
<body> <h1>登録商品一覧</h1> <a href="logout.php">ログアウト</a> <div id="container"> <div id="content"> <table border="1"> <tr> <th>商品コード</th><th>商品名</th><th>価格</th><th>修正</th><th>削除</th> </tr> <?php foreach($rec as $v){ print '<tr>'; print '<td>'; print h($v['item_code']); print '</td>'; print '<td>'; print h($v['item_name']); print '</td>'; print '<td>'; print h($v['item_price']); print '</td>'; print '<td>'; print '</td>'; print '<td>'; print '</td>'; print '</tr>';} ?> </table> <a href="entry.php">新規商品登録</a> </div><!--content--> </div><!--container--> </body> </html>
ログアウト画面(logout.php)を作成
<?php require_once dirname(__FILE__).'/init.php'; //セッションを取っておく必要がないのでクリア $_SESSION['login_data'] = array(); unset($_SESSION['login_data']); if(isset($_COOKIE[session_name()] )) { setcookie( session_name(), '', time()-42000, '/'); } session_destroy(); //セッションを破棄する header('Location:index.html'); exit; ob_end_flush();
以下のファイルを新規作成
1. entry.php(商品情報登録画面)
2. entry_confirm.php(商品情報登録確認画面)
3. entry_done.php(登録完了画面)
商品情報登録画面(entry.php)を作成
《entry.php》
<?php require_once dirname(__FILE__).'/init.php'; if(!$_SESSION['login_data']['error']){ header('Location:index.html'); exit; } ?> <!DOCTYPE HTML> <html> <head> <meta charset="utf-8"> <title>新規商品登録</title> </head> <body> <h1>新規商品登録</h1> <form action="entry_confirm.php" method="POST"> <table border="1"> <tr> <th><label for="item_name">商品名</label></th> <td><input type="text" name="item_name" id="item_name"></td> </tr> <tr> <th><label for="item_price">価格</label></th> <td><input type="text" name="item_price" id="item_price"></td> </tr> </table> <input type="submit" value="確認"><br> </form> </body> </html>