4)フレーム版チャット(ダミーページでキャッシュさせない)を作る。
   下図のようにチャットのダミーページを作って、ダミーページから本当のチャットにキャッシュされたデータが送信されないようにする。
   このような処理をリダイレクション処理といいます。
       php22-4
  ①チャットの入り口のプログラム
    HTMLファイル名:chat.html

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>チャットフレーム版(ダミーページでキャッシュさせない)</title>
<script type="text/javascript" src="chat.js"></script>
</head>
<body>
チャットフレーム版(ダミーページでキャッシュさせない)<br>
<form name="form1" method="post" action="chatDummy.php" id="sub">
ハンドル名:<input name="fHandle" type="text" id="hand">
<input name="fIn" type="hidden" value="logIn"> <!-- 最初のログインの情報を送信している。 -->
<input type="submit" name="Submit" value="入室">
<input type="reset" name="Submit2" value="クリア">
<span style="color:red;" id="handMsg"></span>
</form>
</body>
</html>
    Javascriptのファイル名:chat.js
window.onload=function(){
document.getElementById("sub").onsubmit=function(e){
if(document.getElementById("hand").value==""){
document.getElementById("handMsg").innerHTML="※ハンドル名を入力してください。";
if(e.preventDefault){ //「preventDefault()」メソッドがあるかをチェックしています・
e.preventDefault(); //IE以外のブラウザの場合、ひとつ前のイベントを取り消しをしています。
}
return false; //IEの場合のは、「return false」でイベントが取り消されます。
}
return true; //この行は、なくてもかまいませんが、IEの場合、イベント続行の意味がありますので書いておきます。
}
}
  ②ダミーページのプログラム(chatDummy.php)
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>チャットフレーム版(ダミーページでキャッシュさせない)</title>
</head>
<?php
if(isset($_REQUEST['fHandle']))$sHandle=$_REQUEST['fHandle'];//ハンドル名の受信
if(isset($_REQUEST['fIn']))$sIn=$_REQUEST['fIn'];//入室画面から入室したことを表すフラグの受信
if($sIn=="logIn"){//入室画面から入室した時の処理
$sMsg="{$sHandle}さんが入室されました。";
$conn=mysqli_connect('localhost','******','******') or die("データベース接続に失敗しました");
mysqli_select_db($conn,'chat_db') or die("指定されたデータベースは存在しません。");
$sql="insert into chat_tbl values(null,'{$sHandle}','{$sMsg}',null);";
if(mysqli_query($conn,$sql)){
$sendPara="fHandle={$sHandle}"; //ハンドル名の送信するためのデータ作成
}
else{
echo "データの書き込みに失敗しました。\n";
}
mysqli_close($conn);
}
?>
<frameset rows="150,*">
<frame src="msgIn.php" name="frame1">
<frame src="msgDisp.php" name="frame2">
<noframes>
このページはフレーム対応のブラウザでご覧ください。
</noframes>
</frameset>
<?php
$logIn="Location:chat.php?".$sendPara;
header($logIn);//chat.phpの呼び出し、キャッシュをためない。
?>
</html>
  ③本当のチャットのプログラム(chat.php)
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>チャットフレーム版(ダミーページでキャッシュさせない)</title>
</head>
<?php
if(isset($_REQUEST['fHandle']))$sHandle=$_REQUEST['fHandle'];//ハンドル名の受信
if(isset($_REQUEST['fIn']))$sIn=$_REQUEST['fIn'];//入室画面から入室したことを表すフラグの受信
$sendPara="fHandle={$sHandle}"; //ハンドル名の送信するためのデータ作成
?>
<frameset rows="150,*">
<frame src="msgIn.php?<?= $sendPara ?>" name="frame1">
<frame src="msgDisp.php" name="frame2">
<noframes>
このページはフレーム対応のブラウザでご覧ください。
</noframes>
</frameset>
</html>
  ④メッセージを入力、送信メッセージのプログラム(msgIn.php)
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>チャットフレーム版(ダミーページでキャッシュさせない)</title>
</head>
<body>
<div>チャットフレーム版(ダミーページでキャッシュさせない)<br>
<?php
if(isset($_REQUEST['fHandle']))$sHandle=$_REQUEST['fHandle']; else $sHandle=""; //ハンドル名の受信
if(isset($_REQUEST['fMsg']))$sMsg=$_REQUEST['fMsg']; else $sMsg=""; //メッセージの受信
if(isset($_REQUEST['fSub2']))$sSub2=$_REQUEST['fSub2']; else $sSub2=""; //退室ボタンの値の受信
?>
ハンドル名:<span style="color:red;"><?= $sHandle ?></span>
<form name="form1" method="post" action="msgIn.php">
メッセージ:
<input name="fMsg" type="text" size="100"><!-- メッセージの入力 -->
<input name="fHandle" type="hidden" value="<?= $sHandle ?>"><!-- ハンドル名の再送用 -->
<input type="submit" name="fSub1" value="発言">
<input type="submit" name="fSub2" value="退室">
</form>
</div>
<?php
if($sSub2=="退室"){//退室時の処理
$sMsg="{$sHandle}さんが退室されました。";
}
$conn=mysqli_connect('localhost','******','******') or die("データベース接続に失敗しました");
mysqli_select_db($conn,'chat_db') or die("指定されたデータベースは存在しません。");
if($sMsg!=""){//メッセージが入力されている場合。
$sql="insert into chat_tbl values(null,'".$sHandle."','".$sMsg."',null);";
if(!mysqli_query($conn,$sql)){
echo "データの書き込みに失敗しました。\n";
}
}
mysqli_close($conn);
?>
<script type="text/javascript">
<!--
top.frame2.location.href="msgDisp.php";//入力が終了して発言ボタンを押したとき、下のフレームのメッセージが更新されるように「msgDisp.php」を呼び出している。 // -->
</script>
</body>
</html>
  ⑤メッセージを表示するためのプログラム(msgDisp.php)
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>チャットフレーム版(ダミーページでキャッシュさせない)</title>
</head>
<body>
<div><span style="color:blue;">メッセージ:</span>
<?php
date_default_timezone_set('Asia/Tokyo'); //タイムゾーンを「アジア/東京」に設定している
$year=date("Y年");
$moon=date("m月");
$day=date("d日");
$week=array("日","月","火","水","木","金","土");
$week="(".$week[date("w")].")";
$hour=date("H時");
$minute=date("i分");
$second=date("s秒");
$date=$year.$moon.$day.$week.$hour.$minute.$second;
echo "<span style=\"color:green;\"> 現在時間:{$date}</span>"; //現在時間の表示
?>
</div>
<hr>
<?php
$conn=mysqli_connect('localhost','******','******') or die("データベース接続に失敗しました");
mysqli_select_db($conn,'chat_db') or die("指定されたデータベースは存在しません。");
$sql="select * from chat_tbl order by dateTime desc;";//データベースの内容を日付、時間の新しい順に取り出すためのSQL
if($result=mysqli_query($conn,$sql)){
while($row=mysqli_fetch_array($result,MYSQL_ASSOC)){
?>
<?= $row["handle"] ?><span style="color:red;">></span>
<?= $row["message"] ?><span style="color:red;">:</span>
<span style="color:blue;"><?= $row["dateTime"] ?></span>
<hr>
<?php
}
}
else{
echo "クエリーに失敗しました。\n";
}
mysqli_close($conn);
?>
</body>
</html>