挫折からの回帰

1度プログラミング学習から逃げた者がどこまでやれるかもう一度挑戦するブログ

コンテンツ一覧表示機能実装はできたけど・・

f:id:iolwloi:20191016233836p:plain

こんにちは。

文系出身でも・未経験でも・プロのプログラマーを目指すブログ 略して「プロプロ」

あんまん(@aaii0123)です。

 

一気に寒くなって震えております、あんまんです。

暑いのも苦手ですが、寒いのも大の苦手で今朝は寒くて目が覚めました・・笑

 

そろそろ厚手の布団をださなきゃかなぁ、と思うのですが

これからまだまだ寒くなるのに、もう出しちゃうと

本格的に冬になった時に辛い思いをするんじゃないかと躊躇しています。

 

これくらいの寒さの時って防寒はどれくらいするのが正解なんだろう・・

・・なんて、死ぬほどどうでもいい悩みw

 

ですが、みなさん風邪にはくれぐれもお気をつけくださいね。

 

さて、今日の進捗です。

 取り組んだこと

コンテンツの登録機能に続いて、今日はコンテンツ一覧表示機能を実装しました。

DBに登録されている情報の中から、必要な情報をとってきて表示するわけですが

今回、はじめてSQL文の外部結合の構文を使うことに。

 

1つのテーブルの情報をとってくるときよりも、当然文が長くなるのではじめは戸惑いましたが

どうにか2つのテーブルの情報をとってくることに成功しました!

 

しかし、どうにか表示させたい情報は画面に出せたけど、

レイアウトがグチャグチャでなんとも微妙。

 

foreach文で回して情報を表示させているせいなのか、

思った通りにCSSが適用されなくて絶賛四苦八苦中・・

 

ツイッターみたいに、新規投稿を上から順に縦表示にしたいだけなのに、

投稿写真やらユーザー名やらをうまい具合に配置できなくて難しい・・

 

ここはもう少し時間がかかりそうです><

SQLの内部結合と外部結合の違い

今回、2つのテーブルの情報をとってくるのに外部結合を使いましたが、

(ご存知の通り)内部結合でとってくる方法もあります。

ここで、内部結合と外部結合の違いを簡単にまとめてみました。

 

ー内部結合の特徴

・2つのテーブルで一致したカラムのみ取得(どちらかにないカラムは表示されない)

・記載方法(1通り)

SELECT * FROM [テーブル名1] INNER JOIN [テーブル名2] ON [結合条件]

 

ー外部結合の特徴

・どちらかのテーブルにしかないカラム情報も含めて全て取得

・記載方法(2通り)

SELECT * FROM [テーブル名1] LEFT OUTER JOIN [テーブル名2] ON [結合条件]

SELECT * FROM [テーブル名1] RIGHT OUTER JOIN [テーブル名2] ON [結合条件]

まとめ

今日は、PHPSQLよりもforeach文のあるHTML CSSの指定の方に手間取りました。

早くなんとかしたいけど、どうしたものか・・

解決の見通しがたたなくて不安ですが、色々試して調整します!

【プログラミング学習】IT未経験者がウェブカツに入部してみた【2ヶ月半経過】

f:id:iolwloi:20191015114036p:plain

 こんにちは。

文系出身でも・未経験でも・プロのプログラマーを目指すブログ

略して「プロプロ」

あんまん(@aaii0123)です。

 

このブログでは、webとは全く関係ない業界から

プロのプログラマーへの転身を目指してプログラミング学習中の20代女が

少しずつ成長していく様子を定期的に報告しております!

 

さて、オンラインのプログラミングスクール

ウェブカツ‼︎」に女性割引で入部してから

ついに、2ヶ月半が経過しました。

  

この、約2週間のプログラミング学習進捗状況についてまとめます。

前回の学習進捗報告はこちら↓↓ 

 

www.anman-blog.tokyo

 

 入部後、2ヶ月半の学習進捗

ウェブカツ本科の学習進捗

それでは、ウェブカツ‼︎本入部後、

2ヶ月強たった現時点でのプログラミング学習進捗です。

 

webサービス部 3周目 Lesson1〜19 まで 

 

 

相変わらずwebサービス部に四苦八苦しています笑

かれこれ2ヶ月近くずっとwebサービス部をやっているna・・

 

が、一方で3周目に突入し、だいぶコードの意味を噛み砕いて理解できるようになったと感じる面も。

 

3周目は処理の流れをメモで順番に書き出して、流れや処理を確認しながらコードを写経するという方法にしてみたのですが、

このやり方が自分的にとてもよかったので、2周目からこのやり方を指定ればとちょっと後悔。

 

