2011年1月24日月曜日

1/24覚書

1時間目
・お掃除の後はfizzbuzz
2時間目
Developers Summit 2011に課外授業(会社見学代替)で行くかも。席が空いてれば;
・mb.strlenで入力チェックの関数、とりあえず入力まで。
mb(マルチバイトいわゆる日本語).strlen(文字列の長さ)を調べてくれる関数。

こんな感じ
//エラーメッセージ
$error_msg ="";

//ボタンの押下確認
if ($_POST["send"]) {

 //リクエストからフォームに入力された値を取得
 $text =$_POST["text"];

 //未入力チェック
 if (($text == "" )|| ($text == NULL)) {
  $error_msg ="入力されていません";
 }

 //文字数チェック(20文字まで)
 //if (mb_strlen($text,"utf8") >= 5) {
 if (mb_strlen($text,"utf8") < 4 || mb_strlen($text,"utf8") > 16) {
  $error_msg = "4文字以上16文字以下で入力してください";
 }

 //英数字チェック
 if (mb_ereg('[^0-9a-zA-Z]', $text)) {
  $error_msg="英数字で入力してください";
 }
}

3-4時間目
・掲示板に組み込む。ifの入れ子でこんがらがった。まだ早かった;
エラーフラグはみんなならpasswordで入れてるはず。
$delpass = $_POST["delpass"];
$error_msg ="";
//未入力チェック
if (($delpass == "" )|| ($delpass == NULL)) {
 $error_msg ="入力されていません";
 $delpass_error_yn = 'y';
 $error_yn = "y";
}
//文字数チェック(16文字まで)
if (mb_strlen($delpass,"utf8") < 4 || mb_strlen($delpass,"utf8") > 16) {
 $error_msg = "英数字および4文字以上16文字以下で入力してください";
 $delpass_error_yn = 'y';
 $error_yn = "y";
}

//英数字チェック
if (mb_ereg('[^0-9a-zA-Z]',$delpass)){
 $error_msg="英数字で入力してください";
 $delpass_error_yn = 'y';
 $error_yn = "y";
}

ちょい息抜き
http://8tracks.com/CCCDとDRM以外の音源ならUP可能で共有できるそうな。
作業用BGMより軽そうだなあ。

5時間目
削除にもパスワードのチェックと一致認証
ていうかね、
// エラーがなかったらデータベースにデータを挿入
if ($error_yn == 'n') {
これがまんま抜けてた_| ̄|○そら消えちゃうよ……。
あとね、インデントを同じ処理の部分は同じ揃えにする大切さがわかりました。
なんか返信の写真うpできないなー、で悩んで、インデントそろえたら、
$row = mysql_fetch_row($result);
が消えてた。おそらくコピペの弊害かなと。

明日は入力チェックをクラスで外部にまとめる予定。
DBエラーチェックもやるっぽい。
あと終了文、どのタイミングなのかなあと。

2011年1月21日金曜日

1/22覚書自宅編

//delpass取得処理
$sql = "select delpass from comment order by id desc limit 1";
$result = mysql_query($sql);
$row = mysql_fetch_array($result);
$row["delpass"];

  <!-- パスワード入力&整合性結果  -->
  <?php if($delpass_error_yn == 'y') {?>
   パスワードが入力されていないか、設定したパスワードと一致しません。 <br/>
   <?php } else {?>
   削除しました<br />
  <?php } //if文終わり?>

1/21覚書

詰め物取れてもう一回歯医者_| ̄|○

・1-3時間目
論理削除の続き。
reply_delete.phpとreply_delete_submit.php追加。

*reply_delete.php*
// クエリを送信する
$sql = "SELECT * FROM reply where delete_flg =0 and id = '".$comment_id."'";
$result = mysql_query($sql);
 <form action="reply_delete_submit.php" method="post">
  <input type="submit" name="delete" value=" 削除する ">
  <input type="hidden" name="comment_id" value="<?php echo $comment_id;?>">

*reply_delete_submit.php*
// 論理削除update文を実行
$sql = "update reply set delete_flg =1 where id = '".$comment_id."'";
$result = mysql_query($sql);

*index.php*//返信内容表示を下記に変更
$sql = "SELECT * FROM reply where delete_flg=0 and comment_id 
     = '".$row1["id"]."' order by created_at desc";

replyのIDを削除したいから、comment_idよりreply_idにしたほうがわかりやすいなと、
解説を聞きながら思った・・・・・・。

4時間目
・記事削除用パスワード
手順
1.投稿時にパスワードの入力を行わせる。
・indexとreplyのフォームにパスワード入力欄追加
2.パスワードのデータをDBに登録する。
・commentとreplyのカラムにパスワード入力用カラム追加
 ※英数字16文字
alter table comment add delpass varchar(16) ;

3.submitとreply_submitの登録データにパスワードも追加
ここはURLやmailと一緒だよ。

POINT
・パスワード入力チェック

整合性の部分でつまずいた・・・・・・それは来週。

1/20覚書

最初の1時間だけ欠席して歯医者さんに行ってきました。
多分1年ぐらいかかりそう;
インデントは自分で揃えてくだしあ。

1~3時間
削除ページ
☆以下共通☆
comment_idだけど、ID取りにいってるからねー。この掲示板ではcomment_idとidは一緒だよ。

*index.php*
<?php } ?>
   <a href="./delete.php?comment_id=<?php echo $row1["id"]?>">削除</a>
