Torihaji's Growth Diary

Little by little, no hurry.

学習日記 20230911(夜更新予定)

6:27 2023/09/11
おはようございます。  
今日の朝も、少しだけやりましょう。  

投稿を編集するパターンにはどういうものがあるだろうか。  
1.画像はそのまま、タイトルもしくはコンテンツのみ修正  
2.画像を削除  
3.画像追加  
4.画像削除、画像追加  
2-4にはいろいろパターンがあるけど、主なものとしてはこのくらい  
もちろん、2-4しながら、テキストを編集というのもあるが、  
テキスト編集のバリデーションは簡単なので、  
あえて無視。  

あとは2-4をどういう順番でバリデーションしていくか。  

削除するときは、  
削除ボックスにチェックがあるか、  
画像枚数合計チェック  
してから削除する。  

追加するときは、  
$_FILES['image']['name']とかがあるか。  
あれば、$_FILESを値があるところのみ抽出して、再作成。  
件数を確認して、画像枚数合計チェック。  
してから、追加する。    

7:01 2023/09/11  

学習日記 20230910

6:55 2023/09/10  
おはようございます。  
さあ今日です。  

画像投稿に使用するテーブルのカラムを書き換えた。  
テーブルには必ず、主キーが存在しないといけないのか。  
存在していないと怒られた。  

とりあえず、OK  

書き換えた状態で、新しくテスト投稿した結果、  
うまくいくことを確認  
よかった。まずは一安心。  
7:37 2023/09/10

11:30 2023/09/10
そのユーザが持っている投稿と、各投稿に紐づいている画像を取得する。  
やっぱりユーザidあった方がいいんじゃないの。

12:25 2023/09/10

16:50 2023/09/10
まずは、DBのカラムをいろいろいじったので、記事投稿機能から完成させよう  

投稿機能はおそらくOK  
次は、そのユーザの各投稿が所有している画像を持ってくる必要がある。  
どういう処理がいいのだろうか。  

まずプロフィールに行くと、  
ユーザidで投稿テーブルをひっかけるから、  
それに紐づく、記事idも持ってこれる。  


んーー。なかなかまとまらんな。  
今困っているのは、プロフィール画面に表示する画像をどうやって持ってくるか問題。  
プロフィールに遷移する。  
->ユーザの情報をもらってくる。  
->その情報を元に2つの配列をDBから取得してきたものを元に作成する。  
->1つは記事とユーザをjoinしたもの->こっちはできてる。  
->1つは記事と画像をjoinしたもの。->こっちができてない。  
なぜ。  
ああ、記事と画像をくっつけたものをさらにその表示されてる、ユーザのidでwhereかければいいのか。  
やってみるか。  

ビンゴ。  
できた。  
これなら確かに、いたるところにユーザのidをテーブルに仕込まなくてもいいね。  
今知ったけど、SQLのSELECTで持ってくるカラム名の中に  
入ってないカラム名でwhereかけても引っかかるんだね。  

べんきょうになりました。  

祝。  
念願のプロフィール画面、表示成功。  
だーーー。  
疲れた。  


自作のdebug関数を適当に作った。  
static手なんだっけ。  
クラスをインスタンス化しなくても、それが使える。  

public staticとなれば、
どこかでそのもとクラス.phpをincludeしとけば、
そのicludeしたファイル内で、  
classname::hogehogeができる。  

19:20 2023/09/10


20:12 2023/09/10
さっきのデバッグ関数をやろう。  
とその前に、タイピング練習でもしようか。  

これは一大事。  
タイピングもやらないと。  

さておき、本題。  
何をすればいいかわからない。  
投稿編集の機能をいじる。  
何も画像をアップロードしていない場合、どのように処理するか。  

画像を複数枚アップロードできるフォームを作成すると、  
php側($_FILES)にも、当然複数届く。  

どういうことかというと、 

