コンテンツへスキップ

管理画面にlist.phpてのが作ってある

これでフォームを作成して・・・

<h3>リストに追加する</h3>

<form action="input_list.php" method="post">
    <select name="a_z" size="5">
        <option value="">イニシャルを選んでね</option>
        <option value="a">a</option>
        <option value="b">b</option>
        <option value="c">c</option>
        <option value="d">d</option>
        <option value="e">e</option>
        <option value="f">f</option>
        <option value="g">g</option>
        <option value="h">h</option>
        <option value="i">i</option>
        <option value="j">j</option>
        <option value="k">k</option>
        <option value="l">l</option>
        <option value="m">m</option>
        <option value="n">n</option>
        <option value="o">o</option>
        <option value="p">p</option>
        <option value="q">q</option>
        <option value="r">r</option>
        <option value="s">s</option>
        <option value="t">t</option>
        <option value="u">u</option>
        <option value="v">v</option>
        <option value="w">w</option>
        <option value="x">x</option>
        <option value="y">y</option>
        <option value="z">z</option>
        <option value="others">others</option>
    </select>
    <br />
    band / artist
    <br />
    <input type="text" name="artist" size="20" maxlength="200" value="" /><br />
    <button type="submit">追 加</button>
</form>

フォームの飛び先のinput_list.phpは
以下のような簡単なプログラムw

<?php
require('dbconnect.php');

$alphabet = $pdo->prepare('INSERT INTO bgm_list SET a_z=?,artist=?');
$alphabet -> execute(array($_POST['a_z'],$_POST['artist']));

header('Location: list.php');
?>

続けて追加できるように
終わったら元のページに戻る仕様

ページの最初には
セッションの仕組みがあって
ログイン状態でなければ
このページ自体が表示不可能で
ログインページに飛ばされるるる~

これで追加できるようになった^^

例えば
以下のような
音源(バンド/アーティスト)のリスト

【A】
ABBA
AC/DC
AEROSMITH
ALICE COOPER
ASIA

【B】
BANGLES
BAY CITY ROLLERS
BILLY IDOL
BLONDIE
BON JOVI
BOSTON

【C】
C.C.R
CACTUS
CHEAP TRICK
CHICAGO
CREAM
CULTURE CLUB
CYNDI LAUPER

【D】
DANGER DANGER
DURAN DURAN
(以下略)

順不同にデータベースに登録しておいて
表示する時はアルファベット順に
自動で並べ替えてくれたら
便利かと^^

まずはMySQLにテーブル(bgm_list)を作成

適宜、データを挿入

次はこれをアルファベット順に
表示するページ(list.html)を作成

データベース接続のための共通プログラム
dbconnect.phpを再利用(共用)

リスト表示はイニシャル毎に
下記のようなプログラムにしてみたら・・・

<h4>A</h4>

<?php

require('dbconnect.php');

$alphabet = $pdo->prepare("SELECT * FROM bgm_list WHERE a_z='a'");
$alphabet -> execute();
while ($row = $alphabet->fetch()) {
        echo $row['artist'] . "<br>";
    }

?>

思惑通りに表示された^^

「PHPしっかり入門教室」に従って
ログイン認証を作成してきて
やっとログインができたぽい
ので
ログインした後に表示するページと
ログアウトのページを作成

PHPしっかり入門教室

新たに作るファイルは
コントローラのmember.php(p239~)
表示画面のmember_view.php(p240~)
ログアウトページのlogout.php(p241)

ログインしてみると・・・

一覧は取得できてるけど
どうもログインしたユーザが
判別されてないぽい?

いや、コードに間違いを発見した^^;
(!の要らんemptyに付けてしまってて
もれなくログイン可能になってた~)

でも直すと今度はエラーになってログインできず><

「パスワードとメールアドレスが正しくありません」

登録し直してもこれではねられるるる~?!

サンプルデータをダウンロードして
どこが間違いなのか
比較してみるコトにした

signup.phpで
$passwordが$passwoadって
致命的なスペルミスしてるのが発覚w

むしろこんなんでよく登録できてたなwww

あ~やっとちゃんとできた^^

目下、ログイン認証を作成中で
一連の動作を一通り辿るのに
実際のファイルのコードは
「PHPしっかり入門教室」に
ほぼ忠実だ

PHPしっかり入門教室

しかし細かい部分で
凄く参考になってるのは
「PHP7+MariaDB/MySQL マスターブック」

PHP7+MariaDB/MySQL マスターブック

6冊の中で最も懇切丁寧で
ちょっと回りくどいくらいの解説でも
理路整然と展開するので
どうしてそうなるのかって部分を
なるほど~と理解し易い!