*delete.php*
<?php while($row = mysql_fetch_array($result)) { ?>
  <div style="border:1px solid #ddd;margin-bottom:10px;padding:5px;">
  <?php if (($row["url"]=="") or ($row["url"]==null)) { ?>
  <?php echo $row["nickname"] ?> さんの投稿 <br />
  <?php }else { ?>
   <a href="<?php echo $row["url"]?>"><?php echo $row["nickname"]?></a> さんの投稿
  <?php } ?>
  <?php if (($row["mail1"] != "" ) || ($row["mail1"] != null )) { ?>
   <a href="<?php echo $row["mail1"]?>">メール</a>
  <?php } ?>
  <br />
  <?php echo $row["content"] ?>
   <br>
  <?php if (($row["photo"]!="") or ($row["photo"]!=null)) { ?>
   <img src="./img/<?php echo $row["photo"]?>" alt ="<?php echo $row["photo"]?>"
    width=200><br />
  <?php } ?>
  <?php if (($row["photo2"]!="") or ($row["photo2"]!=null)) { ?>
   <img src="./img2/<?php echo $row["photo2"]?>" alt ="<?php echo $row["photo2"]?>"
    width=200><br />
  <?php } ?>
  <?php echo $row["created_at"] ?>
  </div>
 <?php } //while文終わり ?>
 本当に削除してもいいですか? <br><br>
 <form action="delete_submit.php" method="post">
  <input type="submit" name="delete" value=" 削除する ">
  <input type="hidden" name="comment_id" value="<?php echo $comment_id;?>">
 </form>

*delete_submit*
<pre class="prettyprint">
//comment_id(コメントテーブルの主キー)を取りに行く
$comment_id = $_POST["comment_id"];
//mysql に接続する
$db = mysql_connect('localhost','yamazaki','2100');
// データベースを選択する
$sdb = mysql_select_db('study');
// 親子一緒にDELETE文を実行
$sql = "delete FROM comment where id = '".$comment_id."'";
$result = mysql_query($sql);
$sql = "delete FROM reply where id = '".$comment_id."'";
$result = mysql_query($sql);
</pre>
<html>
 <head>
  <meta http-equiv="content-type" content="text/html; charset=utf-8" />
  <title>SHONAN BBS</title>
 </head>
 <body>
 <h1>SHONAN BBS</h1>

 削除しました。<br />
<a href="index.php"> 戻る </a>

・4時間目
物理削除と論理削除
物理削除:完全に削除。例)Delete文
論理削除:削除自体は行わないが、フラグなどで削除したことにし、表示上見えないようにする。
論理削除に必要なもの
DB側:テーブル・フラグ
ソースコード:参照(select)・削除つか判定フラグ
◆まずはテーブル作成
alter table comment add delete_fig tinyint(1) default 0;
alter table reply add delete_fig tinyint(1) default 0;

MySQLではカラム単位でtrue/falseのbool型が使えない。0か1の判断しかない。
なのでtinyint(1)で0~9までの数字で判断する処理を行う。

◆実際にフラグつけてみる。
update comment set delete_flg = 1;

index.phpにもフラグつけてみる。
// クエリを送信する
$sql = "SELECT * FROM comment where delete_flg = 0 order by created_at desc";

F5更新するとデータが見えなくなっている。これが論理削除の基本処理。
update comment set delete_flg = 0;で戻すよ。

ここから実装。
delete_submit.php以外にdelete_flg = 0;フラグ追加。
submit(画像のところ)
$sql = "select id from comment where delete_flg = 0 order by id desc limit 1";
それ以外
$sql = "SELECT * FROM reply where delete_flg = 0 and id = '".$comment_id."'";

明日続きとパスワード認証で削除。
来週はエラーチェック。
さらに今後は実習で仕様書見て作ってみよう。(登録+編集+削除+リスト表示)


おまけっていうかネタバレになってもたけど……。
・メールアドレス正規表現やってみた。
//メールアドレス正規表現

