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