また実際にレンタルサーバで
WEBサイトを作成する際に必要な
例えば.htaccessの記述の仕方とか
端折らずに詳述されてて
初心者に限らず、中級・上級者でも
どれか1冊を選ぶならこれ!!

でも「PHPしっかり入門教室」の方が
「~マスターブック」よりも実践向きかな?

初心者を対象としてるくらいだからか
コードが小出しに出てきて
親切な解説があるので
一連の動作に必要なファイル群を
途中でうんざりせずに作成できるるる~

そんなワケで
これからログイン認証をするために
新たに作るファイルは
コントローラのlogin.php(p233~)と
表示画面のlogin_view.php(p234~)の
たった2つだ

でも初心者が一気に作成するには
かなり長々とコードを書かねばならず
根気が試される場面だろうが
小出しに書き足してくような流れなので
ちゃんと1つ1つのコードを
理解しながら書き進むコトができて
飽きずにファイルを作成できると思われ

login.phpのログイン機能の装備の解説は
自分には苦手なセッションについて
とてもわかり易く書かれてたし
最後に完成したコードを
全体を通して詳説されてるのが
とてもよかった^^

後はこれでめでたくログインできればOK

しかしログインするドコロか
login.phpを表示しただけでエラーw

htmlEscape なんて関数は無いってwww

そうだよね、自分も書きながら
あれ?そんなのだったっけ???って
頭から?マークが放出したもんね
html_escape だったよね~

書き直したら
ログインページがちゃんと表示されて
ログインできたぽい・・・

ぽいけど
飛び先のページ(member.php)が
まだ無かったから
今度はWordPressからエラー^^;

ページが無いって><

まあでもできた^^

ログイン認証を実装するために
まずは以下の書籍に従って
MySQLにテーブルを作成して
設定ファイルや関数ファイルを用意

PHPしっかり入門教室

お次は登録画面

コントローラのsignup.php(p226)
表示画面のsignup_view.php(p227)

ここまでやればブラウザに
signup.phpが表示できそうだ

できた^^

この後、更に既存ファイルの
db_helper.phpに以下を追記

・メールアドレスの重複を調べる関数(p227)
・入力データを挿入する関数(p228)

signup.phpにも以下を追記

・バリデーション機能(p228)
・データの挿入コード(p229)

ここまでの登録画面ができたら
ユーザをテスト登録してみて
データベースに反映されてるか確認

登録はできた^^

しかし同じメールアドレスでも登録できた><

メールアドレスの重複を調べる関数の部分に
スペルミスがあった^^;

修正してから
再度、同じアドレスで登録しようとしたら
ちゃんと「このメールアドレスは既に登録されてます」と
エラーが返ってきて登録できなかった

次はやっとlogin.phpだ!

ここまでの課題をこなすのに・・・

1、PHPの本6冊のその課題の部分だけ
次々と読んでは
気付いたりしたコトをメモ(紙)

2、最も課題に適してるプログラムを選んで
実際にテスト

3、上手くいったら
その経過、コード、表示画面を
ブログにアップ

と、そんな手順で進めてたが
クッキーとセッションについては
最も初心者用と思われる
「誰もがあきらめずにすむPHP超入門」と

誰もがあきらめずにすむPHP超入門

自分から見ると最も難易度が高く感じる
「はじめてのPHPプロフェッショナル開発」には

はじめてのPHPプロフェッショナル開発 PHP7対応

なんと該当ページが無かった!!

でもセッションはログイン認証には必須なので
ログイン認証の項目を探すと
「~超入門」では最後に
「なんちゃってSNS」を作成する項目があるも
確かにログイン認証をしてはおらず
SNSってか、要はBBSだったw

そして「~プロフェッショナル開発」の方は
CakePHPのAuthコンポーネントを使って
ログイン画面の実装をしてた!

個人的にCakePHPはもう古いと思ってたので
最新の(2019年3月に出てる)
最も難易度高い(と感じる)教則本に載ってるってのは
度肝を抜かれた^^;

CakePHPやLaravelなんかを使った方が
セキュリティ的にも良さそうだけど
それやっちゃうとPEARに頼ってた時と同じで
PHP自体がおざなりになる気がするので
フレームワークやライブラリ使わず
実装していこうかと・・・

クッキーとセッションについては
たまたま続けて以下の書籍のコードを
使用ってか、参考にしたので
ログイン認証もこの本の通りにやってみよう^^

PHPしっかり入門教室

p221にある通りに
MySQLにmembersテーブルを作成

この後、今までの自分流のやり方だと
データベースにテストアカウントを直に登録して
いきなりlogin.phpを作成して
一先ず、ログインできるか確かめてたのだが
今回はその前に設定ファイルや関数ファイルを用意

設定ファイルconfig.php(p223)

define('定数', '設定した値');ってのは
XOOPSで表示名を変更するのに弄ったわ、なるほどね

