こんにちは。ウェブカツ!女性割引にてプログラミング学習中のみや***です。
プログラミング学習を開始してから、早くも150日経過しました。総学習時間は自主トレも合わせて500時間を超えに(!)。
現在ウェブカツではJavaScript上級部に進んだものの、一旦手を止めて現在はPHPを使ったWEBサービスを作成中です。
その中で、私がよくやる間違いやちょっと頭に置いておきたい点を記事にして残しておこうと思います。
間違い1:比較演算子で同値かどうか判定したいのに
if文で比較演算子を使って、イコールなら以下の処理・・・としたいのに、なんだかうまくいかない時。
イコールじゃなくて代入してたということが何度かあります。
if( i = key.length ){
↑こちらはダメ。比較演算子じゃなくて代入しちゃっていました。。
if( i === key.length ){
↑こうすればOK
間違い2:phpの中にphpでechoしたい
<?php if(!empty($_GET['k_w'])) <?php echo '「 '.$_GET['k_w'].' 」の検索結果' ; ?> ;?>
↑これはダメです。
どう見てもダメなのに、でもどうしたらいいのかわからなくてしばし悩みました。
<?php if(!empty($_GET['k_w'])) echo '「 '.$_GET['k_w']).' 」の検索結果'; ?>
こうしたらいいんですね!
ぐぐったらterateil(プログラミング版知恵袋みたいなサイト)に答えが載っていました。

答えがわかれば脱力ものですが、悩んでる時は本気なんですよね・・・
間違い3:jQueryでドムをとるとき
最近ちょっと好きになってきたjQueryさん。
なにかとドムを取得する機会があるかと思いますが、class指定をするときに以下をよくやってしまいます。
$('js-btn-text').text("挿入したいテキスト");
$('.js-btn-text').text("挿入したいテキスト");
$this.toggleClass('active');
間違い4:returnで値を返すタイミング
以下のコードはちょっと長いので見にくいかもしれませんが、DBに接続してデータを取得する際、
前半のsql文は実行されたのに後半のsql文がうまくいかない。なぜ??としばしハマりました。
先に原因を言うと、returnするのが早過ぎました。
function getMyLike($currentMinNum = 1, $u_id, $span = 20){ try { $dbh = dbConnect(); $sql = 略; $data = array(':u_id' => $u_id); $stmt = queryPost($dbh,$sql,$data); $rst['total'] = $stmt->rowCount(); //総レコード数 $rst['total_page'] = ceil($rst['total']/$span); //総ページ数 if($stmt){ return $rst; //<ーーーーーー ここでリターンしてしまってる!! }else{ debug('お気に入り情報がヒットしません'); return false; } // ページング用のSQL文作成 $sql .= ' ORDER BY… 略 ’; $data = array(':u_id' => $u_id); $stmt = queryPost($dbh, $sql, $data); if($stmt){ $rst['data'] = $stmt->fetchAll(); return $rst; //<ーーーーーー ほんとはここにだけリターンを入れる }else{ return false; } } catch(Exception $e) { error_log('エラー発生:' . $e->getMessage()); } }
デバッグログを見ると”Invalid argument supplied for foreach()”も出ていたので(foreachの中が配列じゃないよ!というエラー)、てっきりそこまでの処理は進んでいるのかと勘違いしてしまいました。
正直に言うと、DB接続のコードが意味するところが最近なんとなくわかってきたところなので・・・ちゃんと意味がわかっていればやらないミスだよな。とがっくり。
というより、returnの働きを理解してないからか・・・(T ^ T)
謎の空白を作ってしまう by<div>タグ
JsvaScriptでドムのテキストデータを取得したところ、なぜかテキストの後に改行が入ってしまうという事態に。

コンソールで見ると、しっかり空白が入っています
document.execCommand(‘copy’)でコピーしたいテキストを取得中にこの改行に気がついたため、”Command(‘copy’) 空白”などのキーワードで調べていたのですが、
原因はそもそもCommand(‘copy’)のせいではありませんでした。
HTMLのdivタグをおかしなことで改行し、(おそらく)スペースキーで自分で微調整したのだと思います。

見にくいですが、オレンジの点々の部分です。
このdivの改行を一度消し、tabキーで改行をやり直したところ
ちゃんとテキストのあとの空白が消えました!
コンソールで見ても何かわからない、marginでもpaddingでもない謎の空白をたまーに作ってしまうのは、私の場合おそらくこれが原因かと・・・。
メモ1:短く書いたphp文
if文がショートハンドで書いてあると、今でも???となってしまいます。
なので、何度かお見かけしたやつをさくっとまとめます。
<?php if( i === 0 ): echo '0です。'; endif; ?>
↑は { がコロンになって、締めがendifになってるもの。
if(!empty($hensu)) echo '555' ;
↑は{}が無いタイプ。()内がtrueなら、555をエコーさせる。という意味。
後続にelse が続かなくてもいいし、同じように { 無しで続けて書いてもOKのようです。
$num = (!empty($hensu)) ? $hensu : 1;
↑は三項演算子。
()内がtrueなら $hensu を$numに代入。falseなら1を代入。という意味。
if else を1行で表せるので便利ですね。
メモ2:ifで条件に合うときだけHTMLを表示させたい
いつも表示するのではなく、条件によって表示・非表示を振り分けたい時。
謎のダメコードを書いてしまい文法エラーに時間を取られたのですが、
こうやって
<?php if(条件){ ?> <form> <h2>キーワード検索</h2> <input> <button>検索</button> </form> <?php } ?>
if文の最初と最後それぞれphpタグで括ってあげたら見やすいコードで書けますね。
メモ3:phpの配列の値をjQueryで使いたい(連想配列)
データベースに登録してあるデータをひっぱり出してきて、jQueryでクリックしたら切り替わって・・・のように使いたい時。
普通に変数名を渡してもjQueryは分かってくれない。
あれ?どうするんだっけ??と思って調べたら、ここでJSONが出てくるんですね!
jQuery(というかJavaScript)が分かる形式に書き換える処理として、json_encodeを使います。
まずはphpでデータベースからデータをとって、変数に代入。
$data = getFromDB(); //phpのデータ取得関数から変数$dataに代入 $dataNew = json_encode($data); //この式だけでJSONに書き換えられる!
この場合では、
$dataにデータベースからとったデータ。
<scripttype="text/javascript"> let dataFromphp = <?php echo $dataNew ?>; </script>

プログラミング学習、振り返りも大事。
私はウェブカツでプログラミングを勉強してきて、どちらかというと「早く進まなきゃ」という思いが強くてあまり立ち止まらず走ってたのですが、
ここ最近こうやって、「あ、前もここ間違えたなー」とか、「できたはいいけどややこしくて二度とできないかも・・・」という点をメモがてらまとめています。
そうすると、後で自分で見たときに役に立つというよりも、ある程度噛み砕いて書くことで記憶が整理されて、頭に残りやすい!
ということに気がつきました。
まぁ、プログラミングに限ったことではないですよね^^;
これからも頭を冷やして学習を継続してゆきます。
こちら↓のプログラミング学習記録もどうぞ。

ウェブカツでプログラミング学習記録 | 100日経過!の進捗や思うこと。