array(1) {  
  ["up_image"]=>  
  array(6) {  
    ["name"]=>  
    array(3) {  
      [0]=>  
      string(0) ""  
      [1]=>  
      string(0) ""  
      [2]=>  
      string(0) ""  
・・・  

とくる。  

ファイルがアップロードされたフォームにのみ取り出して、  
$_FILESを新しい配列に作り直さないとダメそう。  

なんか、このフォームからアップロードされていたら、みたいな  
if文とかphpの関数はないのかね。  

ひとまず、投稿編集機能以外はいったんできたのかな。  

自分は何がしたい。  
その言語化をまずしよう。  

というかやりたい処理を他で書いていた。  
これをそのまま流用できるのでは。  
やってみるか。  

たぶん行ける。これで。  
明日は、画像を入れるところからか。  
差し替えをやろう。    
今日はこれで終了。  
23:01 2023/09/10  

学習日記 20230909

6:47 2023/09/09
おはようございます。  
さて、今日は、画像編集の続きからやりましょうか。  
昨日は削除のところまではできたので、今日は投稿の差し替えをやろうか。  

まずやるべきことは、input画像 formを 3つ作る。  
それを$FILESでもらってきたとき、複数の$FILESはどうなっているのかを調べる。  
それによって、$FILESから取得する処理を考える。  
おっと、その前に、実際にテーブルへアップロードする前に  
確認画面を表示させないと。  
と、またその前に、  
jqueryでやるんだった。  
ためしにやってみよう。  
そこまでをまずは、やろう。  
スタート!!  

jquerycdn使い方はどうだっけ。  
進むと思っていたのに躓いた。  
くそ。  

jsのパスがあっていなかった。  
cyberduck上は、jsフォルダ直下にいると思っていたのに、  
同階層にいやがった。  
そらむりだ。  
だー、くそ。こんなことで時間を無駄にした。  
もう。

もう何回目だ。  
一旦機能面を実装しよう。  
見た目に走ると、きりがない。  

まずは投稿の差し替え機能!!  
それをやる!!  
POSTさせて、確認画面表示させずに、もうDBに挿入させよう。  

復習もかねて。  
htmlの input="file" name="image"において、画像をアップロードした場合、  
php側ではスーパーグローバル変数$_FILES['image']  
に格納される(実物はサーバのtmpフォルダ)。    
しかし、複数アップロードした場合は、  name="image"と配列にしないと、  
$_FILESには最後に投稿した1枚分のデータしか入らないので注意。  
name="image
" にすると  
$_FILES['image']['name']の下に  
アップロードした枚数分、データが格納される。  

一旦、午前の部終了。
9:02 2023/09/09

 

15:00 2023/09/09
午後の部開始。
まずは$_FILES問題。  
値を入れていなくても、POSTすれば、空要素の配列が行ってしまう問題。  
ファイルをアップロードしなければ、 nullになると思っていた。  

どう判断しようか。  
空要素が入っている。  
値が入っているインデックスまでcountするような処理を入れる。  

まずPOSTされてきた空要素含む$FILESを加工する。  
空要素でない、配列のみを取り出す処理を加える。  
無加工の$FILESは、input要素のname属性で記述した値をキーにもつ  
連想配列である。  その連想配列1の中には、 tmpnameやname、
などさらに5つのキーを持つ、配列2が格納されている。  
今回は2回foreachをかませて、  
配列2の各値が空要素でなかったら、  
新しく作った配列に追加する、という方針でいこう。  
その際、新しく作った配列に使用するキー名は  
$FILESと同じものを使用する。  

キー名がerrorのところだけ、ファイルがアップロードされていない、というエラーコードが格納されて、  
期待とは逆の挙動を示してしまう。  

アップロードしないフォームがあった場合、空要素を含む$FILESとなるので  
countしても実際の投稿件数がわからない。  
そのため、空要素を除いた新しい配列を作成する処理を加える。  
ただ$_FILES['up_image']['error']のみエラーコードの値(4)がセットされ、  
期待する挙動を示さないので、その箇所だけ工夫する。  

これで、
画像合計 = 追加or差し替える投稿件数 - 削除する件数 が 0より大きく、投稿上限より低ければいい。  
嘘。現在の投稿が持っている画像件数を考慮するのを忘れていた。  


うまくいった。  
これをクリアしたら、編集処理に進めるようにしよう。  

一旦、終了。夜。  
18:39 2023/09/09

20:14 2023/09/09  
じゃあ本日最後の部。  
sprintfの書式を忘れた。  
sprintf(string $format, 当てはめるもの)  

ユーザはどういう行動をとるか。  
1.タイトル、コンテンツのみ修正。(NO$_FILES)  
2.1+画像削除のみ(NO$_FILES)  
3.1+画像追加のみ($_FILES)  

まあ、いいや、まず動くものを作ろう。    

とりあえず、$_SESSIONに入れたいものを格納できた。  

くっそ。行けると思ったのに、詰まったな。  

22:27 2023/09/09  

 

学習日記 20230908

15:27 2023/09/08
引き続き、画像編集機能。  
よくわからないけど、ノリでとりあえず書いてみよう。  
チェックボックスを用意して、
画像 ・・・画像・・・画像  
■・・・・・■・・・・・■  
みたいな形。
<input type="checkbox name="**" value=1><img src="***">みたいな形で行けんかね。
input を 配列で送る?みたいなやり方はどうするのだろうか。  

なんかそれっぽいのができた。  
後はここからどうしようか。  

とりあえず、チェック入れたものを削除できる仕組みを作ろう。  
チェック入れたものの番号をPOSTさせて、受け取る。  
これは画像の配列番号と対応させている。   
画像は配列でそれぞれファイルパスを格納させている。  

もし、POSTされたものがあったら、  

いや、やっぱりvalueは画像のファイル名を格納させよう。  
sqlには画像のファイル名を格納させているから。
チェック入れたものの番号を格納させると、めんどくさそう。  

それを元にsqlでwhere検索をかけて、それを消すようにしよう。  

その前になんかうごかない。  
なぜだ。  
動いた。  
この削除機能ができたら、いったん休憩しよう。  
DELETEの構文はなんだっけか。  
DELETE FROM [テーブル名] WHERE [条件];

よし、とりあえず、選択したものだけ、削除はできたぞー。  

今思いついている問題。  
1投稿につけられる画像は3枚までという制約をもともとあるものと新規挿入でどう考えるか。  
画像を全部削除しまってOKしたらどうなるか。  
夕食。  


画像を input="file"にして、 phpで$_FILESを見てみたけど、  
実際にsubmitされるまで、どこで保持しているのだろうか。  
送信前にファイル名ではなくて、送信予定の画像を見たいのだけど.  

横道にそれるソレル。  
投稿削除用のフォームも作ってしまった。  
自分はいろんなところに目が行きがちなんですね。  
作りたいのは、

22:48 2023/09/08
授業終了。  
んーと、画像の編集うんぬんかんぬんの方針について。  
まず、controlerの時点で sessionに記事の情報を格納する。  
削除は今のチェックボックス方式でOK  
画像を差し替えるときは、  
一旦、画像を削除して入れなおす、  という方針を持つ。  
その際に、  この画像は、その投稿の中で何番目の画像か、  
という情報を持たせる    
そして、画像を送信するボタンは複数つけよう。  
input に multipleつけてもいいけど、  
UIの観点からして、わかりづらいからね、  

とまあいろいろあるけど、  
2日前、全くわからずなえてた頃から比べたら、  
幾分か進んでよかった。  
何よりaws saa 受かっててよかった。  
このphpの学習と並行して、 さらに本業のスキマ時間縫って、  
ちょこちょこ勉強してたけど、 受かってよかった。  
これでawsの勉強は1区切りにして、 phpに専念できる  
今日もお疲れさまでした。    

画像アップロードする前に確認する用のやつ  
https://web-emo.com/jquery-preview-img/    
23:04 2023/09/08  

学習日記 20230906

20:53 2023/09/06  
さぁ今日の始まり。  
引き続き、画像の差し替え問題をどう表現するか。    
DBには画像のファイル名を保存している。  


まるで進まない。  
sqlでupdateは使いそう。  
どういう条件でupdateを使うかだ。  
一回一回、上書をするか?  
もし編集したなら?  
投稿記事テーブルと投稿画像テーブルにupdateをかける必要がある。  

画像を差し替えた、削除したということを  
どうやって判断するか、処理に組み込むか。  

いろんなことが思い浮かんでは消えていく。  
だめだ、本当に進まない。  
どう考えればいいんだろう。  

んーーーーーーーーー。  
何か参考になりそうなことをやっているwebサイトとかないか。  

投稿した画像を表示させて、それを選択したら、削除できるとか?  
でもその選択できるようにするためにはどうしたらいいんだろうか。  


だめだーー。  
どうしよう。  
23:05 2023/09/06

学習日記 20230905

19:41 2023/09/05 今日はデザインをいじろうか。どうしようか。

うーん、機能をいじろう。

やはり難敵は、既に投稿した記事にある画像の変更削除だ。

コントローラにおいて、ビューに渡すべきデータはできた。
なので、あとは、viewでどう表示させるか問題。

結局、htmlなのか。

21:12 2023/09/05
やっぱりまるでわからん。
投稿した記事のテキスト系の出力は
問題なくできる。
ただ、画像の扱いをどうすればいいかがわからない。

だめです。全く分かりません。
先生にヘルプを投げました。

最近、だめですね。
この前はがっつりすすんだのに、
昨日今日の進捗は最悪です。

後実装すればよい機能は
パスワードリマインダー、いいね機能、退会or無効ユーザの記事非表示、
投稿の編集、削除機能、、くらいですか。
ひとまずのゴールはその子たちですかね。

もう寝ます。....。

学習日記 20230904

20:14 2023/09/04  
今日の分始まり。音楽を聴きながら。  
今日は画像編集機能について方針を決める。  
画像をクリックしたらその投稿のページに飛ぶ。  

idは$GETでもらってくるとして、  そこからはいつもと同じか。  
idに紐づいた投稿を持ってきて、htmlフォームのvalueに埋め込む。  
テキスト系は多分、この考えで行ける。  
ただ、投稿された画像はどういう風にいけばいいだろうか。  

とりあえず、画像以外の箇所を書いてみよう。  

の前に、そもそも$GETがうまくいってない。  
なんでじゃ。この書き方のはず。  

項目名が違っていた。  
?article_idが?aritcle_idだ。  
凡ミス。  

うまくいった。  
気が抜けませんね。  

さあ面談です。  
20:59 2023/09/04  

22:03 2023/09/04  
面談終了  
職務経歴用の言語化をしましたが  
なかなかうまく言えませんでした。  
反省ものですね。  

別の話で  
面接で課題を出してくる企業さんもあるんですね。  

試しに見てみましたが、  
こうやればできそう、これはどうやるんだ、  
というものが4:6くらいでした、  
ただ、今年の4月に比べたら、大きな成長なので  
悲観せずにやっていきたいですね、

今日は早めに上がって、明日に備えます。