最初の頃は、ついていくのに必死で

1周目はとにかく動画を視聴して、全体像を把握する

2周目はとにかく手を動かしてコードを写経する

という感じで、なんとなく学習を進めている気になってしまっていました。

 

今振り返ったら、先に進めることが目的になってしまって、

先に進めている感を感じたかったのかもしれません。

 

なぜ、こんなことを懺悔し始めたかというと、

正直1周目の動画視聴なんてほぼ意味なかったなと、思うからです。

(今だから言えるけど)

 

もし、これからwebサービス部に入ろうとしているかたがいたら、

1周目からとりあえず手を動かしてみることをオススメします!

 

webサービス部はwebサービス部以前の部活に比べて、動画の情報量が格段に上がるので

とりあえず最初はみることに専念しようとなってしまいがちですが

動画をみただけでは正直理解できません。

コードは手を動かすことでしか理解できない、と今なら思います。

 

もし、時間がたっぷりあって、いくらでも時間をかけられるとしても、

同じ部活にずっと時間をかけるのは精神的にもしんどくなってきます。

 

同じ動画を何回繰り返しみてもいいから、

早い段階でひとまず手を動かしてみるのが結局は一番の近道になるよと、

昔の自分にも教えてあげたい笑

自作サービスの進捗

webサービス部の3周目に並行して、ついに自作サービスに着手しました。

この2週間実装した機能はこんな感じです。

・ユーザー登録機能

・ログイン機能

・ログアウト機能

・退会機能

・プロフィール編集機能

・パスワード変更機能

・パスワードリマインダー機能

・コンテンツ登録機能

これで、だいたい全体の3分の2程度といったところでしょうか。

 

最初のうちは、試しても試しても出てくるエラーに疲れ切っていたのですが(笑)

この2週間を経てエラーに耐性がついたのか、解決できるスピードも上がってきたと感じます。

 

エラーが出るということは何かがうまくいっていないということなので、

エラーが出るたびにうんざりしていた最初の頃に比べて、今は

エラーは出て当たり前

という気持ちになりました。

 

大切なのはエラーを出さないことではなくて、エラーを読み解きながらいかにコードを直していくかということ

というように考え方も変わり、だいぶ楽になった気がします。

 

入部以来、いま一番メンタルがやばい・・!!笑

ところで、いま、入部以来一番メンタルがやばいです笑

 

先ほど、「同じ部活にずっと時間をかけるのは精神的にもしんどくなってきます。」と書きましたが、それはまさに今の私の状態・・

 

他の生徒さんのツイートを見ると2週間程度で自作サービスを完成させている方が多いように感じるのですが、

一方で、webサービス部3周目と並行しながら進めているとはいえ、

2週間経っても全体の3分の2程度しか進んでいない自分の進捗にかなり焦りを感じています。

 

webサービス部が終わったら、転職活動もぼちぼち始めようと思っていたので

他の方の内定報告を尻目に、自作サービスに時間をかけてることも焦りの原因の1つかと・・

 

これまで、割と順調に進めることができていたおかげか、

他の部員の方の進捗ツイートもあまり気にならなかったのですが、

ここにきて、目にするのがかなりしんどいと感じています。

 

他の人と比べないを意識していたつもりだったけど、自分で思っている以上に人との比較が気になっていたのかも。

 

自作サービスに着手した時はあまり焦らずに進めようと思っていたのですが、

今はとりあえず完成させて一区切りつけたい、というように気持ちが変化しました。

 

 

全体の3分の2は進んでいるのだから、あと1週間あればいったん完成させられると信じて

今は辛くても踏ん張りたいと思います(涙)

プログラミング学習以外

ブログによる毎日の学習記録を始めました

ウェブカツ女性割引のノルマである月2回のブログ更新とは別に

毎日の学習進捗をブログでまとめるようになりました。

 

たまに2日分をまとめて投稿する日もありますが、

この2週間ほぼ毎日続けています。

 

最初は文章がなかなか思いつかず、結構大変だったのですが

2週間継続したおかげか、文章を書くのもだいぶ苦でなくなってきました。

 

それに、ブログにまとめることで、その日に勉強したことが整理される効果があるなとも感じます。

 

寝る前の30分程度でパパッと書いているのでブログとしてもクオリティーは正直低いですが、

できる限り続けようと思っています。

「僕は君たちに武器を配りたい」読んでいます

2週間前に「金持ち父さん 貧乏父さん」を読み終わって、

今は「僕は君たちに武器を配りたい」を読み進めています。

 

まだ読み途中ですが、8割読んだなかで一番刺さったのが

