ICT関連の学習備忘録

ICTの学習をアウトプットするワークブックサイト

ICT関連の学習備忘録

記事ページ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 

2019-07-22 : CMS風にしたい。ゴール決めないと終わりが無い・・w

土日予定入っちゃうとほぼ何も出来ないよネー。
申し分程度に本読んだだけだったわ。

で、気を取り直してこの学習記録ページのですね、
構想としてはこのWEBページそのものをブログCMS風なのを目指すことにした。

エンド側の画面と、管理者側の画面とを分けて、

取り急ぎ必要だと思うのは、
エンド側は表面上変わるところはあまりないけど、サーバーサイドと連動させるとして
全部にPHP埋め込むことになるネ←
一部ヘッダーのメニューとかは埋め込んでるけどそうじゃなくてDB的な。

今3分間だけ考えてみる。

・トップページの記事数を減らす(数記事毎に次のページみたいなアレ)
・コメント投稿が出来るようにする。
・各ページの記事(html)をデータベースから引用するようにする。
・CSSを整理する。全体のデザインとメニュー。
・レスポンシブにする。
・記事検索機能を追加する。
・問い合わせページの追加・・・いるか?(笑)

はい。これだけ出てきた。
取り敢えず順に、トップページの記事数を減らすのループ回数を制限してやれば
問題なく出来るかなと。イメージ的には、
データベースからループ5回で上から5記事取り出す、
次のページで上記条件+DBの上から5記事を引いて、また5記事取り出す
の、繰り返し・・・。
って思ったけど、例えば4ページ目に一発で行きたい時は、どうするか?
※書きながら考えてるなう。

