web制作 | 夜間飛行 備忘録

web制作講座で教わったあれこれを書き留めていきます

74日目 | web制作

本日は…

■昨日の残りを解説
check.php

<?php
$_SESSION['error_name'] = $error_name;
?>

というシリーズを各項目分作成して、エラーメッセージをセッションに格納していく。
⇒エラーのときindex.phpにこれを呼び出すようにしてやる

<?php
if(isset($_SESSION['mail']['error_name'])){
  $error_name = $_SESSION['mail']['error_name'];
}
?>

で、関数を作る。
あとはエラーを表示したいところに$error_nameを代入してやればいい。

■unsetで作ったセッションの内容を片付けていってやる
1つ1つ消していくことは大変なので
→$_SESSIONのなかに個別の小箱を作ってnameやemailと名前つけたものを、さらにmailという大きな箱に入れてしまえば、mailを削除するだけで全部消すことが可能(二次元配列)。


cookieの話
…セッションファイルを作ると、同時に作成される
・同じサイトにもう一度アクセスすると、前に入力した文字が表示されたりする現象は、これによる。
 …idを元にセッションファイルにアクセスして、入力した内容を吸い出して表示している(サーバーに情報を残している)
・unsetでセッションファイルだけ消しても、cookieの情報は残ってしまう
 ※cookieはブラウザごとに違うところに保存される。
  ex)chromefirefoxでは保管場所が違うので連動していない

<?php
if(isset($_COOKIE[session_name])){
  setcookie(session_name(),'',time()-20000,'/');
}
?>

■function h ()をfunc.phpに格納
func.phpを作成する
中に

<?php
function h($str){
  return htmlscpecialchars($str,ENT_QUOTES,'utf-8');
}
?>

を入れ込み、index.phpとsend.phpと、checl.phpのfunction以下を消す。
変わりに

<?php
require_once(__FILE__). '/func.php'; 
?>

を入れ込んでやると、functionをfunc.phpから呼び出せるようになる
require_onceで、一度だけファイルを呼び出してこいという命令。

★session_start();も入れ込める


■フォームを改造する
autofocus
required
placeholder
maxlength
などを各項目に入れてやる

emailのタイプをtextからemailに変更してやる。
→@マークのチェックをしてくれる。
※※html5の機能は古いブラウザでは働かないので注意


■空白でも送れてしまう問題他
空白も文字としてカウントされるので、当然と言えば当然
※じゃあaaaaaaはいいのか?という問題もある
※名前を偽名にされても分からない
※適当なメアドを入れられる可能性もある

解決するには

<?php
if(mb_strlen(trim(mb_convert_kana($name,"s",'utf-8')))!=mb_strlen($name,'utf-8')){
  $error_name = '名前の前後、あるいは全てに空白文字が使われています。';
}
?>

といったものを入れてやる。

●Location:./~~について
ここはフルパスにしておいたほうが安全


cssでいじりたいときは、まるっとソース(ページを開いた状態で取れるもの)をコピーして、
それに足してcssをかけてやれば、簡単に調整できる。
 …phpのソースが一切表示されないから

→当然cssファイルを外部から読み込ませることも可能


■データベースの話を少し