「世の中の多くの”残念な人”は「自分で調べる一手間」をかけようとしない」

という一節。

 

今の自分はまさに”残念な人”で、

面倒だったり、はやく結果を出したいがために一手間をかけることを惜しんでいたなと反省。

よく、「自分の頭で考えることが大切」というけれど、自分の頭で考えるということはまず、自分で情報を集めることだよなと、感じました。

 

移動の途中などの隙間時間に読んでいるので、ゆっくりではありますが、

最後まできちんと読み進めようと思います。

 

前回設定した目標を達成できたのか・・?

さて、ここで、

前回の投稿で今月末までの目標として設定していた項目を

達成できたのか振り返ります。

  • WEBサービス部3周目に取り組む →絶賛取り組み中
  • 並行して自作サービスに取り組む →絶賛取り組み中
  • HTML/CSSの自習に取り組む →未達
  • FPの勉強を緩く継続する →サボり気味
  • 僕は君たちに武器を配りたいを読み終わる →読み途中

なかなか微妙な結果に・・^^;

 

正直この2週間はwebサービス部で必死でそれ以外のことに手をつけている余裕がなかったなぁ。

早いところ、webサービス部に片をつけて今の気分を一新したいです・・!

次の2週間の目標

次なる2週間の目標としては、こんなことを考えています。

  • webサービス部3周目完走
  • 自作サービス完成
  • オブジェクト志向部着手
  • 僕は君たちに武器を配りたいを読み終わる

 

次の2週間で、今度はどれくらい成長できているか楽しみです^^ 

 

 

長くなりましたが、今回の報告は以上です。

次回の報告で、また少しでも成長している部分がありますように・・

 

ではでは!

 

ウェブカツ‼︎がどんなスクールか気になる方はこちら↓↓

webukatu.com

コンテンツ登録機能の実装完了

f:id:iolwloi:20191015103815p:plain

こんにちは。

文系出身でも・未経験でも・プロのプログラマーを目指すブログ 略して「プロプロ」

あんまん(@aaii0123)です。

 

最近、焦りが激しくメンタル的にかなりきつい、ワタクシです。

自分でもなんでこんなに焦ってるんだろうって不思議なのですが(笑)

 

そんなこともあり、15日目はブログをお休みして

寝る前にゆっくりお風呂に浸って、暗めにした部屋で好きな音楽をかけて夜を過ごしました。

 

ここ最近の焦りの原因は、

プログラミングの勉強をはじめてもうすぐ3ヶ月になるのですが、

今までで一番、進捗が苦戦していることと

ツイッターで見かける他の初学者の方の進捗が気になってしまっているせいかなと・・

 

落ち込んでいるときは、他人との比較ではなく昨日の自分と比較する

というのは自分でも気をつけているつもりなのですが、

つい、他の人と比べてしまってよくないな、と思います。

 

作成中のwebサービスも、足りない機能はだいぶ少なくなってきたので

あと1週間はとりあえず頑張るつもりで、なんとかめげずに頑張りたいです。

 

さて、この2日間の進捗を簡単にまとめます。

 取り組んだこと

こんなことに取り組みました!

・コンテンツ登録機能実装

・コンテンツ一覧機能実装途中

 

コンテンツ登録機能は4、5時間で実装することができましたが、

エラーも沢山でてなかなか大変でした。

 

特に画像のアップロードの機能は、ここまで使ってこなかった関数を沢山使ったので

不慣れ感が我ながらすごかったです・・笑

 

画像のアップロード用ファイルを指定したのに実際に作り忘れていてエラーになったり

関数のスペルが間違っていたり、色々試して解消できたと思ったら

今度はDBに登録されていない、なんてことを繰り返しました。

 

でも、例えばDBに登録されていないなら、SQL文がおかしいのかなとか

DBのカラム名とあっていないのかなとか、

うまくいかない原因の可能性を何通りか思い浮かべて

順番に確認していくということは、最初に比べてだいぶできるようになったのかなと思います。

 

エラーは沢山でましたが、対処の仕方に慣れてきたので

最初の頃にエラー祭りでヘトヘトになった頃に比べると成長を感じます。

 

ググったこと

image_type_to_extension

画像形式からファイルの拡張子を取得する

 

move_uploaded_file

アップロードされたファイルの保存場所を変更する際に使用する関数

アップロードされたファイルは、/tmpなどの一時フォルダに保存されるが、

一定の時間が経つと一時フォルダの中身が削除されてしまうので、
勝手に削除されないない専用のディレクトリへ移動させるのに使用

 

chmod

ファイル or ディレクトリに対する権限を設定するコマンド。

ユーザー区分ごとに権限を設定できる。

