2015年2月18日水曜日

MacにXAMPPをインストールしたのでメモ





Macの開発環境にXAMPPを入れることにしました。

うちには2011年製のMac(メモリ4GB,当時の型落ち)と、
友人に組んでもらった怪しいWindows があります。

Macの開発環境としてMAMPを入れて使っていたのですが、
ちょっと調子に乗ってPEARをインストールしたら、
MAMPのMySQLが起動しなくなりました・・・。

いろいろ対策を調べて試しましたが、動く気配なし。
 ("killall -9 mysqld"とか)
この一件でターミナル触るのトラウマです。

一晩格闘して疲れたので・・・
MAMPとおさらばしてXAMPPデビューを企てました。

XAMPP(ザンプ)とは、ウェブアプリケーションの実行に必要なフリーソフトウェアをパッケージとしてまとめたもので、apachefriends.orgから提供されている。主として開発用あるいは学習用ではあるが、イントラネットなどにおいて実運用環境として使われることもある。
※Wikipedia:XAMPPより引用

そもそも、Mac環境=MAMPと思い込んでいて、
MacでもXAMPPが使えるってことを知りませんでした。


DL→インストールまでは10分程。



そして「php.ini」の書き換え。訓練でやったような。
[アプリケーション→xampp→xamppfiles→etc→php.ini]

 参照していた本では
「magic_quotes_gpc=On」を「Off」に書き換えると書いてます。
他にもいろいろあるのだろうけど、とりあえずここまで。


そして・・・
あれ?
どうやって起動するの?

アプリケーションフォルダの「XAMMP」フォルダ内に、アプリケーションのアイコンがない・・・。

参照していた本では、
ターミナルを起動し、[sudo su]と入力。
パスワードを(決めて)入力。
「 /Applications/xampp/xamppfiles/mampp start」と入力で起動する、とあります。

結果→sh: /Applications/xampp/xamppfiles/mampp: No such file or directory

起動しない。そしてなぜmampp??







XAMMP起動
よく見たらあやしいアイコンがありました。
名前は「manager-osx.app」。
どうやらアイコンが違うだけで、こいつがXAMMPらしい。

どうしてこんな設定ファイルのようなアイコンなのだろう?
なぜ名前を「xammp.app」にしてくれなかったのか。


クリックしたらXAMMP画面が開きました。
分かりにくいのでは・・・?





アプリケーション起動ぐらい普通にやりたい。
 「他の子どもはちゃんとできてるのに、ウチの子(XAMMP)はできてない」みたいな心境。
今後この子とやっていけるのか、しょっぱなから不安がよぎりました。

この資料ではっきりわかりました。


「いきなりはじめるPHP ワクワク・ドキドキの入門教室」 という書籍の補足。
・XAMPPのインストールでお困りのMacユーザーの皆さんへ
ありがたや。
今度書店に行ったら手にとってみようと思います。

この解説PDF、画像もテキストもすごくわかりやすい。
著者がしっかり読者の気持ちを汲んで書いているのを感じます。
未経験のときにこの本に出会いたかった。

そんなこんなで、今日はひとまず起動まで。

2015年1月18日日曜日

その後の状況

訓練が修了し、3ヶ月経過しました。

受けた会社:3社
採用いただいた会社:2社

いずれもハローワーク経由。
担当職員さんからの紹介です。

いずれも、職務経歴書と履歴書を持参して面接。
面接1回で採用・不採用が決まりました。

ダメだった会社は、完全に即戦力の人を探しているとはっきり言われました。
(人事の方とても良い印象でした)

採用はいただきましたが、まだ求職活動を続けています。
給与・立地・勤務時間などを詳しく聞いて、
とても心苦しく思いましたが、辞退しました。

会社側も時間を割いてくれているわけなので、申し訳ないです。

自分のキャリア的にも、次の職場は長く(5年くらいは)居たいと考えています。
ちょっと貪欲に探します。



プログラムですが、しばらくエディタを売っていないと本当に忘れてしまいます。

今日はこの本で復習。


イラストでよくわかるJavaScript Ajax・jQuery・HTML5/CSS3のキホン

2014年11月11日火曜日

?日目 PHP SQL 「PDO」でデータベースへ接続する

とても眠い!!が、今日の授業メモ。


  • PDO(ピーディーオー)

昨今ではDBに対して"PDO"で接続することを推奨している。

クラス構造になっている??
PDO = PHP Data Object

http://php.net/manual/ja/book.pdo.php

MySQLの版権を持つメーカーオラクル。

しばらく無償でを提供すると言っているが、将来有償化することも起こりえる。
→そのとき、今まで使っていた関数 mysql~が使えなくなる?!

