| チュウトリアル | |
| |TOP| |1||2||3||4||5||6||インスト1||インスト2||インスト3||Linux| | |
3.ページ分岐を作ろう〜制御構造 あなたネスケ派? 最近ではあまり使わなくなったかも知れないMSIEとNNのブラウザによる分岐をさせてみましょう。 簡単な例−変数$aが5以上なら上の文を表示します
if ($a > 5) {
echo "aは5よりも大きい";
} else {
echo "aは5よりも大きくない";
}
で、今回「もしMSIEならindex.htmlへジャンプ、そうじゃない(IE以外)ならindex2.htmlへジャンプ」というのを作成してみます。 「もしMSIEなら」という部分の判別には、「もし変数$HTTP_USER_AGENT(ブラウザ情報)に文字列’MSIE’が含まれていたら」と置き換えることが出来ます。 文字列’MSIE’を判別するには、正規表現関数 の ereg() を使ってマッチさせます。 ページへジャンプさせるには、header()
関数をつかってリダイレクトさせます。 if ( ereg ("MSIE", $_SERVER["HTTP_USER_AGENT"])){
header("Location: index.html");
exit;
} else {
header("Location: index2.html");
exit;
}
注:文字列の判定にeregを使ってますが、正規表現を使わない場合はstrstr関数でいいと思います。
if ( strstr ($_SERVER["HTTP_USER_AGENT"], "MSIE")){←書き方が逆
携帯電話で分岐今度は携帯電話のブラウザ種類によるページ分岐を作ってみましょう。 サンプルはこちら
<?
1|$ua = $_SERVER["HTTP_USER_AGENT"];
2|if(ereg("DoCoMo",$ua)){
3| header("Location: http://example.com/i.php");
4| exit;
5|}elseif(ereg("J-PHONE",$ua)){
6| header("Location: http://example.com/j.php");
7| exit;
8|}elseif(ereg("UP\.Browser",$ua)){
9| header("Location: http://example.com/ez.php");
10| exit;
11|}elseif(ereg("PDXGW",$ua)){
12| header("Location: http://example.com/h.php");
13| exit;
14|}else{
15| header("Location: index.php");
16| exit;
17|}?>
いきなり答え書いてしまいましたが、1行目から見ていきましょう。 1|$ua = $_SERVER["HTTP_USER_AGENT"];
2|if(ereg("DoCoMo",$ua)){ 5|}elseif(ereg("J-PHONE",$ua)){ つづいて、Ez-Web、H"の分岐をさせます。 14|}else{ if 文はこんな感じですが、次のように書くこともできます。
if($aaa) echo '$aaa には何か値が入ってます。TRUEです';
if(!$bbb) echo '$bbb には何もはいってません。FALSEです';
// ↑のは次の式と同じ意味です。一行なら括弧は省略できます
if($aaa==TRUE){ echo '$aaa には何か値が入ってます。TRUEです'; }
if($bbb==FALSE){ echo '$bbb には何もはいってません。FALSEです'; }
変数のセット関する評価は次の式を参考にして下さい
$var = 0;
if ( empty($var) ) { // trueと評価された場合
print '$var は 0 か 空です';
}
if ( !isset($var) ) { // falseと評価された場合
print '$var は 設定されてません';
}
ループ処理ついでにループ処理も覚えてしまいましょう。ループ処理とは、くりかえしの作業をひとつにまとめてしまう事です。 forループは次のようになります
for ( $i=1; $i<=10; $i++ ){
echo $i;
}
実行すると 12345678910 と表示します。式の意味は「最初に1を代入して($i=1)、10より小さい間($i<=10)、$iを1ずつ増やしていく($i++)」という事です
つまり括弧の中(echo $i;)を10回繰り返すのです。 forを使って、配列の中身をすべて表示させるには次のように書けます
$arr = array(1,2,3,4,5,6,7,8,9,10);
for ( $i=0; $i<sizeof($arr); $i++){
echo $arr[$i];
}
sizeof()は配列の数をかぞえる関数です。配列は[0]からなので $i=0 から始めます。ここでsizeof($arr)の値は10となります。0からスタートしたので、9でループを終わるためには
$i<sizeof($arr)[10] とすればいいのです。
forの括弧の中身には、別に$iをいれなくてもOKです。10回"アホ"と出力されます for($i=0; $i<10; $i++){ echo "アホ"; }
whileループもforと同じ動作をします。以下は1から10を表示します
$i = 1;
while ($i <= 10) {
echo $i;
$i++;
}
forより解釈は単純です「$i が10以下の間、括弧の中をくりかえす」 whileの場合は括弧の中で$i増やさないとダメです。 while($j<10){ echo "バカ";$j++; }
if文でちょっと追加。よく使う演算子を紹介します。 if($a == $b){ echo "$aと$bは等しい"; } よく使うのはこの4つです。「&&」の変わりに「and」、「||」の変わりに「or」が使えます「eq」は使えません。 某所で使用している携帯振り分けの方法です。
$host = gethostbyaddr(getenv('REMOTE_ADDR'));
if(preg_match("/\.(ido|ezweb)\.ne\.jp$/",$host)){
$env = "au"; // EZweb WAP2.0 端末用の処理
}elseif(preg_match("/docomo\.ne\.jp$/",$host)){
$env = "i"; // i-mode 用の処理
}elseif(preg_match("/vodafone\.ne\.jp$/",$host)){
$env = "v"; // Vodafone 用の処理
}elseif(preg_match("/jp-[cdhknqrst]\.ne\.jp$/",$host)){
$env = "j"; // Vodafone 旧機種用の処理
}else{
$env = "pc"; // それ以外
}
この他に良く使う構文としてforeach構文があります。foreach構文は配列を展開するためにつかいます。
$arr = array(1,2,3,4,5,6,7,8,9,10);
foreach ($arr as $num){
echo "$num<br>";
}
// 配列のキーも使う場合
$arr['赤'] = '#FF0000'; $arr['緑']='#00FF00'; $arr['青'] = '#0000FF';
// 上と同じ意味です
//$arr = array('赤'=>'#FF0000','緑'=>'#00FF00','青'=>'#0000FF');
foreach ($arr as $key=>$val){
echo "<option value='$val'>$key</option>\n";
}
LastModified April 22 2006 13:44:52
|
| |HOME||チュウトリアル||使用上の注意||スクリプト||無料鯖情報||BBS||リンク| Copyright(C) 1999-2001 ToR all rights reserved. |