https://qiita.com/ntkgcj/items/6450e25c5564ccaa1b95

まとめ

コンテンツの登録機能の実装ができたので、今度はコンテンツの一覧表示に挑戦です!

ここが一番時間がかかりそうな予感がしていますが、これでまた成長できると信じて頑張ります!!

POSTとGETの違いを簡単に調べてみた

f:id:iolwloi:20191012222306p:plain

こんにちは。

文系出身でも・未経験でも・プロのプログラマーを目指すブログ 略して「プロプロ」

あんまん(@aaii0123)です。

 

自作webサービスの作成に着手して2週間が経過しました。

進捗としては全体の3分の2程度まできたかなというところです。

 

当初は完成を焦らず、じっくりPHPを理解しようと考えていたので

進捗速度はあまり気にかけていなかったのですが、

ちょっと時間をかけすぎていたかなと反省中。

 

もう少し短期集中的に取り組めれば、中だるみすることなく完成させられたかなと

今更ながら少し後悔しています。

 

初学者の難しいところは勉強内容そのものに加えて、

勉強方法も同時に模索しなければならないところではないでしょうか。

 

もちろん勉強方法に100%の正解はありませんが、

だからこそ、自分にあった方法や段取りを考えるのは初めのうちは難しいなと感じます。

 

webサービス自体はまだ作成の途中ですが、今回取り組んだ学びとして、

今後は自分がどれくらいまでの期間なら集中力を保てるのかなどを把握して

ある程度期間を区切ってアウトプットの計画を立てなければいけない、

ということが1つ挙げられるなと感じます。

 

実務に取り組む上でも、締め切りは必ずあるものなので、

今後は制作スピードにも気を配って取り組みたい・・

 

初学者がよくかかると言われている、

完全に理解しないと先に進めない病だったのかもしれません・・

 

というようなことを台風19号の激しい雨の音を聞きながら今日は考えていました。

 

かなりの大型台風ときいて覚悟はしていましたが、あまりに激しい雨風の勢いに

1日気が気ではありませんでした。

 

このブログを書いている午後10時半現在、台風の目に近づいて

少し風の勢いが和らいでいますが、まだまだ油断はできない状況。

 

このまま大事に至ることなく無事に過ごせることを祈ります。

 

さて、今日の進捗です。

 取り組んだこと

今日はこんなことに取り組みました

・HTMLとCSSで見た目の調整

・コンテンツ投稿機能の実装(途中)

 

HTMLとCSSで見た目の調整

昨日に引き続き、HTML CSSでログインページ以外のページの見た目も調整をしました。

 

bodyのコンテンツ内容が少ない場合にfooterをjQueryで固定させる支持が反映されなくてなんでだろうと思ったら、そもそもjQueryのファイルをフォルダにいれていなかったことに気が付いたり

サイドバーがなかなか狙った位置に配置できずにいたのがうまくいったり、

だいぶ納得できるものに仕上がってきました!

 

まだ実装できていない機能の画面はこれから作る必要がありますが

後でやろうと放置していた見た目が、だいぶ落ち着きスッキリ。

 

これでもう、新しい機能を実装していくしか無くなってしまったので、

集中して取り組みたいと思います(笑)

コンテンツ投稿機能の実装(途中)

そして、コンテンツ投稿機能の実装に着手しました。

これまで実装してきたログイン機能や退会機能など多くのwebサービスに共通している機能とは違い

コンテンツ投稿機能はオリジナルの要素も入っているので頑張りどころ

 

ですが、今日は見た目の調整に時間をかけて頭がだいぶ疲れた状態だったので、

少しだけ手をつけた状態で、あとは一晩寝て起きてスッキリした状態でまた取り組みたいと思います。

 

スピードアップしたいと思っているところなので、焦りもありますが

あまり自分を追い込み過ぎないのも勉強を続ける秘訣と信じて・・

POSTとGETの違いについて

さて、ここまで実装してきた機能は全てPOSTパラメータを使っていたのですが、

コンテンツ投稿機能ではGETパラメータを初めて使います。

そこで、POSTとGETの違いについて簡単に調べてみました。

 

1、そもそもGET・POSTとは

ブラウザとサーバがやり取りする際に使われるHTTP通信において定められた仕様の一一種。

GETもPOSTも、ブラウザからサーバに対してなんらかの処理を要求をする際に使われる。

 

2、それぞれの特徴

①GET

・URLにパラメータが追加される

GETを使ってサーバーに要求をした場合にはそのパラメータとキーがURLに付加される。

・文字数制限がある

URLにパラメータを付加するため、文字数制限がある。

