なずブログ

インフラSE、Java開発、リモートワークエンジニアな人のメモ帳

初心者がコード書くときに考えてること~PHPでカレンダー~

f:id:nazuna_0124:20170309204724p:plain

本日の授業はおやすみです。

面接の選考があるのだそーな。どっきどきですね。


そんなわけで、昨日のカレンダーを作ってる最中に考えてたのはこんなこと。


このナメクジみたいな進み具合が、いつか微笑ましく思い出すときがくるといいな!


ナズナさんはツッコミ役。


(思考中)

なずな< (カレンダーかぁ。昨日やった九九表を応用できるかも?)

(おんなじく1~最終日まで表にすればいいんじゃないの?)


<コード作成中>

こんなかんじ

f:id:nazuna_0124:20170309192954p:plain


なずな< (今回はさっさとテーブルにしちゃおう。)

(列はともかく折り返しは・・・と。)

(1,8,14と増えてくから7で割って1余ったら行足すようにしよう。)

f:id:nazuna_0124:20170309192956p:plain


(思考中)

ナズナ< (カレンダーって曜日順だよね。1日の場所ずれるよ。どうするの?)

(あとその月以外の日付はどうする?カレンダーによるよ。)


なずな< (むぅ。ってことは表のマスは最大いくつだろ。7*6で42かな。)

(えーっと…。1日が日曜日だったら入りたい場所は1番。)


(日曜日の返り値は0だから… !)

(そっかー。単純に1日の曜日分だけズレるってことね!)

(前月、次月はとりあえず空白にする)


<コード完了>

空白行がつぶれちゃうのが難点。

f:id:nazuna_0124:20170309192958p:plain


(思考中)

ナズナ<(日曜日と土曜日は当然色変えるよね?)


なずな< (もちろん。ん~ 全部spanでくくってclass指定でなんとかしよう。)

(日曜はtrと一緒に処理して…。土曜日は7で割ったらあまりなしでオッケーかな)

(ついでにスタイル修正っと)


できあがったもの

f:id:nazuna_0124:20170309193000p:plain


(思考中)

ナズナ< (あたしはやっぱり、前月次月の日付が表示されるほうが好きだな~♪)

(もちろん灰色にしてね)


なずな< (むぐぐ。わたしもそう思う)

(前月からいこう。えーっと番地であるiは1から始まってる)

(初日が入るのは曜日の返り値…。そっか。iが曜日より小さいとこは前月だね)

(色はスタイル設定にしちゃえ)


なずな< (次月はおんなじ要領だよね)

(最終日+曜日が最終番地だからそこより大きい)

f:id:nazuna_0124:20170309193004p:plain


ナズナ<(祝日はー?)


なずな< (祝日ねー。Accessでやったことあるんだ)

(祝日って法改正で変わる日もあるの)

(だから1~2年分手動登録してもらうのが一番ましだった)

(今回は配列に入れて配列の存在確認でやっちゃうよー)


<コード作成中>

できあがったもの

f:id:nazuna_0124:20170309203405p:plain


(思考中)

ナズナ<(2017年3月はいいけど。振替休日どうする?)


なずな< (日曜が祝日だったらだよね。)

(仕方ない。前日が日曜かつ祝日じゃないかチェックする)


<コード作成中>

できあがったもの

  • テスト用に3/19を祝日として配列に格納
  • 変わらず3/20が赤くなるカレンダー

f:id:nazuna_0124:20170309203405p:plain


(思考中)

ナズナ< (まってまって。振替休日は火曜日でもなることあるよ!)


なずな< (そ、そうだった…。えー 延々ループするの? めんどくさーい)

(今年は振替休日あるのいつだろー。)→ぐぐる

(1月2日が振替休日なのね。)

(!? 振替休日って書いてる!)

(元々こういうサイトからコピペする仕様だし、なにもしなくていいじゃん!)

(コメントだけのこしとこ)


<なずなコメント記入>

  • 前日チェックを削除
  • コメントに振替休日をいれてねってお願いしとく。

完成

f:id:nazuna_0124:20170309012704p:plain



頭のなかにツッコミ役が存在する人わたしだけじゃないよね…?

プログラム初心者がPHPでカレンダーをつくってみました

f:id:nazuna_0124:20170306210455p:plain

できた・・・?