if ($mail1_mail1 !=null || $mail1_mail1 !="") {
 if (! ereg ("[a-zA-Z0-9_.\-]+@[a-zA-Z0-9._\-]+",$mail1_mail1)){
 $mail1_error_yn = 'y';
 $error_yn = "y";
 }
}
<?php if($mail1_error_yn == 'y') {?>
 メールアドレスが正しくありません <br/>
 <?php }?>

2011年1月19日水曜日

1/19覚書

歯痛恐るべし。
明日午前中予約入れました……。
12時間睡眠とか精神的なものも疑いたくなる;

午前中…??

3~4時間目
**問題1**
今まで作ってきた掲示板にメールアドレスを入力し表示する。

 -- 手順 --
 1.各フォームにメールアドレスを入力する欄を追加する
 2.リクエストからメールアドレスを受け取る処理の追加
 3.DBのコメントテーブルにカラムの追加(メールアドレス)
 4.DBの返信テーブルにカラムの追加(メールアドレス)
 5.DBにデータを登録する部分にメールアドレスの追加

カラム追加は省略。
*index.php*
<?php if (($row1["url"] == "" ) || ($row1["url"] == null )) { ?>
<?php echo $row1["nickname"] ?> さんの投稿 <br>
<?php }else { ?>
<a href="<?php echo $row1["url"]?>"><?php echo $row1["nickname"]?></a> さんの投稿
<?php } ?>
<?php if (($row1["mail1"] != "" ) || ($row1["mail1"] != null )) { ?>
 <a href="mailto:<?php echo $row1["mail1"]?>">メール</a>
<?php } ?>
<br />

投稿者の後ろにつけよう、ってことになったのでこんな感じ。
*submit.php*
$mail1 = $_POST["mail1"];

// クエリを送信する
$sql = "INSERT INTO comment (nickname, content, url, mail1,created_at)
values ('".$nickname."','".$content."','".$url."','".$mail1."','".date('Y-m-d H:i:s')."')";

*reply.php*

<?php if (($row["mail1"] != "" ) || ($row["mail1"] != null )) { ?>
&nbsp;<a href="mailto:<?php echo $row["mail1"]?>">メール</a>
<?php } ?>

5時間目
先生の答え合わせ。

6時間目
削除ページ作ってみよう…だったけど、どんなページにするか聞きそびれた;
とりあえず確認画面と単純に削除ボタンつけて削除、だけでいいみたい。
// DELETE文を実行
$sql = "delete from study . comment where id=$comment_id";
idを区別してこんな感じなのかなぁ。

コードをハイライトする便利なウィジェット
うーん。色分け……。めんどい;

またあした~。

2011年1月18日火曜日

1/18覚書

1時間目はfor文FizzBuzz。最大101までって思い違いをしてもうた……。
しかも昨日の分UPし忘れてたし; 頭回ってNEEE;
あー、名前とかもだ……_| ̄|○
ほんと頭回ってないなぁ;;

2時間目
index分離
ていうか返信ェ……。