使える文字数はブラウザの種類や設定によって異なる。

・パラメータつきのURLを保存したり共有することができる

URLでパラメータを指定することができるため、フォームを経由しなくてもサーバに対して要求をすることができる。

そのため、パラメータつきのURLを保存したり誰かと共有したりすることが簡単にできる。(POSTではこれができない)

②POST

・パラメータが見えづらい

GETとは異なり、わざわざ調べなければパラメータに指定されてものを見ることができない。そのため、他人に知られて困る情報を比較的扱いやすい。

・文字数制限がない

パラメータの送信にURLを使わないため文字数制限がない。

(プログラムやサーバの設定で制限することも可能)

 

3、GETとPOSTの使い分け

1、2をふまえて、

GETは情報を取得する際(例:検索フォームなど)に使い、

POSTは何かを新しく登録したり他人に知られては困る情報を扱う際(例:ログインフォーム)に使う。

 

参考URL

https://php-junkie.net/beginner/reserved_variables/get_post/

https://qiita.com/kanataxa/items/522efb74421255f0e0a1

 

以前「webを支える技術」も読んだのですが、「webを支える技術」は専門用語が多く

読みづらかったので、改めて自力で調べてやっと理解することができました。

だいぶweb用語にも慣れてきたのでまた「webを支える技術」も読み返さないと。

 

Find Job で求人チェック

昨日はGreenに登録したのですが、今日はFind Jobをみてみました。

(まだ登録はしていない)

Find Jobは以前、もくもく会であった人に教えてもらった求人サイトです。

 

その方は、実際にFind Jobを活用して未経験からコーダーに転職したときき、

以前からちょくちょくのぞいていたのですが

今日は、Find Jobで気になった企業のリストを簡単に作成しました。

 

Greenはまだ本格的にみていませんが、GreenよりもFind Jobの方が求人が絞りやすく企業を探しやすい印象があるかも・・

 

実際にエントリーするまで、webサービスの作成をもう少し頑張らなければいけませんが

少しずつ、気になる企業の情報を集めてイメージを掴んでいきたいなぁ・・

まとめ

機能の実装以外のことがだいぶ片付いてしまったので、

明日からはゴリゴリPHPのコードを書きたいと思います。

 

 

久々のHTML CSS

f:id:iolwloi:20191012011624p:plain


こんにちは。

文系出身でも・未経験でも・プロのプログラマーを目指すブログ 略して「プロプロ」

あんまん(@aaii0123)です。

 

台風19号が近づいていますね。

当初、ことの重大さをあまりわかっていなかったのですが

ツイッターで注意を呼びかける声や対策についてのツイートをたくさん目にし

慌てて水のストックの購入と、窓ガラスの補強をしました。

懐中電灯も買いたかったのですが、売り切れたのかもともと置いてないのか

近所のお店では見当たらず・・

 

停電しませんようにと祈りつつ、万が一停電した時は

大昔に100均で買ったロウソクでしのごうとスタンバイしています。

(無事に台風が過ぎたら今後に備えて懐中電灯も買っておこうと思います・・)

 

私は自宅にテレビがない生活をかれこれ3年以上していて、普段は全く困らないのですが

こういうときはテレビがあった方が対策方法なんかも放映されているだろうし

リアルタイムの気象情報もとれるし心強いよな、なんて思ったり

 

大きな被害が出ないことを祈りつつ、明日は大人しく自宅で勉強しようと思います。

 

さて、今日の進捗です。

 取り組んだこと

今日はこんなことに取り組みました!

・ログインページなどの見た目の調整

・パスワードリマインダーの実装

 

昨日、モチベーションの維持に悩んでいると投稿したのですが、

モチベーションの低下はPHPの作業がなかなか終わらないことにあると分析し

今日は久しぶりにHTML CSSを触りました!

 

もともと絵を描くのが趣味なので画面が出来上がっていく様子がわかりやすいHTML CSSは大好きなのですが、久しぶりに触ってみてやっぱり楽しいと再確認。

 

我ながらPHPをやっている時との集中力の差を大きく感じました笑

配色なんかを考えているときは本当にウキウキします。

 

まだページによってはCSSがおかしいところもあり、完全ではありませんが、

機能の実装のたびに目にするログインページの見た目がだいぶ完成したので

ちょっとだけモチベーションも回復しました。

 

f:id:iolwloi:20191012002928p:plain

:hoverでさらに動きをつけたいところもまだありますが、とりあえずこんな感じ。

 

現時点では特別デザインセンスがあるわけではないけど、本格的にデザインも勉強してもっともっと見た目にこだわれるようになりたいな・・

 