確認する限りでは出力はあってます


こんなかんじで表示したいのです。

f:id:nazuna_0124:20170309012704p:plain

ソースはこちら。習ったことだけを使って、ぐぐらない縛りです←

<?php

    $y ="2017";
    $m="5";

    $lastday=date("t",mktime(0,0,0,$m,1,$y));
    $weekday=date("w",mktime(0,0,0,$m,1,$y));

    $tbl = "";

    $tbl.='<table border="1">';

    $className="";


    //振替休日も祝日で登録してね。火曜日、水曜日が振替休日になる場合もあります。
    $holiday =[
    "2017/01/01"=>"元日",
    "2017/01/02"=>"振替休日",
    "2017/01/09"=>"成人の日",
    "2017/02/11"=>"建国記念の日",
    "2017/03/20"=>"春分の日",
    "2017/04/29"=>"昭和の日",
    "2017/05/03"=>"憲法記念日",
    "2017/05/04"=>"みどりの日",
    "2017/05/05"=>"こどもの日",
    "2017/07/17"=>"海の日",
    "2017/08/11"=>"山の日",
    "2017/09/18"=>"敬老の日",
    "2017/09/23"=>"秋分の日",
    "2017/10/09"=>"体育の日",
    "2017/11/03"=>"文化の日",
    "2017/11/23"=>"勤労感謝の日",
    "2017/12/23"=>"天皇誕生日",

];


    for ($i=1;$i<43;$i++){

        if ($i % 7 == 1){
            $tbl.= "<tr>";
            $className = 'class = "sunday"';
            }
        elseif($i % 7 == 0){
            $className = 'class ="saturday"';
        }else{
            $className='';
        }

        //祝日対応
        if(array_key_exists(date("Y/m/d",mktime(0,0,0,$m,$i - $weekday,2017)),$holiday)){
            $className='class = "sunday"';
        }


        $tbl.="<td>";

        if ($i <= $weekday || $i > $weekday + $lastday){
            $tbl.="&nbsp;";
            $tbl.= '<span style="color:gray">' . date("j",mktime(0,0,0,$m,$i - $weekday,2017)) . '</span>';

        }else{
            $tbl.="<span ${className}>" . ($i-$weekday) .'</span>';
        }

        if ($i % 7 == 0){
            $tbl.="</tr>";
        }
    }


    $tbl.="</table>";


    ?>


    <html>
    <head>

   <style>

    .sunday{
        color:red;
    }

    .saturday{
        color:blue;
    }

    table{
        text-align:center;
    }

    </style>
   </head>
    <body>

    <?php print date("Y年n月",mktime(0,0,0,$m,1,$y)) ?>
    <?php print tidy_repair_string($tbl) ?>
    <?php $tbl ?>

    </body>
    </html>

年月を引数で受け取って関数にすれば、たぶん使えなくも……。


なにかもっといいほうほうないかなー。


もしくはもうちょっと綺麗に書きたいものです。

職業訓練の授業~43日目~PHP初日

f:id:nazuna_0124:20170303232129p:plain

内容:なぜWebアプリなのか。PHP基礎。

皆さんお待ちかねのPHPの授業です。


休憩時間中に「なんか楽しくなってきた」

PHP覚えればなんでもできるんじゃ!?」



喜びの声が聞こえてきてます。


さて、何が好きかより何が嫌いかで語るのが好きな皆様こんにちわ。


実はhtmlspecialcharsを見た段階で

あ、この子とは長く付き合えないかも


若干心が折れかかってました。

当面はコード入力にVimを使うということで、さらに絶望的に。


PHPさんとのお付き合いは、検討させて頂いた後にお返事差し上げたいと存じます


などと言いつつ、AccessVBA使いの私はLAMP四天王に強い憧れがありました。

なんでかとゆーと、そりゃもうWebアプリ作れるからです。


授業はWebアプリケーションの概要と題して、なぜWebアプリなのかから始まりました。


目的がわからないと前に進めない私にとっては実にすばらしーすべりだし。


平たく言うと

みんなで一緒にたくさんのデータが使える!すごーい!


その分いろいろ覚えることが多い、 その中では比較的簡単というのがPHPのメリットでしょうか。


全体的にサクサクモードで進んでます。

今日で「'」と「"“」の使い分け、一部関数の紹介までいきました。