3時間目
index分離。aタグに余計な半角発見。昨日(ry
<a href="reply.php?comment_id=<?php echo $row1["id"]?>"> 返信する </a>
id=のあとにすっごく余計な半角スペースがががが。
aタグの余計な半角なんで入れてんだ; 昨(ry
あとはレイアウト崩してて、div styleをindexと同じにしてた_| ̄|○
直してすっきり。
あとは返信画像、URLの空文字とNULL判定。
==でいいところを!=って逆判定してた…なんだかなあ;
画像は
if (($row2["photo"] != "") || ($row2["photo"] != null)) { の条件で合ってた……。
自宅ソースみなおそ;

4時間目
先生の分離作業説明。
聞きながら見直してて気づく。
$sql =" update reply set~の名称がフォルダ名であり、indexのimg srcの指定先と等しいと。

気づくの遅っ;

追加したい機能/直したい機能でブレスト……ブレスト?
出典 http://www.exbuzzwords.com/static/keyword_112.html
ブレストとは、ブレインストーミングの略称。

ブレインストーミングとは、従来の方法や考え方、先入観にとらわれず、自由なディスカッションを通じて新たなアイディアや解決策を引き出そうとする手法のこと。
出された意見に対して決して批判をしないことが重要とされる。

5時間目
てなわけでブレスト。あはちん/井田しゃん/おいらの結果。

追加したい機能
・HTMLタグ利用可能
・投稿文削除ボタン
・各投稿に対してのサイドバーへリンク追加
・掲示板自体への設定画面
・ページめくり
・ドラッグ&ドロップで画像追加
・投稿者/返信者ごとの投稿ポイント(投稿者/返信者ごとのカウンタ)とランキング
・イイネ!ボタン
・twitterとの連動投稿
・投稿ごとの一覧表示(タイトル/投稿者ごとのソート)
・CSSスイッチャーでレイアウト変更



他の方の意見は先生がまとめてるんで省略~ていうか発表してて間に合わんかった;

発表後のFix
・いいね、投稿を評価する機能
・投稿ごとのリスト表示
・メールアドレス入力機能(←どこも出てこなかったので先生追加
・会員機能/管理
・削除ボタン
・カウンタ
・ランキング
・禁止ワード
・画像形式変更
・指定件数表示
・画像サイズ変更
・twitter連動はクラスを使えばいける(3アクションほど必要らしい)

************************************************
以下後日、あれ? 追加したい機能だけじゃなかったのね;

直したい機能
・画像の拡大/縮小表示
・送信時での画像のファイル変換(表示サイズ制限)
・返信をさらに返信

Fix
・DB接続を変数化

1/17覚書

休み明け

1時間目 掃除はお休みさせていただきました;
・phpとhtml分離
<?php> ~?>でロジックを記入し、htmlタグ内で<?php echo $変数 ?>で表示

2時間目
・分離作業。分岐のif文
上部<?php>~?>に記入。
//if文の表示用の変数
$flg = "y";

html内
    <h2>分岐の表示</h2>
    <?php
    //いつも通りの書き方
    if($flg == "y"){
        print "表示OK<br />";
    }else{
        print "表示NG<br />";
    }
    ?>
で、別の書き方。
    <h2>分岐の表示2</h2>
    <p>
    <?php if($flg == "y"){ ?>
        表示OK<br />
    <?php }else{ ?>
        表示NG<br />
    <?php }?>
    </p>

…………今は正直めんどくさいと思う。
で、今度はループ。

    <h2>ループの表示</h2>
    <?php
    /*
     * 上記にてSQLを発行しており、掲示板での登校の内容を取得できています。
     * こちらを分岐表示2のように、htmlとphpを分けて書いてみてください。
     * 表示するもの「投稿者名」「登校内容」「登校日時」
     */
    ?>
    <?php while ($row1 = mysql_fetch_array($result)) {?>
    <!-- 結果はここに書き込むこと -->
    <div style="border:1px solid #ddd;margin-bottom:10px;padding:5px;">
    <?php     print $row1["nickname"];?>
     さんの投稿 <br>
    <?php print $row1["content"];?>
    <br>
    <?php print $row1["created_at"];?>
    </div>
    <?php }?>

index.phpと同じようにwhile~の↓に<div~置いて、}の前に</div>で閉じるのがミソの模様。
div style を削って<hr />で閉じる方法もある。

3時間目
・submit.phpの分離

    <?php    if ($error_yn == 'y') {?>
           エラーがあります。<br />
    <?php if($nickname_error_yn == 'y') {?>
                   ニックネームが入力されていません<br />
           <?php }?>
           <?php if($content_error_yn == 'y') {?>
                   内容が入力されていません <br/>
           <?php }?>
        <?php } else {?>
           投稿が完了しました<br />
    <?php }    //if文終わり?>



☆補足
print_r($photo);


4時間目reply_submit.php分離
・elseの閉じタグの場所で迷いました。合ってないと完了メッセージでないし;

    <?php    if ($error_yn == 'y') {?>
        エラーがあります。<br />
        <?php if($nickname_error_yn == 'y') {?>
            ニックネームが入力されていません<br />
        <?php }?>
        <?php if($content_error_yn == 'y') {?>
            内容が入力されていません <br/>
        <?php }?>
        <?php if($comment_id_error_yn == 'y') { ?>
             返信元IDが存在しません <br />
         <?php }?>
    <?php } else {?>
        投稿が完了しました<br />
    <?php }    //if文終わり?>

5時間目
・reply.phpのさらに分離

☆簡単ver

    <?php while ($row = mysql_fetch_array($result)) {    ?>
    <div style="border:1px solid #ddd;margin-bottom:10px;padding:5px;">
    投稿者名:<?php    if (($row['url']=="") or ($row['url']==null)) {    ?>
    <?php    echo $row["nickname"]    ?>
     さんの投稿 <br>
    <?php    }else {    ?>
    <a href=" <?php    echo $row["url"]?>"><?php echo $row['nickname']?> </a>さんの投稿<br />
    <?php    }    ?>
    投稿内容:<?php echo $row["content"]?>
    <br>
    投稿時間:<?php echo $row["created_at"]?>
    </div>
    <?php }    //while文終わり  ?>

6時間目
首つかリンパがいたいいいいいorz
・phpinfo();で利用している情報が一覧で出る。
・short_open_tagがONだと<?php $msg ?>を<?= $msg ?>と省略可能。
ただし、htmlTOP宣言の<?xml>と誤認されてしまうためほとんど使わない。

・reply分離の説明…MVCモデル構築のためにスライド。
今後はスマーティかシンフォニー主体でやっていくようになり、
分離する作業に抵抗がないようにしたいらしい……。