・・と、HTML CSSで自分のご機嫌をとり、続いてPHPでパスワードリマインダーの実装。

 

大きなつまずきはなく、実装することができました。

セッションの活用の仕方などだいぶ理解できるようになってきたなと思います。

 

メールを送る処理もmb_send_mail関数のこの1行であまりにも簡単にできるので

PHPは本当に便利だなぁ・・(PHPのいいところを見つけるキャンペーン笑)

 

初めは、認証キーをメールでお知らせして今度は新しいパスワードをもう一度メールでお知らせして、という流れが複雑に感じて(実際はそんなことないのですが)

ちょっと混乱したのですが、今はもう怖くありません。

mt_rand関数が動かない・・?

機能の実装自体は大きなつまずきなくできたのですが、

認証キーの生成が最初うまくいかなかったので、覚えで残しておきます。

 

認証キーは0~9の数字とa~zまでのアルファベット計61文字のなかから

ランダムに8字をつなぎ合わせて作成します。

この流れは覚えていたので、for文を使って以下のようにコードを書きました。

 

f:id:iolwloi:20191012004937p:plain

構文エラーも500エラーも出ず、一安心と思って挙動チェックしていたのですが、

php.logで発行された認証キーを確認すると8文字になっていてほしいのに、

なんと1文字だけ・・

 

書いたコードは、61文字の英数字からランダムにピックアップする処理を8回繰り返す内容にちゃんとなっているはずなのになんで!?

構文自体もシンプルだしエラーも出てないし何がいけないんだろう・・

(皆さんはパッとみて何が間違っているかわかりますか?)

 

そう、よく見ると文字を連結するための「.」が向けていたんです。

× $str = $chars[mt_rand(0,61)];

○ $str .=$chars[mt_rand(0,61)];

 

こんな小さな「.」一個で思い通りの動きにならなくなってしまうPHP奥深い・・

PHPのいいところを探すキャンペーン笑)

 

最初なかなか気づけず時間をかけてしまいましたが、発見したらなんてことはなく。

書き直したら無事に認証キーが8文字で発行されるようになりました。

Greenに登録しました

開発とは関係ありませんでしたが、IT未経験の方の転職エピソードでよく見かける転職サイト「Green」に登録してみました。

こちらも、モチベーション回復の施策の1つです。

 

今作っているwebサービスが完成するまでは企業を探すのは早いかなと思っていたのですが(求人の掲載期間なんかもあるし)

どんな会社があるのか少しみただけでもワクワクしてきました。

 

転職経験がないので、面接など具体的に考えるとかなり緊張しますが

勉強の合間にどんな企業があるのかみてみるのはいい刺激になりそうなので

ぼちぼち企業研究もしていきたいなと思います。

まとめ

今日はHTML CSS で見た目を少しいじったので、PHPに行き詰まっている自分には

いい気分転換になりました。

webサービスの制作にはもっとじっくり時間をかけてもいいかなと思っていましたが、やはりPHPに時間をかけすぎるのは自分にとって危険な気がするので、

ペースアップして、ひとまず完成までこぎつけたいと思います!!

モチベーション維持が今一番の課題

f:id:iolwloi:20191010233747p:plain



こんにちは。

文系出身でも・未経験でも・プロのプログラマーを目指すブログ 略して「プロプロ」

あんまん(@aaii0123)です。

 

今日は病院へ行ったり、なんやかんやであまり時間がとれず、

ここ最近で一番短い勉強時間となってしまいました。

 

実は最近モチベーションの低下で悩んでいます。

さぁやるぞ!と机には向かうのですが、コードを書き始めるまでに結構な決意というか労力を必要とするこの頃・・

 

バックエンドはHTMLやCSSのように

目に見えるわかりやすい成果がすぐにでないのが原因かなと思っています。

 

最初は、あまり焦らずにじっくり取り組もうと思っていたのですが、

自分の場合、あまりPHPに時間をかけると疲弊していきそうなので、

そろそろペースアップしてとりあえず一旦完成させたいかも。

 

もしかしたら、自分はバックエンドをゴリゴリやりたいタイプではないのかもという気持ちも出てきました(いかんいかん)

 

今までは、ツイッターで見かける他の初学者の方の進捗やアウトプットをみて

モチベーションを維持していたのですが、

自分のアウトプットの制作に時間がかかって、ちょっとうんざり(笑)している時って

他の皆さんどうやってモチベーションを維持されているでしょう・・

 

いかに自分の機嫌をとりつつ学習を続けるのかが今一番の課題と感じています。

 

さて、今日はあまり進んでいませんが今日の進捗です。

 取り組んだこと

今日はこんなことに取り組みました

