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 }?>