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/Foreachforeach文(フォーイーチぶん)とはプログラミング言語においてリストやハッシュテーブルなどのデータ構造の各要素に対して与えられた文の実行を繰り返すというループを記述するための文である。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++ )

2014年10月25日土曜日

74日目|制作・PHP復習


今週はずっと自由課題に取り組んでいました。


課題の条件は

  1. HTML+PHP+MySQLを使うこと
  2. つまりデータベースと連携させたコンテンツを作ること 
  3. チームで制作すること

発表ではそれぞれのチームでプレゼンとやるのだとか。
それまでに仕上がるのか・・・。

今日学んだこと

PHPの復習メモ。


<?phpif ($i == 0) {
    echo 
"iは0に等しい";
} elseif (
$i == 1) {
    echo 
"iは1に等しい";
} elseif (
$i == 2) {
    echo 
"iは2に等しい";
}


switch ($i) {
    case 
0:
        echo 
"iは0に等しい";
        break;
    case 
1:
        echo 
"iは1に等しい";
        break;
    case 
2:
        echo 
"iは2に等しい";
        break;
}
?>

「break」を書かないと次の条件式に進んでしまう。
たとえば「1」と一致しても、次の「2」までやってしまうので注意。

javascriptでも出てきたswitch。
分岐を作ろうとすると、ついif〜else if〜....とif文ばかりになってしまう。
複雑な分岐の場合はswitchを使うと良さそう。

javascriptだとこうなる。
switch文 - 条件分岐 - JavaScript入門




2014年10月21日火曜日

73日目|久々の投稿

すっっっっっかり放置してしまいました。

日々の記録は完全に忘れてましたが、
スクールにはちゃんと通っております。
 
HTML、PHP&SQL、Javascriptと、ひととおり基礎授業が終わり・・・
応用編まで進んでいます。

ざっくりいえば
簡単なWEBサイトのマークアップとCSSによるデザインができる
Javascriptを使って動的なWEBサイトを作ることができる
簡単な掲示板(チャット)を作ることができる

訓練日数を数えてみたらこれだけありました。
全部でなんと86日。
  • 6月…11日
  • 7月…16日
  • 8月…16日
  • 9月…17日
  • 10月…19日
  • 11月…7日
あと3週間もすれば訓練終了となってしまいます。
就職活動を始めている人も何人かいるようです。

果たして、費やした時間に相当する程のスキルを身につけたのだろうか・・・。
やはり自宅学習している人と、そうでない人で差がついています。
自分はどちらかというと   ↑こっち側・・・。


2014年7月18日金曜日

?日目|条件分岐とフローチャート(JavaScript)

if文の構造

今日学んだこと


  • フローチャート

    紙とペンを使って書く練習をしました
  • 比較演算子
  • 条件分岐 if文

    こんなのを書きました。
    テキストボックスに入力した数字が、とある数で割り切れるか、割り切れないかを出すプログラム。
    「%」(余剰演算子)がはじめて出てきました。
    • <title>テスト</title>
      </head>

      <body>
          <script type="text/javascript">
              function keisan(a) {
                  var c = Number(a);
                  var hantei= "";
                  if(c % 100 == 0){
                      hantei="100で割り切れる";
                  }else if(c % 5 == 0 ){
                      hantei = "5で割り切れる";
                  }else{
                      hantei = "100でも5でも割り切れない"
                  }
                  document.getElementById("answer").innerHTML = hantei;
              }
          </script>
          <input type="text" id="num1">
          <input type="button" value="判定する" onclick="keisan(num1.value);">
          <br>答え
          <div id="answer"></div>
      </body>
      </html>
その他メモ

if構文に慣れる練習。

単語がスムーズに頭に入りません。

メソッド、クラス、とか。
この辺りをちゃんと覚えてないのはやばい。
「今のはどういう意味だっけ?」と考えてるうちに授業が先に進んでしまう。


変数、パラメータ(引数)くらいは分かるようになってきました。

function...?
var...?