相変わらず記事の方向性を悩んでます。

今日のところはいつもどおり気になるところをあげてみます。

PHPの開発環境

VmwareLinux CentOSです。

他に候補が上がるのはXAMPPとvagrantでしょうか。

理解した上でないと簡単に環境をつくれても意味がないとも言えます。

ただプログラムに入るまでに時間がかかりすぎるのでケースバーケースですね。

Web作成用のユーザーを作成

Apatcheの公開ディレクトリなんかを変更。

localhost/~UserName

このURLで接続できるように設定。

セキュリティ面がメインでしょうか。ちょっと勉強不足なので調べてみます。

php.iniの編集

素の設定だとエラー表示が出ません

display_errosをOnにすればオッケーです。

こっそり知りませんでした。

自宅のeclipse+xampp環境では最初からなんか出てました。


どーもXdebugぽい???

開発環境とエディタ

今回のネックです。

Vimさんの特殊性も去ることながら

いまいち性能のPCでVmware上というのがきついです。

がんばって覚えても実際にこれでやる機会が不透明なのも心配。


早めにどうするか決めます。

カレンダー作成

ちょっと先の課題で出題予定だそうです。

聞くと作りたくなってきます

ちょっとこれから試してみまっす!

PHPの出力結果をhtmlにして保存。ついでにhtmlの整形。

f:id:nazuna_0124:20170304205638p:plain

ようやくできました!

いつも通り探し方が悪いのか、なかなか見つかりませんでした。


それとも用途がないのか…

これからいっぱい使いそうなのに不思議です。

