タグ『 PHP 』

≒ Amazonすげー!

注文履歴周りの改造をするって昨日書いたのに、気が付いたら「おすすめ商品」の仕組みが出来あがってた。なんだそりゃ。
「カートへ投入」「カート確認」「購入完了」の三つの画面に付けたんだけど、ログインできないと見れないことに気づいてトップページにも付ける。
しかしまたまた大変でした。まるっきり参考にするものがなくて一から作るのは初めてだったので、どうでも良いミスでエラー続出。
さすがに全部書くほど恥知らずではないので、1個だけ備忘録として書きます。

というかforeachとmysql_fetch_arrayの使い方がごっちゃになってて無茶苦茶になったっていうだけの話なんですけど、例えば「foreach($hoge as $key =>$value)」って条件付けしたらループ処理内では$key、$valueを代入して行くのが基本なんだけど、それを「while($value=mysql_fetch_array)」の時も$valueだけ代入してエラー続出。この場合の$valueは配列になってるから(というかここで$value使うからまちがえるのか)添え字が必要。気がついて直しても次にまた同じエラー。癖になっている。気をつけよう。配列の扱いがまだ良く身に付いていないんだよなー。

Amazonと比べたら失礼だけど、自分で「おすすめ商品」の仕組みを一から作ってみて、改めてAmazonのすごいところが良く判った。
うちの「なんちゃって」では、カートの商品と同じものを買った人達が他に買ってる商品を全部集計して出現頻度で順位付けして上位を表示してるだけなんだけど、こんな簡単な仕組みでも、もしAmazon並みの圧倒的な商品数と会員数があれば思いもよらない結果がでるだろうなと想像できる。リアルタイムに膨大な情報(履歴)を収集し続けて、それを個人の購買行動に直接フィードバックし続ける仕組み。マーケティング理論とか不要になっちゃうよね。すごく僕が憧れたインターネットの可能性を体現していると思う。なんというか、まず最初に堅牢かつ簡素な仕組みを構築して、そこに自他の物量や資源を集中させる。その圧倒的な「モノ」の洪水の中で生き残っていくものには自然と価値が伴っていく、ってやり方。アメリカ式。「健全な弱肉強食」。僕はインターネットの良さってそういうものだと思ってる。

急にいつもの失敗話と違う感じのエントリを書いてしまったけど、今日のコーディングが僕がweb構築スキルを身に付けたいと思ったきっかけを思い出させてくれたので書いちゃいました。ほんとはこういうことは文章で書くべきものでなくて、スキルの成果物として公開すべきものだと思ってます。

まぁ、まだ陸サーファーならぬ「陸アーキテクト」ということで一つ。

≒ ECサイト制作進捗

11/27のエントリで書いた目標のうち「打ち残しファイル」は昨日で終了。今日は「最近チェックした商品の記憶」を終わらせた。

目標で書いた時点ではデータベースに入れるような処理を考えてて、難しい改造をしなきゃいけないと思い込んでたのだけれども、よく考えたらセッションを長生きさせれば良いことに気付いてその方向で考える。そのほうがログインしないで、つまり非会員でも対応できると思ったのです。

で、コード読み直して、情報集めて、すぐ却下。ちょっとやってみて上手くいかなかったのもあるんだけど、ログイン認証結果も入ってるデータを長生きさせるのは良くないことに気付いた。なので取り掛かったのがクッキー。というか普通は迷わずクッキーだそうです。ちなみに、Amazonもクッキー制御みたいだけど、データベースにも格納してるらしい。仕組みを知りたいな。

