タグ『 PHP 』

≒ 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対策は(も?)失敗しました。明日も頑張るぞ。

≒ wordpressのif文がわからない

(表題の件の解答は載ってません。あくまで備忘録です。)

職業訓練も卒業制作の期間に入って、毎日自習状態。
これなら家でやってたほうが環境(現実のとPCスペックと)は良いんだけど、出席足らずで訓練終了認定もらえなかったら元も子もないので、教室に来てしょぼいPCでコード書いてます。Eclipseが使えないのでPHPコードをごりごり書くのは敬遠して、前から気になってたこのブログがW3C先生に怒られてたのを直すことにする。
細かいの(id指定をclass指定に変えるとかね)を全部つぶして、最後に残ったのがページ遷移部分。wordpressのテンプレート通りだと、例えば先頭ページの場合、当然、もっと「最近の投稿」は存在しないのだけれども、<span>タグだけは出力されるので、「中身がないですよー」って怒られる。以下試してみた対処法。

  • if文でくくる。「if(『最近の投稿』を出力する関数』){echo”<span>”. 『最近の投稿』を出力する関数』.”<span>”}」
  • 同じく。「if(『最近の投稿』を出力する関数』){echo”<span>”;(改行)『最近の投稿』を出力する関数』;(改行)echo”<span>”;(改行)}」
  • 同じく。ぐぐってwordpress(というか別の書き方)のif構文に書き換える。「if(): ~ endif;」

以上全部駄目。なぜか<span>タグだけ出力されない。『最近の投稿』は出力される。試しに実行部分の『最近の投稿』を出力する関数』を削って「echo”<span>”」だけにしても『最近の投稿』だけ出力される。幽霊みたいでちょっと怖くなった。
まぁ、良く考えたら、分岐判定部分に記述している関数が実行されて処理を抜けちゃってることがわかったんだけど、今度はそれの直し方がわからない。つまり「if文で判定にある関数の実行結果を参照したい。けど実行はさせたくない」という問題。
if(()==”TRUE”)って明示してみたりしたんだけど全然駄目。

以上、午前中いっぱい使って駄目だったのであきらめる。宿題として覚えておく。まだif構文の理解が甘い。
え、でも治ってるって?<span>タグには&nbsp;突っ込んでW3C先生を騙してます…

≒ <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は面白いなー。