ソースはこちら。(ソース貼り付け覚えたので使いたくてしょうがない

<?php
    $url ="http://localhost/test.php";
    
    //tidyが使えないとき用
    //$str = file_get_contents($url);
    $str = tidy_repair_file($url);
    
    $fname = "test.html";
    
    file_put_contents($fname, $buff);

何が起きるかとゆーと

こういうtest.phpがあったとして

<?php

$str='';
$str .='<p>aaaaa</p>';
$str .='<p>aaaaa</p>';
$str .='<p>aaaaa</p>';
$str .='<p>aaaaa</p>';

print $str;

別途test.htmlを作成しつつ

ソースがこうなっちゃうところを

<p>aaaaa</p><p>aaaaa</p><p>aaaaa</p>

ちゃんと改行してくれます!

<p>aaaaa</p>
<p>aaaaa</p>
<p>aaaaa</p>

注意点としては

  • urlはhttpからのじゃないとだめ。
  • tidy_なんちゃらを使うにはphp.iniの編集が必要。

php.iniの編集はxamppであれば「extension=php_tidy.dll」をコメントアウトするだけです。


vmwareで作ってる環境側ではこれが無くて挫折しました


どーせhtml作成の補助ですし別にいいかなって。

よしとしときます。

職業訓練の授業~42日目~DOM、九九表、テスト

f:id:nazuna_0124:20170303232129p:plain

内容:JavaScript最終日。DOM。

コメントのお返事に月末からPHPと書きましたが勘違いでした。

なんと、明日からだそうです。


というわけで、本日はjsさん最終日となりました。


午前中はフォームとDOMがメイン。



getElementByIdを覚えて終了


ドットインストールさんのJavaScript入門講座の23回相当だと思われます。


あちらは3分で終わるのですけれど


jsさんの本領を華麗にふっとばしつつ午後はペーパーテストです。



for文を手書きする日がこようとは!


ちなみに紙の資料は見ておっけ。パソコンは使用不可です


◆問題の概要

var items=['さくら','ひまわり','チューリップ'];

チーム1:さくら
チーム2:ひまわり
チーム3:チューリップ

配列だけ与えられて下記の結果を出力するプログラムを書きなさいというもの。


ん~と…?

for (var i=0;i<items.length;i++){
        document.write('チーム' + i + 1 + ':' + items[i] + '<br>'  );
}

こう書いちゃうと 「チーム10:さくら」って表示されちゃうよという罠?

手持ちの資料には、文字の連結の順番とか文字と数値の連結の話がないのでごんす。



むむぅ どうにも意図がわかりませぬ。

for (var i=0;i<items.length;i++){
        document.write('チーム' + (i + 1) + ':' + items[i] + '<br>'  );
}

答えこれであってるのかなぁ。テスト返ってくるのを楽しみにしてます。


javascriptの最終課題として10進数から2進数の変更と九九表作成でした。


九九表は2重ループのアルゴリズムという範囲になるのだそうな。


ウンウン 大事ですよね!


ぐぐってみると以外にもC言語での話題が多いです。定番問題?


そこに出てくるprintfでの桁数合わせ。

jsさんは持ってないのでスペースで合わせろになってました。


これに大苦戦。wordの苦しみをここで味わうことになろうとは…。

jsですし、テーブルでいいんじゃないかなって思います。

現実的に覚えられる方法で連番の一括フォルダ作成

f:id:nazuna_0124:20170304205638p:plain

本日の授業中の一コマ。

いつもはペーパーテストでの評価ですが

今回はHTMLなので作成したWebサイトの提出でした。


先生<「作成したhtmlは共有フォルダに格納してください。」



そして映し出されるのは、「1あべ」「2いとう」という感じで

30個を1個ずつフォルダ作成している先生の操作画面



そこはかっこよく今までの授業を活かしてほしかったのです…。



というわけで、連番のフォルダ一括作成です。

ぐぐるコマンドプロンプトの謎の呪文がヒットします。


あれ覚えるの無理です


現実的な覚えておける方法は

1 mkdir 連番 名前を作成
2 コマンドプロンプトに貼り付けで流し込む(カレントディレクトリ注意)
3 再利用もかねてテキストに保存。拡張子をbatに変更する。


名前だけ手打ちなのは仕方ないです。また使うので我慢します。

3をやっておけば、同じことがあったときに楽です。

1は方法としては2つでしょうか。

Excelで作成

連番といえばExcelさんです。

A B C D
mkdir 1 名前 =A1 &“ ” &B1 &C1

こんなかんじで並べてオートフィル。

あとはD列だけコピペでおっけー。

あえてJavaScript

効率としては意味がありませんが、せっかくなのでというやつです。

<html>
<body>
<p id="names">
あべ
たかはし
さとう
いとう
</p>

<script>
   var members= document.getElementById("names").innerHTML.split(/\n|\r|\n\r/);

   for(var i=1 ; i<members.length-1; i++){
       document.write("mkdir " + i +members[i]+"<br>");
   }
</script>

</body>
<html>

名前の入力が楽になるようにsplitで分割してみました。


現実的とか言いながら1つ余計なものがまざりましたが


コードの入力方法覚えたのでよし!!!

職業訓練の授業~41日目~デザイン見てWeb作成2、変数のスコープ

f:id:nazuna_0124:20170306210455p:plain

内容:簡単なWeb作成。変数の有効範囲


本日は月曜日です。

私の地域の一般ごみは月木なのですが、


ゴミを出し忘れる確率は150%

(1回は忘れて2回目で出せる確率が50%)


2つのこと同時にできないのですよね…。

プログラム中もときどき困ります。

求む処方箋。


さて、ちょっと話を戻しましてWeb作成です。


この範囲は進みの早い人も許容してます。

余裕のありすぎる人向けと題した課題が出ました。


せんせー。タイピングが速いから進んでる私も余裕がある人に入りますか?


この課題で意外な盲点を発見。


ブロックのタグ全体をリンクにするという課題。

その上でマウスオーバーでブロック全体を背景色変えるというもの。


前課題がそうだったのでaタグにdisplay:block;

a:hover で背景を変える設定にしてました。


こうすると色の変わる場所が変えたい場所とずれるんですよ!


悩んだ末、aタグにwidthを大きめに設定しちゃいました(´・ω・`)


結果はあってるけどやり方は絶対違う自信がありました


やむなく元Webデザイナーのおねーさまのお手本を見せてもらうことに。


aじゃなくて色変えたいタグの方にhoverやってました



……ちょっと頭硬かったですね。反省反省。


もっと反省すべきはブログにhtmlソースを載せようとして諦めたことですが。


(みんな綺麗にどうやってるんだろう)


午後からのJavaScript

変数の有効範囲のお話。

たまに、なんでこう出力されるの!?

って困る原因のひとつですね。

とっても大事だと思います。


休憩中に聞いてみたところ、何言ってるかわからないという声多数。


次のPHPやるころにはわかるからだいじょーぶ!