そして関数ファイルときたら
function.phpだと決めつけて
そう名前をつけた空ファイルを用意して
次のページ(p224)へ進んだら
なんと2つのファイルに分けて使うってコトで
db_helper.phpとextra_helper.phpだった・・・バタリ ゙〓■●゙

で、次こそlogin.phpかと思いきや
signup.php・・・ヾ(・_・;)ぉぃぉぃ

長くなり過ぎるから続きは次回だ

今回、PHPを学び直したいと思った
1番の理由を突き詰めると
実はPHP5とPHP7の違いってより
これまではPEARライブラリを活用してたのが
これから使ってく自信を失ったせいだ

今年になっていきなり
GIGAZINEの記事で良からぬニュースを読んで・・・

PHPライブラリサービスの「PEAR」でセキュリティ侵害が見つかる

その後どうなったのかと気になってたら
下記の記事が決定打となって・・・

PHP7.4ではPEARがインストールされなくなる

PEARとの決別を決心!

そもそもサーバのPHPを5→7にしたら
それまで表示されてたモノが
空白になってしまったのが発端で
それと言うのもどうやら
MySQLからデータを拾ってこれなくなったようで
その時点でPEARを使い続けるかどうか
既に答えは限りなくNOに近かったのだがね

そういうワケで
MySQLからデータを拾ってくるのに
PEARを使わずにやるってのが
1つ目の課題

WordPressからアップした以下の投稿の本文を・・・

人間は考える葦である

別サイトの次の該当ページに表示したいのだ

筑摩世界文学大系【13/19】デカルト パスカル

以下の書籍のP212~を参考に・・・

よくわかるPHPの教科書 PHP7対応版

まずはデータベース接続のための共通プログラム
dbconnect.phpを作成

<?php
try {
    $db = new PDO('mysql:dbname=データベース;host=接続先ホスト;charset=utf8', 'ユーザ名', 'パスワード');
} catch (PDOException $e) {
    echo 'DB接続エラー:'. $e->getMessage();
}
?>

WordPressの記事の
タイトル(post_title)と本文(post_content)は
同じ wp_post テーブルにあるので
そのテーブルの該当記事のIDを指定して
1行分のデータを取得して
表示するためにHTMLから呼び出す

<div class="wp">
<?php
    require('dbconnect.php');

    $contents = $db->query('SELECT * FROM wp_posts WHERE ID=1'); // ID指定
    $contents->execute();
    while ($row = $contents->fetch()) { // 1行分のデータ取得
?>

<h4><?=$row['post_title']?></h4>
<div class="wp_post"><?=$row['post_content']?></div>

<?php
    }
?>
</div>

WordPressの記事がHTML内に表示された♪

こんな簡単でいんだ?!

なんだ、PEARなんか全然必要なくね?

個人サイトは
これまでもちまちまと
作成してはきたが
プロバイダーが変わったり
ブログシステムがなくなったりで
とりあえずダウンロードして
サーバに放り込んであるって状態

それなりに読める記事もあるが
画像のリンク切れが凄まじかったり
記事同士も孤立してたりだ

退職したらとりかかろうと
ずっと放置しておいたが
還暦過ぎても働いていそうな自分が
予想出来てきたので
ここいらでなんとかしようかと・・・

とにかくこの1年くらいで
まずレンタルサーバを
1つにまとめる予定
(マルチドメインで
ドメインはいくつか使うけど)

メインのライフワークのサイトは
https://tan-deki.heteml.net/

サイトの全体像は以下

WordPressに記事を書いてって
そのデータベースから
関連記事を表示する仕組み

基本的には書籍毎に
1ページ使って記事にしたいのだが
書籍同士がリンクし合ってたり
または似たような内容の書籍だと
複数冊の書籍に共通してる内容があって
それを何冊(ページ)分も
1つ1つ同じような内容を書くのは
手間だし、バカみたいだ

なので
WordPressで作成した記事が
データベースにあるのを
それぞれのページで
必要に応じて表示するってワケだ

もう1つは
自分と家族のために
うちの猫らの写真や動画を
見るためのサイト

https://asena.site/hachikuma/

と言うか
デバイスに溜まってく一方の画像と動画を
サーバにアップしておいて
それらを簡単に管理できる上記サイトだけでなく
そのサイト構築の手順や
他に手掛けたサイトについてのメモ的な
WEB備忘録をWordPressに残そうと
このサイト(WEBLOG)を作成

HTML5、CSS3、PHP7辺りで
やる度に忘れててググってるコトや
新しく覚えたコトを
未来の自分のためにメモ

そういうサイトもこれまでやってたけど
もう10年以上前の記事なんて
内容が古過ぎて使えなくなってるから
この機会に新たに仕切り直して
ここでやろうかと!