そこでPDOを導入。
このクラスのオブジェクトを生成すると、
宣言(接続の定義)さえすれば、
指定したDBに対して自動的に接続してくれる。
長い目で見て継続するサービスはPDOにした方がいいかも。

○特徴:セキュア

プレースホルダー
sprintfを使って個別にサニタイズしていたが(mysql_real_string...とかで)
その必要がなくなる。

○postgreSQL
 (ポストグレ エスキューエル)
 PCUNIX上で動作するオープンソースのデータベース

○MySQLはオラクルが版権を握ってしまった。

○つなぎ方
$dsn="mysql:dbname=foods;host=localhost"
 
 3つのデータを入れる
 使うDB名、DBネーム(goodsとか)、サーバー名(sakuraとか)

  • try 例外処理

try{
     &pdo=new PDO($dsn,$user,$password);
}$catch(PDOException $e){
     print("接続失敗".$e->getMessage());
     exit();
}

○クエリの実行もメソッド
PDOオブジェクトが持っているクエリというメソッドを使って
引数としてSQL文を渡す。
$stmt = $pdo->query("set names utf8;");
$stmt =$pdo->prepare("select * from データベース名where フィールド名1=? and フィールド名2=?");
$stmt->execute(array(2,"%テキスト%"));
while($row=$stmt->fetch(PDO::FETCH_ASSOC)){
     print("<p>".$row["item_name"]."☆".$row["price"]."</p>";
}
$pdo=null;
?>


     $stmt(ステートメント)
     上で予約、下で値を入れる
     prepare...sprintfに該当するもの。
     executeメソッドで値をバインド!!(代入)
     「?」に値をもたせられる。

     単純にテキストが入るのではなく、コンパイルされている。


※$eというオブジェクトが持っているgetMessage()というメソッドが使える
 例外を検知したときは$eというオブジェクトとして取り扱う
 foreachみたいなもの。
 例外が発生したら、$eというオブジェクトが持っているgetMessage()というメソッドを実行。


(PDO::FETCH_ASSOC)
 突然のダブルコロン→PDOのプロパティ
アロー演算を使って呼び出してくる筋の物。

オブジェクトを生成しなくても静的に呼び出せる。
newしなくってもメソッドを呼び出せる。

$pdo=null; でサーバー上のメモリを削除する。
 これをしないとずっとプールし続ける。

2014年11月5日水曜日

80日目?|htmlの定義リスト

今日も引き続き課題を進めました。
最終日にプレゼンをやるそうで、プレシャーだと嘆いている人もいれば、
良いプレゼンをやりたいと意気込んている人も。

今日学んだこと


  • <dl>定義リストいろいろ使えるので便利。
    先生は<li>のリストよりもこちらをよく使う。
     
  • CSSを使えば横並びにできる







CSSでの注意点。
「float:left」を使うことになるので、次の要素がきたときにはcrear(解除するプロパティ)を忘れないこと。
「clear:left;」で上の要素の「left」を解除する。
また、「clear:both」ならば上下左右すべてのfloatを解除する。

ラインがそろっている →親子関係もわかりやすくなる。

・ 汎用性の高い横並びdlリストを作る

・ HTML要素 コンテンツのグループ化 dl 要素dl要素(html5.jp)
ここのこの記述、何度読んでもちょっと謎・・・。
もし dl 要素が 1 つ以上の dt 要素を子に持ちながらも、dd 要素を子に持たなければ、それは、名前はあるけれども値がないひとつのグループから構成されることになります。
もし dl 要素が 1 つ以上の dd 要素を子に持ちながらも、dt 要素を子に持たなければ、それは、値はあるけれども名前がないひとつのグループから構成されることになります。
dl 要素の最初の子は dt 要素か dd 要素となりますが、それが dd 要素なら、その最初のグループはそれに対応する名前を持ちません。
dl 要素の最後の子は dt 要素か dd 要素となりますが、それが dt 要素なら、その最後のグループはそれに対応する値を持ちません。

2014年11月2日日曜日

メモ・foreach

連日PHPを勉強しています。

「foreach」と仲良くなれない。
何だっけ?と思い出して、昔のメモを読んで理解したような気になって、また忘れる・・・。


書き方

     -1- foreachi(配列名 as $key=>$val){
             処理
         }

     -2- foreachi(配列名 as $val){
             処理;
         }



  • $key →配列のキー(インデックス)
  • $val →配列の値。別にどんな単語でも良いけどvalを使うのが基本
  • =>(ダブルアロー)配列のキーと値を関連付ける特殊記号。
      
    javascriptのドットと同じ。親要素と子要素をつなぐ。



Foreach文 - Wikipedia [はてなブックマークで表示]ja.wikipedia.org/wiki/Foreach文foreach文(フォーイーチぶん)とはプログラミング言語においてリストやハッシュテーブルなどのデータ構造の各要素に対して与えられた文の実行を繰り返すというループを記述するための文である。foreach文はしばしばfor文の一部という位置付けにある。for文と ...

たどり着いた解説が分かりやすかったので引用。
こんな風にユーモアを交えて解説できる人は天才だと思う。
公式のマニュアルも読むけど、今の自分にはまだ難しいのです。

・foreachの使い方がよくわからないので教えてください - PHPプロ!Q&amp;A掲示板

【質問】
今独学でPHPを勉強してるんですけどforeachの使い方がよくわかりません。foreachはどんな時に使えるのか教えてください(for文とは違うんですよね?)。特に$key(一時変数?)と書いてありますけど配列のキーが入ってそれをどういう風に使えるのかがよくわかりません。あまりに抽象的な質問ですみませんが教えてください。

【回答】 
配列全部に対して処理を行う時に一番良く使うのがforeach。
$aa[0]='(゚Д゚ )';$aa[1]='( ・∀・)';という配列があったとき
foreach ($aa as $value){ echo $value."ゴルァ";}とやると、$aa[0],$aa[1]の2回分ブロック内が処理される。そのとき$aaの中身が$valueに入って処理される。

この場合結果は
(゚Д゚ )ゴルァ( ・∀・)ゴルァ
すっきり。
foreachは配列を取り出すのに使うループ処理の文。
配列の中に存在するデータの数だけ自動ループ…ということかな。
配列だけではなくてオブジェクトにも使えるらしい。

練習でforeachが出てきたのは「フォームからPOSTされたデータを取り出す」ところでした。

<?php
foreach($_POST["test"] as $val){
$val=intval($val);       ←この処理を$_POST["test"]にある数だけ回す
print($val. "です");      
}
?>

2014年10月29日水曜日

メモ・データベースとの連携


SQL文でつまづいたのでメモ。

MySQLのデータベースからSQL文(select)で情報を取り出す。

  1. PHPでSQL文を作成
  2.  →データベースへSQL文発行(MySQL)
  3.   →レコードセット(戻り値)からデータを取り出す
まず部分検索の「LIKE」を使いたかった。

やりたいこと(1)--「赤」という名前を含むアイテムを「items」テーブルの「color」フィールドから検索

 SELECT    *
 FROM    items
 WHERE    color LIKE ‘%赤%’ ;


文字の前後どちらとも曖昧で良いように、前後に%をつける。 


 「赤」がつくアイテムが大量にあるため「LIMIT」を使って表示件数を制限する。
このとき、前後の処理の関係で件数には変数を代入する。

「LIMIT ○件」の部分にsprintfで$numberを入れる。

やりたいこと(2)-表示件数を制限

$sql=sprintf("SELECT * FROM items WHERE color LIKE ‘%赤%’ LIMIT %d;",$number);

こでで%dの部分に$numberが入って、名前に「赤」とつくアイテムが「&number」件だけ取り出せるはず。
↓
取り出せなかった。
$sqlをechoしてみるが、何も入ってない…?
↓
原因:sprintf( "○○○○", $変数);
   この○○に「%」があるため、正しく処理されてない。
   ‘%赤%’の部分が「%d」や「%x」のように思われてる。なるほど。
 ↓
対処:%を%%に変更。文字列の%として扱ってくれる。


こんなところで30分悩んだ。

 文字列関数・sprintf

こちらの記事で解決しました!
printf関数とsprintf関数のフォーマット指定子のオプションと型指定子 (Perl勉強日記)


 

75日目|PHPでのループの復習


今日学んだこと

ループ処理について復習

  • for
 for( $変数名 = 初期値 ; 条件 ; 更新処理 ){  繰り返したい処理;  }


(for文の例)
<?php
for($i=0;$i<10;$i++){
print("<p></p>");
}
?>

※こんな使い方もできる
<?php
for($i=0;$i<10;$i++){
?>
<p>こんにちは世界!</p>
<?php
}
?>

  • while
 while( 条件式 ) {
 繰り返したい処理;  }


(for文の例)
$i=1;
while( $i < 10) {
echo $i;
$i++1;
}


↓結果

 123456789

条件が成りたっているあいだ繰り返し処理をする。
インクリメントをうまく使う。
「$i++1」を忘れると無限ループ…。

  • インクリメント

 「カウンターである$iに1だけ追加する」
  $i=$i+1; →とてもよく使うので
  $i++;   →このように省略表記する

  • forとwhileどちらを使う???
基本的にはどちらでも良い。
forの方がコンパクトに書くことができる。

whileで使っている「$i=1;」(初期化)や、
「$i++1」(カウンター)を、forは一行にまとめられる。
 ↓
for ( $i=0 ; $i < 10 ; $i++ )