・メモを作成しながらのパスワードリマインダー機能実装の写経

パスワード変更機能に続いて、パスワードリマインダーの機能に入りました。

セッションに認証キーや入力したメールアドレスなどの情報を渡して処理を行うので

セッションを使ういい練習になりそう。

 

実は最初、$_POSTと$_SESSIONの使いどころの違いがあまりわかっていなかったのですが(初心者にも程がある笑)

$_POSTはユーザーによって入力された情報

$_SESSIONはブラウザ側で保持している情報

ということが流石にわかってきました(笑)

 

そういうことがわかって小さな迷いが経るごとにコードを描くスピードも上がっていくなと感じます。

 

そんなことを考えつつ、パスワードリマインダーの機能も処理の流れをメモにまとめました。

作成したメモがこちら

パスワードリマインダー機能実装の流れ

 

Funcntion.php

sessionを1回だけ取得できる(一回取得したら消す)関数

 セッションが空でなければ変数にセッションを入れ、セッションを初期化する

 その後、セッションを入れた変数を返す

 

・認証キー生成関数

変数にabcdefghijklmnopqrstuvwxyzABCDEFGHIJLKMNOPQRSTUVWXYZ012345678961文字を格納

変数$strを定義し、For文で61文字の文字列をランダムで8文字並べる

8文字のランダムな文字列を返す

・固定長チェック関数

文字列の長さが8文字でなかったら、エラーメッセージを格納する

 

passRemindSend.php

共通変数・関数の読込み

POST送信があれば変数にPOST情報を格納

未入力チェック

エラーメッセージがなければメールの形式チェック・最大文字数チェック

再度エラーメッセージがなければDBに接続

 入力されたメールアドレスが一致し、デリートフラグが0のusersテーブルの絡むの数を取得

  クエリを実行し、クエリの結果の値を取得

 クエリ実行が成功し、かつクエリの結果の値が入っていればセッションにサクセスメッセージを格納

   認証キー生成関数を実行し変数に値を格納

   メールを送信する

      from変数に送信元メールアドレスを入れる

    to変数にユーザー情報のメールアドレスを入れる

  subject変数にメールタイトルを入れる

  comment変数にヒアドキュメントを使ってメール本文を入れる

   認証に必要な情報(認証キー・メールアドレス・認証の有効期限時間(現在時刻の30分後))をセッションにそれぞれ入れる

   認証キー入力ページへ

失敗していたらエラーメッセージを格納

 

PassRemindRecieve.php

共通関数・変数の読込み

セッションに認証キーが格納されているか確認し、なければ認証キー送信ページへ遷移させる

POST送信されていれば、変数に認証キーを格納

未入力チェック

エラーメッセージが空であれば認証キーの固定長・半角チェックを行う

再度エラーメッセージのチェック

 入力された認証キーとセッションの認証キーが異なっていたらエラーメッセージを格納

 現在時刻がセッションの有効期限時間を超えていたらエラーメッセージを格納

再度エラーメッセージがないか確認し、パスワードを生成

DBへ接続

クエリが成功していればメールを送信

セッションを1度削除し、セッションにサクセスメッセージを格納

ログインページへ遷移

失敗していたらエラーメッセージを格納

 

明日はこのメモを参考に、実際に自力でパスワードリマインダー機能の実装にチャレンジします。

そろそろ、メモの書き方というかまとめかたも

あとで自分で見返したときにもっとわかりやすいように工夫したいな。

 

まとめ

今日はちょっと愚痴っぽくなってしまいました・・汗

あとで読み返したときに、こんな時期もあったなと笑えるように今はなんとか辛抱したいところ

どうすれば自分のやる気スイッチがまた入るのか考えながらお風呂にでも浸かってゆっくりしたいと思います。 

 

 

パスワード変更機能実装〜初めてのエラーに遭遇〜

f:id:iolwloi:20191009232009p:plain

こんにちは。

文系出身でも・未経験でも・プロのプログラマーを目指すブログ 略して「プロプロ」

あんまん(@aaii0123)です。

 

昨晩は、漠然とした不安に苛まれて鬱々としていたのですが、

一晩寝たらスッキリしました!!

 

ここ最近、ついついツイッターを見てしまい、

素晴らしいアウトプットをされてる方や就活して内定獲得した方のツイート見て落ち込んでしまっていたのですが、

今日はツイッター見ないと決めたら気持ちも軽くなったし勉強にも集中できたので、

SNSは意識的に制限しないとダメだなと反省・・笑

 

周りの人と比較するんじゃなくて、昨日の自分と比較するように意識したいと思います!

 

さて、今日の進捗です。