以上を前提に今日の失敗。
まず、sessionで試行錯誤した関係で、変なセッションデータが残っちゃってまともにログイン出来なくなった。恥ずかしいので結論から先に言うと、ブラウザのキャッシュ消して解決したんだけど、頭がコードから離れなくて、コード記述で直さないとと思い試行錯誤。session_destroyしようにもsession_startでエラー吐いて止まっちゃう。調べると「@session_start」でうまく行くとのこと。
その通りすると、やった!エラー出ない。ちゃんとページ描画される。でdestroy行を消して処理を入れてみると元通り駄目。むーん。
この時点でsession永続化の危険に気付き計画放棄。クッキー化へ方針変更。sessionの部分を全部クッキーに書きなおす。クッキーについて調べてるうちに「@」についての説明発見。

「命令の前に@を付けるとエラー情報を書きださなくなります。」

この野郎!状況をごまかしただけだったのか!

で、引き続きクッキー化の改造。参考サイト(そふぃさんいつもありがとう)見ながら今度はきっちり書きあげる。走らせる。駄目。

setcookie(“hoge[‘huga’],チェックした商品番号,UNIXタイムスタンプ+クッキーの寿命)

って書いてる。30分位調べて判る。

[huga](クオートなし)が正解。

PHPを入門書で勉強してた時に見てたのになー。ヒアドキュメント内やいくつかの条件がある場合、連想配列の添え字はクオート付けちゃだめだって。今度こそ覚えとこう。

以上、今日の失敗2つでした。先週末の目標3つのうち残りは「注文履歴まわりの改造」だけ。今晩から取り掛かる。
しかし、また穴を発見。「著者詳細」と「出版社詳細」のページがリンク切れ。探してもサンプルコード見つからず。最初からなかったみたい。「自分で創れ」ってことですね。

一番の難関「全体のUI周り改善」にいつ取り掛かれるのか判らなくなってきた。しかしこの本はほんとに勉強になるなー。

≒ ECサイト進捗

ぜんぜん予定が進まない。週末使って目標のうち残り4ファイル打ち込みは1つ終わっただけ。参考書のものから大幅に改造して打ち込んでいるので時間がかかる。
「A:条件を入力して検索スタート」のページ→「B:検索結果のリスト」のページ→「C:リストのうち一つを選んで編集する」詳細ページ
という風に遷移させる。参考書ではA→B間は検索条件を持って遷移するんだけど(当たり前か)、Cの個別ページへは個別データのキー値一個だけ持って遷移するので、戻るのはブラウザボタンで(あるいはJSでボタン作るか)しか出来ない。
確認だけならそれで良いんだけど、個別ページで編集もするので、このままだと「戻るボタンで戻ると変更が反映されていないリストになる。」なので「F5押すと(更新すると)検索条件が残ってないので、最初のリストとは違うリストが表示される」。
これは全然良くない。まだ件数少ないから良いけど、何百件もあるデータの取り扱いにはこれでは使えないよね。
ということで取った対策が「検索条件をすべて引き連れてCまでいく」というもの。セッションの動作がよくわからないので、POSTかGETで連れてく。我ながら何か間違ってるけど、とりあえず希望通りの動作にはなった。

で、疲れ果てて今日も失敗。パラメータが40~50もあってかつ改造に次ぐ改造なので、GETとPOSTが入り乱れて飛び交う地獄絵図。ハマったのが「<form action=”hoge.php?huga=huga” method=”get”  >」って表現。
formの中にはinput:hiddenが山ほど入っているんだけど、actionのhugaってパラメータだけが渡らない。中身のinputがPOSTでもactionのGET値は渡るので、これもいけると思いこんでいた。

グーグル先生で30分位探す。何も出てこない。「actionとinput両方でGET値を渡す方法」を探してたんだけど、30分経って気付いた。「何でhugaもinput:hiddenで渡さないの?…」。……。

出来る出来ないじゃなくて「そんなことやる必要がない」!もういや!寝る!

今日の進捗はユーザページの「商品検索→カート」の遷移部分の細かな調整と、カートの数量増減の商品在庫との連動の仕組み、カートの二個入れ対策でした。CSSボタンのIE対策は(も?)失敗しました。明日も頑張るぞ。