ページへのリンクもループ必要か。 データ数 % 5 = 0 で次のリンク生成ストップ。
というか記事数に応じてページファイル(phpなりhtmlなり)自体を生成せなアカンな。
DBに記事をインサートした際に記事数が5の倍数になった時点で、
$num ++
touch ("hogehoge{$num}.html")
とかでファイル作る・・て思ったけどそんな記事が増えたからって
ファイルがどんどん増えていくCMS聞かねーしなーと不意に落ちなかったので
WordPressを思い出してみた。
二通りある。
GETリクエスト(?)で「example.com/?p=1111」こうなるやつと
ディレクトリ「example.com/1111」ってなってるやつ。
後者のやり方はわからない。出来なくはないケド、ファイルいっぱいになるww
んー・・・
※書きながら考えてる(大事なことだから2ry
GET送信使ったほうがやりやすい、か?。
index.htmlの記事データのループ箇所に条件式付けて
$_GETの値を元にDB読み込み位置を調整しーの
ループ条件をrange(1,5)にして5回まで、と。

うん。まぁ、きっと、多分、そんな感じだな(適当

要件定義みたいなやつやね。関係図的なの書きながらじゃないと
結構疲れる。頭が。ってことで考えるのはやめた。

次。
コメント投稿は、記事の投稿と似たようなもんだから現状でも作ることは可能。
各ページの記事のデータベース化もトップページの二番煎じ+ファイル生成ぐらい。
CSSの整理はもうすぐ(仮にも)講義があるからそれまでは保留で。
レスポンシブは、ケッコー辛い気がする。CSS覚えてから。
記事の検索機能もはDBでWHEREとGROUP BYを使えばなんとでもなりそう。
問い合わせページは、ぶっちゃけいらねーよって思ったけど、
仮にもCMSという建前上メールサーバと繋げようかなと。
実際管理画面で問い合わせが来てるよーこんな内容だよーってのが、
見れれば事足りるわけではあるけどそれじゃ、コメント機能の実装と
大差ないし別の手法も触るだけ触るって意味を込めて。


管理ページに必要なもの
ログインページ、アクセス解析ページ、画像管理ページ、コメント管理ページ、
投稿ページ(一覧、検索、編集)、カテゴリ管理(一覧、検索、編集)、
CSS編集ページ(デザイン替えられると良いよね)
投稿ページは出来たら、ボタンを押したらHTMLタグを挿入するような機能付けたいけど
PHPだけだと結構しんどい。javaScriptやらんとってなる。


他にもこんなの出来そうって構想はあるけど↑のやったら
相当な時間取られて他出来ないんだろうなーと。

pythonやりたいけど現時点で(今やろうとしてる事に関して言えばだけど)
どう考えてもjavaScriptの方がpythonより先にやる必要性がある件。

困った/(^o^)\日々悩む\(^o^)/


あ、最後にPHP少しだけ弄ったメモだけ。
メイン記事の新規投稿時は改行を「<br />」に置き換えるnl2br関数を使って
nl2br($_POST['hogehoge'])
ってしてたから改行タグを入れなくても反映されてたんだけど、

メイン記事の編集時、通常の改行(記事書く際のエンター)と上記のnl2brで置き換えられた
改行(<br />)の両方を読み込んでて下記スクショ左側みたいになってた。
ほんでこのまま更新させると通常の改行とnl2brの改行で二重に改行がされてしまって、
更に続けるとどんどん改行が増えてく仕様になってた訳で
毎度メモ帳とかで改行タグだけ消して貼り付けしてたけどいい加減面倒くさいから、
正規表現関数使ってみた。
preg_replace( 正規表現の指定 , 置換える文字列 , 検索する文字列 )

実際の該当箇所のコード的には
<textarea><?= e($row['text']) ?></textarea>
↓変更
<textarea><?= e(preg_replace('<<br />>', '', $row['text'])) ?></textarea>
こうなった。



2019-07-19 : VPNとVNCでLANのセキュリティを超えてゆけ←

VPN:VirtualPrivateNetwork
VNC:VirtualNetworkComputing
すなわち、リモートデスクトップですね。
なぜ突然使おうと思ったかというとですね、
教室のネットワーク環境がどんどんセキュリティ厳しくなってきて、
普通に調べ物してても遮断されてたり、自分のWEBページも遮断されたり
プログラミングのラーニングサイトは何処もかしこもブロックされちゃったし
中々に肩身が狭くなってきたので、ここいらで"ネットワーク・サーバの独習"をしようかとね。

多分授業で触れない気がするんだけど、
今アクセス制限掛けられてるのって、要はLAN内からWANへと通り抜ける際の壁で
要求先がのドメイン等に対してフィルタリングしてるのね。多分。理論的には。

で、何するかってLAN内から制限ドメインへ直接向かわなければWANへ出れる訳で
WANに出た後の自由に動ける状況になってから制限ドメインへアクセスしてやれば
LANでのセキュリティは全く関係ない。
んで制限ドメインの応答も直接帰ってくるわけじゃなくて制限の無いドメインを経由して
戻ってくればセキュリティスルーで、要求と応答が出来るって寸法。

端的に言うと、外部に踏み台を作る

やり方は自分が出来る範囲だと2つある。
VPNの場合だとVPNサーバやルータが必要になってくる。もしくはVPS(VirtualPrivateServer)
バーチャル多すぎワロス。・・・で仮想ネットワークってあるようにIPを仮想のものにする
例えば離れた支店とかで、セキュリティ強化したいからってIPでアクセス制限掛けたい
けど営業は外回りでその場その場でIPコロコロ変わるとか・・だと、制限掛けれないから
実際のIPとは別に仮想IPを割り当てて表面上のIPを仮想(偽装)する感じ。

VNCの場合は、リモートデスクトップを使う感じで、遠隔で別のパソコンを操作するあれ。
これの場合はサーバーではなく常時起動しておく(操作される側の)PCが必要になる。
ネットワークを偽装するわけではなく単純に遠隔操作側のPCで、画面で、ブラウジング
だったりの通信を行うから、ネットワーク外にあるPCが制限ドメインへアクセスしたところで
同じLAN内(セキュリティ内)に居ない訳で、当然に通信は行える。
ただし、その遠隔操作される側のPCへの通信経路がセキュリティに引っかかった場合はTHE・END(笑)

取り敢えずVNCの方は、CentOSでVNCクライアントとしても動かせることが確認出来たので週明け実験←




2019-07-18 : 30の大台に乗ってしまった。 (祝)

PHPを読み進めることにした。
10章クラスの定義を読み進めました。
PHPでは、一つのクラス大して一つのファイルで管理するのが一般的らしい。
「クラス名.php」とか「クラス名.class.php」とかって。
Linuxで言うところのbash(シェルスクリプト)みたいなもんやな。
・メリットとしては余計なクラスまで読み込む必要が無い
・ファイル名でクラスが識別可能
・オートローダ利用時に便利
※オートローダ:クラスを一つ一つインクルードしなくても、クラスが呼び出されたタイミングで
 同名のクラスファイルをインクルード出来る仕組み。

と、読み始めて実操作始めたらWEBページの右メニューが気になりだして
読んでるところの内容そっちのけで、
ディレクトリ内にあるファイルデータの取得をし始めるっていう。

備忘録のトップページ以外右のサブメニューのところに
該当ディレクトリ内の"全ファイル一覧"の出力してリンクにして並べた。

セキュリティ的に取り敢えず普通じゃない←

かと言って・・・
1.重要なファイル関係は、ルート外に入ってるから基本的にはダメージは無い。ハズ。
2.DBの接続設定もローカル環境と違うから特に問題ない
3.最悪、弄くられても。ローカルのクローンでしか無いから復元は容易。
4.何より自分で確認がしやすい←

とにかく4ですね!勉強のためにやってるのだから
勉強がしやすいようにした方がええやんって。


データベースまた触ってて、機能触れ忘れたけど、
ALTER TABLE [テーブル名] ADD [カラム名] [データ型];
これでカラムの追加が出来るわけだが、何度やってもデータ型変えても
上手くいできないと思っていたら、カラム名を[update]で作ろうとしていた為、
予約語(禁止語句)と被り、上手く追加が出来なかったとです。

予約語って概念を完全に忘れてた。

予約語で使われてる語句って結構使いやすい単語だったりするわけで、
その辺りを回避する手段としては[a_update]とか[code_at]とかアンダーバーを
用いたりすることで回避可能、と。

2019-07-17 : 入力フォームとDB連動復旧

WHEREでの条件付け出来た。絞り込みが出来なかった原因としては
POSTデータの受け渡しが上手く行ってなかった。
数ファイルに渡って同じデータ投げてたから途中で名前付けが変になってたとです。

どっかのソフトウェア開発企業の社長のツイッターかなんかで見たけど
「未経験がプログラマ目指す際に作る成果物は管理画面を作ると良い」
って言ってたんよね。
少しだけ、意味がわかった気がする。
管理画面だから、管理者が使うようなページ、adminiって言ったらかなりの権限があるわけで
いたるところにアクセスや操作が出来るのね(基本的に。エンドと比較して。)
出来るってことはアクセスや操作経路(コマンド送信やリンク等)を用意しないとアカン

対応するつったって、単に操作性って言っても最初は作るだけだったのが
作成から削除、変更、並び替え、複製、結合、分解、計算、除去・・・って色々な操作がね
自ずと必要になってくる。

要約すると機能追加って結構労力使うわって話(簡潔
次画像ファイルのアップローダを付けるか他のページも編集しやすくデータベース管理に
するかどうするかって考えてるけど前者の画像ファイル処理絶対面倒くさいし←
アップローダ自体は直ぐにできるけどファイル名自動変換、データベース登録、そこから引っ張ってHTML出力
アップロード前にはサムネイル表示させたりしたいってなると一時フォルダ的なのが必要だったり
途中でセッション切った場合の一時ファイルどうするの?とかもあるし。

うむ。取り敢えず、PHPの本を読み進めるかpythonたまには触るかのどちらかになるであろう←



2019-07-16 : バックアップ大事・・・OTL

備忘録のタグが収まったので次は、投稿フォームを作ろうかと。
その前にデータベースのコマンド復習とPODでの書き込み処理を
整理せなあかんと思って、データベースのコマンドピックアップしたら想像以上に
かさばる内容だった件・・・。データベース自体の基本操作ほとんどあるんじゃね?
って思うぐらい。
まだ講義入ってないけど、せっかくだからDBのページに貼った。
データベース・SQL訓練記録
まーいちいちググったり本開いたりしなくても、Ctrl+Fですぐ引き出せるのは楽。
復習も兼ねてやってたから相当時間とられた。

で、取り敢えず投稿用フォームを作って、整形は後からでいいから機能させる事を第一に考えて作る。要は雑←


はい、フォーム完成。
ついでにデータベースも完成
CREATE DATABASE データベース名 CHARACTER SET utf8;

ほんで内部処理で、ポストデータをPHP(PDO)に渡して、PDO経由でデータベースへ保存、と。

ここまでは完璧だった!!(力量の全力って意味で)
が、しかしこの後記事のだけじゃなくて削除と編集このままやるかと言う感じで先走った。
レコードの削除は問題なく、
prepare("DELETE FROM blog WHERE id= :id");

入力された記事IDをWHEREで条件付けしてピンポイントで削除できた。

事件は次の工程で起きた。
UPDATEコマンドでレコード内容の更新を試みたのだがその際WHERE(条件)を付け忘れ
whileでループ処理・・・・。
すなわち、更新がすべてのレコードに対して行われ、同じ内容での更新(上書き)をループ

データベースのバックアップもせずにそのまま次の工程入るからこういう事に。。。教訓になった←

ちなみに、UPDATE文での更新処理でWHEREが上手く動いてくれず、更新プログラムはまだ戦ってる最中なり。

データベースで変なループかけると全データがこうなるよってのを視覚的に言うと
僕の場合は↓こうなった。

記事ページ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15