取り組んだこと

・プロフィール編集機能実装

 昨日、ダラダラと実装の流れをメモしたプロフィール編集機能の実装!

 

結果的にうまくいったのですが、今回初めて遭遇したエラーもあり、

色々試していくうちにあっという間に時間が経ってしまいました。

初めて遭遇したエラー

ここまで2〜3回正解コードを写経したり、実際にいくつか機能を実装したりして

だいぶエラーも見慣れてきたのですが

今日は初めて遭遇したエラーがあったので、覚えで残しておこうと思います。

 

1.遭遇したエラー

unexpected '' (T_ENCAPSED_AND_WHITESPACE), expecting '-' or identifier (T_STRING) or variable (T_VARIABLE) or number (T_NUM_STRING)

 

結構長いエラーだったので初め見たときにはギョッとしたのですが、

どうやらどこかに予期せぬ記号か数値が入ってしまっているという内容のよう・・

 

2.エラーが出た場所

エラーが出たのは、メール送信関数を実行後にもし失敗していたらエラーが表示されるようにエラーメッセージを格納する文を書いたところでした(波線の部分・78行目)

f:id:iolwloi:20191009235358p:plain

だけど、この文自体はシンプルだし誤字や脱字もない・・

どんなに前後の文も含めて確認しても怪しそうなところが見つからず久々に頭を抱えました

 

3.試しにエラーが出ている文を消してみた

そこで、試しにエラーが出ているこの一文を消してみることに。

しかし、なんと数行下の119行目に全く同じエラーが出てしまいました!

f:id:iolwloi:20191009235856p:plain

先ほどエラーが出た部分と何の関係もなさそうに見えるうえ、

こちらの文の前後にも書き間違いなどが見つかないのに同じエラーが出たため

ますます混乱・・

 

4.判明した原因

色々とググっているうちに、どうやらエラーが出た箇所の数行上にある

ヒアドキュメントが悪さをしているようだということがわかりました。

 

私は、はじめヒアドキュメントをこんな風にインデントした状態で記載していました。

f:id:iolwloi:20191010000453p:plain

しかし、こちらの質問(PHP - phpのエラーが解決できません。|teratail)の解答欄に

ヒアドキュメントの末尾は行頭でなければなりません。

という一文を発見!

 

もしやと思い、下記のようにインデントをつめて書き直しました。

f:id:iolwloi:20191010000828p:plain

すると、先ほどのエラーが表示されなくなり無事に解決することができました。

 

ヒアドキュメントは68行目、エラーが出たのは78行目・119行目だったので

なぜこんなに離れた場所にエラーが出たのか正直まだ謎ですが、

teratail上の質問に今回は救われました・・

(質問してくださった方と回答してくださった方グッジョブ)

その他

その他にも、数日前に作成した半角英数字のバリデーションがうまくいかなくなったり

(こちらは正規表現を変更することで解決)

変更後のパスワード登録の際にハッシュ化するのを忘れて再ログインしようとした際に

ログインできなくなったり

(ログイン時のパスワードの照合はハッシュ化したものとする仕様にしていたので)

ということがありました。

 

エラーが出ると、一瞬投げ出したい気持ちになりますが

辛抱強く色々と試すことで何とかできることを体感として学べているような気もします。

学んだこと

emptyで判定できるのは1個ずつ(まとめるの×

○!empty($to) && !empty($subject) && !empty ($comment)

×!empty($to,$subject,$comment)

 

・ヒアドキュメントの末尾は文頭にしないと予期せぬエラーが表示される

表示されたエラー:unexpected '' (T_ENCAPSED_AND_WHITESPACE), expecting '-' or identifier (T_STRING) or variable (T_VARIABLE) or number (T_NUM_STRING)

 

・パスワードをデータベースに登録する際は、hash化を忘れない

ググったこと

mb_send_mail 関数

mb_send_mail(送信先, 題名, 本文, ヘッダ);

送信先には送信先のメールアドレスを文字列で指定する。

ヘッダにはメールヘッダに追加する文字列を指定。このメールヘッダに送信元のメールアドレスなどを指定する。メールヘッダーに指定できる文字列は以下の通り。

From: 送信元メールアドレス

Reply-to: 送信元メールアドレス

CC: CCで送信する送信アドレス

BCC: BCCで送信するアドレス

参考URL:PHPでメール送信を行う方法:mb_send_mail() | UX MILK

まとめ

結構疲弊したこともあり、雑なまとめかたをしてしまいましたが(いつものこと?) 

こうやって、その日の発見や学んだことを少しずつでも残していくことに意味があると信じて

明日も頑張ります!!