タグ『 模擬ECサイト 』

≒ データベースのカラム名

MySQLのテーブル「○○_users」と「○○_shipping」。その名の通り会員情報と出荷情報のテーブルなんだけど、両方でカラム名に「state」ってのがある。
ここまでで想像がつくように値の操作で失敗。shippingテーブルにusersテーブルをLEFT JOINしてSELECT *。
その結果のstateの値はどちらのものでしょうか。

今日失敗する前の僕なら、先に呼んでるし、左外部結合だし、迷わずshippingって答えるんだけど、正解はusersだった。
解決は「select *,○○_shipping.state」でいけた。けど上書き気持ち悪いね。

今後、カラム名は必ず「テーブル名_カラム名」って付けよう。それとももっと良い方法があるのかな?

≒ <nobr>タグは必要なし?

今日の失敗。

なんちゃってECサイトも大詰めで、参考書に載ってるコードは全部打ち終わった。あの本は解説どころか全く言及がなく、コード内のジャンプ先で必要になって初めて気がつくコードファイルが結構あって、その場合、サポートサイトからとってきたサンプルコードを解読しながら打ちこまないといけないようになっているので、本が終了してもまだ終わらないんですねー。

というわけで、今日は売上管理の部分を打ち込んだんだけど、コードの構成も大分判ってきて、打ち込みながら自分好みに改造していく。今日ハマったのはそれほど重要な部分ではなくて(いつもか?)CSS関連。

<a>タグでページ遷移させてたところにパラメータいっぱいくっつけなくちゃいけなくなって、action属性があんまり長くなるのもどうかなとも思ったので<form>要素に変更した。動作はうまく行ったんだけど、変更前は「<a></a><a></a>」で仲良く二つボタンが横並びになってたところが、「<input /><a></a>」だと改行されちゃう。
そうか、<nobr>タグはだめだから入っている<td>タグに「white-space:nowrap」しちゃおう。で、効かない。
<p>タグで括ってnowrap。駄目。
<div>も駄目。<span>も駄目。<td>の幅をでかくしても駄目。
仕舞には禁断の<nobr>も試したんだけど駄目!

で、コードとにらみ合いをしてたら、<form>がちゃんと閉じていない。ちゃんと閉じる。
治る。横並びになった。いつも通りカンターン!というか今日の失敗は我ながら特にバカっぽいなー。

GETとPOSTの取り扱いもよくわかってないことがはっきりしたし、今日も勉強になった!

≒ <a> escaping malformed URI reference

引き続き模擬ECサイト制作中。ホントに進みが遅い。これでは仕事なら給料もらえないよな。
でも、職業訓練受講中(=職探し中)の今だけできることってことで、じっくりコードを一つ一つ咀嚼しながら打ち込んでます。

で、またエラー覚え書き。今回のはエラーというかW3C先生に怒られた。↓こういうselectボックス書いたら↑の警告が出た。

<select name=”sort”>
<option value=”item_name asc”>商品名・昇順</option>
<option value=”item_name desc”>商品名・降順</option>
<option value=”sale_price asc”>価格の安い順</option>
<option value=”sale_price desc”>価格の高い順</option>
<option value=”release_date asc”>発売日の古い順</option>
<option value=”release_date desc”>発売日の新しい順</option>
</select> 

例によってW3C先生の言ってることが全く分からない。なのでこれもいつも通りグーグル先生に質問する。
日本語ではヒットなし。うーん。結構深刻なやつか?

で、W3C先生(いや、ほんとはFireFoxのVALIDATORのことです)をいじってたら「警告」の三角びっくりマークをダブルクリックしちゃって、ヘルプ画面が出てきた。
知らなかったー。親切ー!英語なんだけど、例まで出して丁寧に説明してくれてるので僕にもわかる。
結局、空白(スペース)をURI(URL)に入れちゃいけないんですって。IETFも言ってるんだって!RFC番号までわざわざ書いてくれなくてもいいですよ!

再度グーグル先生に対処法を質問。今度はいくつか出てきた。
「URIには空白は入れるな。どうしても入れる場合は空白を『%20』に置き換えろ」とのお告げ。
言われる通りselectボックスのコードを書きかえる。

今度はPHP先生に怒られる。MySQL君はそんな単語(例:item_name%20asc)は知らん!ですと。
ですよねー!ってまたまたグーグル先生に泣きつくと、魔法の呪文「rawurldecode()」を教えてくれる。
で、呪文を唱えるとMySQL君OK!そいでまたW3C先生がご立腹。もー!
PHPマニュアルの「rawurlencode()」のページ見たら下のほうに「rawurlencode()」ってある。これだな!
で、片っぱしから唱えて回って解決。

以上、僕が今毎日やっていることを実況中継風にお送りしました。こんな馬鹿なことばかりやってるから時間がかかりますということで。

ちょっと不思議なのは、SQLにデコードして渡しただけで、$_GET変数はいじってないのにW3C先生に怒られたこと。参照渡ししてるってことかな。
PHPは変数の「参照渡し/値渡し」の取り違えで結構間違えることが多い。JSとちょっと感触が違うような。例えばmysql_fetch_array()をwhileでくくる定番の使い方あるけど、
「変数の値を引っこ抜いていって、空になるまで」ってことでしょ。やっぱりPHPは面白いなー。