2012年04月05日
講義042日目
------------------------------1H------------------------------
★管理画面作成
●コメント編集画面
・comment_list
編集画面のデータ混乱を防ぐためにセッションのクリア
・comment_edit
bbs/tmp/に編集される画像を一時的に保存するためのロジック
・comment_input
最初にこのページに来たのか、戻るボタンで来たのかを分岐
{if $smarty.session.tmpnickname != ""}
<input type="text" name="nickname" size"20"
value="{$smarty.session.tmpnickname}">
{else}
<input type="text" name="nickname" size="20"
value="{$comment.nickname}">
{/if}
<textarea>内に無用なインデントを入れるとテキストエリア内でインデントが作られる場合がある(smartyのせい?)
・comment_edit_comfirm
------------------------------2H------------------------------
★管理画面作成
●コメント編集画面
関数の中で関数を呼ぶ処理
・myUtil::getFileExt()
ファイルの拡張子を見てる
・getFileExtId()
getimagesize()で拡張子を返す
・エラー制御演算子
関数に@をつけるとエラーを表示しなくなる
ワーニング、ノーティスを出したくないところにつける
エラーをだしてくれないのであまり使用しない方がいい
------------------------------3H------------------------------
★管理画面作成
●コメント編集画面
・confirm/resultでのページ更新を防ぐロジックの実装
input.php
$_SESSION["comment_edit_input_id"] = rand();
input.tpl
<input type="hidden" name="comment_edit_input_id"
value="{$smarty.session.comment_edit_input_id}">
comment_edit_confirm.php
//input.phpから来たかどうかを判断する処理
if($_SESSION["comment_edit_input_id"] != $_POST["comment_edit_input_id"]){
header("Location:http://localhost/bbs/admin/index.php");
}else{
$_SESSION["comment_edit_input_id"] = rand();
}
//result.phpでconfirm.phpから来たかどうか判断するための処理
$_SESSION["comment_edit_confirm_id"] =rand();
comment_edit_confirm.tpl
・確認
confirmでページ更新
resultでページ更新
confirmに直接URLを打つ
resultに直接URLを打つ
------------------------------4H------------------------------
★管理画面作成
●内部結合と外部結合
comment_delete.php修正
・内部結合
SELECT * FROM comment,reply WHERE comment. id = reply.comment_id;
SELECT * FROM comment INNER JOIN reply
WHERE comment,id = reply.comment_id;
二つ以上のテーブルで条件と一致するもののみ取得
$sql = "DELETE comment,reply
FROM comment,reply
WHERE comment.id =reply.comment_id
AND comment.id ='".$id."'";
・外部結合
(LEFT JOINで左側基準)
SELECT * FROM comment LEFT JOIN reply
ON comment.id = reply.comment_id;
(RIGHT JOINで右側基準)
SELECT * FROM reply RIGHT JOIN comment
ON comment,id = reply.comment_id;
片方のテーブルを基準にして、
そのテーブルの全データを条件に一致するもう片方のテーブルを取得
$sql = "DELETE comment,reply
FROM comment LEFT JOIN reply
ON comment.id = reply.comment_id
WHERE comment.id ='" . $id. "'";
mysql_query($sql);
・完全外部結合
UNIONを使う
------------------------------5H------------------------------
------------------------------6H------------------------------
★管理画面作成
●メンバー編集画面の作成
comment_edit_input
comment_edit_confirm
comment_edit_result
を参考にして
member_edit_input
member_edit_confirm
member_edit_result
の作成
★symfonyを使ったサイト作成の発表会見学
-----------------------------memo------------------------------
セッションの使い方は奥が深そう
2012年4月5日木曜日
2012年3月27日火曜日
2012年03月27日 講義037日目
2012年03月27日
講義037日目
------------------------------1H------------------------------
★javascript
●jqury
・changeSpace.php
jquery部分
<?php
$num = $_GET["num"];
if($num){
echo "取得した数字は".$num."です";
}else{
echo "数字ではないか、0です";
}
・HTML部分
<script type="text/javascript">
function getChangeSpace(){
$.ajax({type:'POST',
dataType:'html',
data:$(this).serialize(),
success:function(i){
$('#change_space').html(i);
},
url: "./changeSpace.php?num=3"
});
}
</script>
------------------------------2H------------------------------
★javascript
●データベースに接続してみる
・jq.php
jquery部分
function getChangeSpace(){
$.ajax({type:'POST',
dataType:'html',
data:$(this).serialize(),
success:function(i){
$('#change_space').html(i);
},
url: "./changeSpace.php?num=3&member_id=" + $("#member_id").val()
});
}
</script>
・jq.php
HTML部分
<button id= "ajaxiventtest" onclick="getChangeSpace()">
AJAXテスト</button>
<form action="">
<input type="text" id="member_id">
<button onclick="getChangeSpace();return false;">
IDを入力してクリック
</button>
</form>
<br>
<div id="change_space">
この位置が書き換わる
</div>
・changeSpace.php
$member_id = $_GET["member_id"];
if(member_id){
mysql_connect("localhost", "ユーザ名","パスワード");
mysql_select_db("study");
$sql = "SELECT * FROM member WHERE id = ".$member_id;
$result = mysql_query($sql);
$row = mysql_fetch_array($result);
echo "<br>入力された番号は".$row["nickname"]."さんです";
}
●サーバーのルートのパスの取り方
サーバー移行を前提としたルートのパスの取り方
・BBS/lib/mySubmitUtil
require_once(realpath(".") . "/lib/DbWrapper.class.php");
↓
$web_root_path = substr($_SERVER['SCRIPT_FILENAME'] ,0 , -strlen($_SERVER['SCRIPT_NAME']));
require_once($web_root_path . "/lib/DbWrapper.class.php");
・substr()
・strlen()
-をつけると後ろから
・$_SERVER['SCRIPT_FILENAME']
動いてるファイル名を取得
$_SERVER['SCRIPT_NAME']
ホストから見た相対パスを取得
$SERVER['DOCUMENT_ROOT']でのルートの取り方は問題が発生する(サーバー)
------------------------------3H------------------------------
★smarty
●smarty
・拡張子.tpl
・smartyのlibsフォルダをプロジェクトの/直下にコピー
・プロジェクト/直下に以下のフォルダを作成
templates
templates_c
config
cache
・
require("./libs/Smarty.class.php");
$smarty = new Smarty;
・assign関数
テンプレート側で使う変数を渡す
・display
使用するテンプレートを指定
・tenplatesフォルダに
index.tplを作成
・index.php内のhtml部分を全て切り取りindex.tplへ
・
------------------------------4H------------------------------
★smarty
●smarty内で動的な処理を表現する
{}で括る
・->assign()
に入ってる変数を使えるようにする
・
<?php echo $_SESSION["nickname"];?>
さん、こんにちは | <a href="./logout.php">ログアウト</a>
</div>
↓
{smarty.session.nickname}
<?php echo $_SESSION["submit_id"]?>
↓
{smarty.session.submit_id}
・コメントアウト
{* *}
・
while($row = mysql_fetch_array($result)) {
print "<div class=\"commentBox\">";
//urlカラムにデータが入っていたら名前にリンクを貼る
if($row["url"]!=""){
print "<a href=\"" . $row["url"] . "\" target=\"_blank\">";
print nl2br(htmlspecialchars($row["nickname"]));
print "</a>";
print "さんの投稿<br>";
}else{
print nl2br(htmlspecialchars($row["nickname"]))."さんの投稿<br>";
}
//画像を出力する
if($row["photo"] != ""){
print "<img src=\"./img/".$row["photo"]."\" width=\"100\"><br>";
}
print nl2br(htmlspecialchars($row["content"]))."<br>";
//年月日を装飾する
//strtotime関数:文字列の日時をtime型に変える
print date("Y年m月d日",strtotime($row["created_at"]))."<br>";
print "<a href=\"reply.php?comment_id=".$row["id"]."\">返信する</a>";
print "</div>";
↓テンプレート化
{foreach from=$rows item=row key=keyname}
<div class="commentBox">
{* urlカラムにデータが入っていたら名前にリンクを貼る *}
{if $row.url != ""}
<a href="{$row.url}">
{$row.nickname|htmlspecialchars}
</a>
さんの投稿<br>
{else}
{$row.nickname|htmlspecialchars}さんの投稿<br>
{/if}
{*画像を出力する*}
{if $row.photo != ""}
<img src="./img/{$row.photo}" width="100"><br>
{/if}
{$row.content|htmlspecialchars|nl2br}<br>
{*
//年月日を装飾する
//strtotime関数:文字列の日時をtime型に変える
print date("Y年m月d日",strtotime($row["created_at"]))."<br>";
*}
{$row.created_at|date_format:"%Y年%m月%e日"}<br>
<a href="reply.php?comment_id={$row.id}">返信する</a>
</div>
{foreach from=$row.reply item=row_reply}
<div class="replyBox">
{$row_reply.nickname|htmlspecialchars} さんの返信<br>
{$row_reply.content|htmlspecialchars|nl2br}<br>
{$row_reply.created_at|date_format:"%Y年%m月%e日"}<br>
</div>
{/foreach}
{/foreach}
・foreach
from:ループの元になるデータ
item:ループの中で使う変数
key :ループの中で使うインデックス
・関数を使うときは|を関数前に置く
・$smarty->display("index.tpl");
使いたいテンプレートを出力
・テンプレートからテンプレートを呼び出すこともできる
------------------------------5H------------------------------
------------------------------6H------------------------------
★smarty
●submit.phpもテンプレート化する
-----------------------------memo------------------------------
講義037日目
------------------------------1H------------------------------
★javascript
●jqury
・changeSpace.php
jquery部分
<?php
$num = $_GET["num"];
if($num){
echo "取得した数字は".$num."です";
}else{
echo "数字ではないか、0です";
}
・HTML部分
<script type="text/javascript">
function getChangeSpace(){
$.ajax({type:'POST',
dataType:'html',
data:$(this).serialize(),
success:function(i){
$('#change_space').html(i);
},
url: "./changeSpace.php?num=3"
});
}
</script>
------------------------------2H------------------------------
★javascript
●データベースに接続してみる
・jq.php
jquery部分
function getChangeSpace(){
$.ajax({type:'POST',
dataType:'html',
data:$(this).serialize(),
success:function(i){
$('#change_space').html(i);
},
url: "./changeSpace.php?num=3&member_id=" + $("#member_id").val()
});
}
</script>
・jq.php
HTML部分
<button id= "ajaxiventtest" onclick="getChangeSpace()">
AJAXテスト</button>
<form action="">
<input type="text" id="member_id">
<button onclick="getChangeSpace();return false;">
IDを入力してクリック
</button>
</form>
<br>
<div id="change_space">
この位置が書き換わる
</div>
・changeSpace.php
$member_id = $_GET["member_id"];
if(member_id){
mysql_connect("localhost", "ユーザ名","パスワード");
mysql_select_db("study");
$sql = "SELECT * FROM member WHERE id = ".$member_id;
$result = mysql_query($sql);
$row = mysql_fetch_array($result);
echo "<br>入力された番号は".$row["nickname"]."さんです";
}
●サーバーのルートのパスの取り方
サーバー移行を前提としたルートのパスの取り方
・BBS/lib/mySubmitUtil
require_once(realpath(".") . "/lib/DbWrapper.class.php");
↓
$web_root_path = substr($_SERVER['SCRIPT_FILENAME'] ,0 , -strlen($_SERVER['SCRIPT_NAME']));
require_once($web_root_path . "/lib/DbWrapper.class.php");
・substr()
・strlen()
-をつけると後ろから
・$_SERVER['SCRIPT_FILENAME']
動いてるファイル名を取得
$_SERVER['SCRIPT_NAME']
ホストから見た相対パスを取得
$SERVER['DOCUMENT_ROOT']でのルートの取り方は問題が発生する(サーバー)
------------------------------3H------------------------------
★smarty
●smarty
・拡張子.tpl
・smartyのlibsフォルダをプロジェクトの/直下にコピー
・プロジェクト/直下に以下のフォルダを作成
templates
templates_c
config
cache
・
require("./libs/Smarty.class.php");
$smarty = new Smarty;
・assign関数
テンプレート側で使う変数を渡す
・display
使用するテンプレートを指定
・tenplatesフォルダに
index.tplを作成
・index.php内のhtml部分を全て切り取りindex.tplへ
・
------------------------------4H------------------------------
★smarty
●smarty内で動的な処理を表現する
{}で括る
・->assign()
に入ってる変数を使えるようにする
・
<?php echo $_SESSION["nickname"];?>
さん、こんにちは | <a href="./logout.php">ログアウト</a>
</div>
↓
{smarty.session.nickname}
<?php echo $_SESSION["submit_id"]?>
↓
{smarty.session.submit_id}
・コメントアウト
{* *}
・
while($row = mysql_fetch_array($result)) {
print "<div class=\"commentBox\">";
//urlカラムにデータが入っていたら名前にリンクを貼る
if($row["url"]!=""){
print "<a href=\"" . $row["url"] . "\" target=\"_blank\">";
print nl2br(htmlspecialchars($row["nickname"]));
print "</a>";
print "さんの投稿<br>";
}else{
print nl2br(htmlspecialchars($row["nickname"]))."さんの投稿<br>";
}
//画像を出力する
if($row["photo"] != ""){
print "<img src=\"./img/".$row["photo"]."\" width=\"100\"><br>";
}
print nl2br(htmlspecialchars($row["content"]))."<br>";
//年月日を装飾する
//strtotime関数:文字列の日時をtime型に変える
print date("Y年m月d日",strtotime($row["created_at"]))."<br>";
print "<a href=\"reply.php?comment_id=".$row["id"]."\">返信する</a>";
print "</div>";
↓テンプレート化
{foreach from=$rows item=row key=keyname}
<div class="commentBox">
{* urlカラムにデータが入っていたら名前にリンクを貼る *}
{if $row.url != ""}
<a href="{$row.url}">
{$row.nickname|htmlspecialchars}
</a>
さんの投稿<br>
{else}
{$row.nickname|htmlspecialchars}さんの投稿<br>
{/if}
{*画像を出力する*}
{if $row.photo != ""}
<img src="./img/{$row.photo}" width="100"><br>
{/if}
{$row.content|htmlspecialchars|nl2br}<br>
{*
//年月日を装飾する
//strtotime関数:文字列の日時をtime型に変える
print date("Y年m月d日",strtotime($row["created_at"]))."<br>";
*}
{$row.created_at|date_format:"%Y年%m月%e日"}<br>
<a href="reply.php?comment_id={$row.id}">返信する</a>
</div>
{foreach from=$row.reply item=row_reply}
<div class="replyBox">
{$row_reply.nickname|htmlspecialchars} さんの返信<br>
{$row_reply.content|htmlspecialchars|nl2br}<br>
{$row_reply.created_at|date_format:"%Y年%m月%e日"}<br>
</div>
{/foreach}
{/foreach}
・foreach
from:ループの元になるデータ
item:ループの中で使う変数
key :ループの中で使うインデックス
・関数を使うときは|を関数前に置く
・$smarty->display("index.tpl");
使いたいテンプレートを出力
・テンプレートからテンプレートを呼び出すこともできる
------------------------------5H------------------------------
------------------------------6H------------------------------
★smarty
●submit.phpもテンプレート化する
-----------------------------memo------------------------------
登録:
投稿 (Atom)