Administratorで入らせてくれないか?
ねむ
昨日洗濯してたら寝るの2時過ぎになってしまいまして。。。
まぁやっと体力が回復してきたから、このぐらいどうって事ないデス。
5時間寝れれば十分です。
4時間だと限界への挑戦になって来ます。
3時勘だと覚醒します。
どうせバイトは猿でも出来る仕事だし。
ってか仕事じゃないし。
どれだけこの無駄な時間を無駄じゃなくするかがポイントです。
って、バイト先のPCで書いちゃう午前6時30分
21日また日帰りで茨城行きます(汗)
バイト終わったらそのまま上野か日暮里までいって常磐線乗って水戸だか勝田いってデートして×××して東京まで帰ってくる、そして朝まで睡魔と闘って昼寝て夜バイト、という過酷なスケジュール。
俺、あと何年生きられるのかな?
この前のアホになる電卓を改良したので公開
今回はソースにコメント付けた。
動作自体は前とほぼ一緒だけど、ソースはこっちの方が全然マシかと。
前のは最初ちょっと違う事やろうとしてて途中で変えていったから変なソースでした(笑)
まぁまだまだ酷いレベルですけど…
それじゃぁ、ソースを…
うぇうぇ
<html>
<head>
<title>アホになる電卓 Ver. - 1.1</title>
<meta http-equiv="Content-type" content="text/html; charset=Shift_JIS">
</head>
<body bgcolor="#000000" text="#008080" link="#ffa500" vlink="#ffaa00" alink="#008080">
<div align="center"><font size="2">
<h1>アホになる電卓</h1>
Ver. - 1.1
<hr>
<?php
/*------------------------------------------------------------------------------------+
** 基本的な変数を定義
+------------------------------------------------------------------------------------*/
// xの値を習得
if (isset($_POST["x"]) === false) {
$x = ""; // 習得できなければ""を代入
} else {
$x = $_POST["x"];
}
// yの値を習得
if (isset($_POST["y"]) === false) {
$y = ""; // 習得できなければ""を代入
} else {
$y = $_POST["y"];
}
// セレクトボックスのDefalt指定タグ
$select = " selected";
// 演算子を習得
$enzanshi = $_POST["enzanshi"];
// 選択された演算子をDefaltに
$enzanshi_select["$enzanshi"] = "$select";
// ○の付く数の値を習得
$tsuku = $_POST["tsuku"];
// 選択された数をDefaltに
$tsuku_select["$tsuku"] = "$select";
// ○の倍数の値をを習得
if (isset($_POST["baisu"]) === false) {
$baisu = ""; // 習得できなければ""を代入
} else {
$baisu = $_POST["baisu"];
}
/*------------------------------------------------------------------------------------+
** 電卓
+------------------------------------------------------------------------------------*/
// xとyの両方が""だった時、電卓と判定を実行
if ($x !== "" && $y !== "") {
// 演算子別にパターン化
switch ($enzanshi) {
case 0:$ans = $x + $y;break; // 足し算
case 1:$ans = $x - $y;break; // 引き算
case 2:if($x == 0 || $y == 0){$ans=0;} // 掛け算
else{$ans = $x * $y;}
break;
case 3:if($x == 0 || $y == 0){$ans=0;} // 割り算
else{$ans = $x / $y;}
break;
case 4:if($x == 0 || $y == 0){$ans=0;} // 割り算のあまり
else{$ans = $x % $y;}
break;
}
/*------------------------------------------------------------------------------------+
** アホになる判定
+------------------------------------------------------------------------------------*/
//ボツ?
/*
function hantei($str1, $str2) {
return is_int(strpos($str1, $str2));
}
*/
// ○の付く数判定用関数を定義
function hantei($str1, $str2) {
if(strpos($str1, $str2) !== false) {
return true; // 変数1に変数2が含まれていればTRUEを返す
} else {
return false; // 含まれていなければFALSEを返す
}
}
// ○の付く数(左側)の判定を実行
if ($tsuku != 10) {
$left = hantei($ans, $tsuku); // ○の付く数の値が空でなければhantei関数を実行
} else {
$left = false; // 空ならFALSE
}
// ○の倍数(右側)の判定を実行
if ($baisu !== "") {
if ($baisu == 0) {
if ($ans == 0) {
$right = true; // ○の倍数の値が0且つ答えが0ならTRUE
} else {
$right = false; // ○の倍数の値が0で答えが0以外ならFALSE
}
} else {
$right = is_int($ans/$baisu); // ○の倍数が0ならFALSE
}
} else {
$right = false; // それ以外ならFALSE
}
} else {
// xとyのいずれか、またはいずれも空だった場合、答えは?に、右も左もFALSEに
$ans = "?";
$left = false;
$right = false;
}
/*------------------------------------------------------------------------------------+
** 最終処理
+------------------------------------------------------------------------------------*/
// 普通のナベ○ツの画像かアホのナベ○ツの画像を出力するかを判定する関数を定義
function nabeatsu($a){
if ($a === true) {
return '<img src="./aho.gif" alt="アホ" style="border: none;">'; // 変数1がTRUEならアホ
} elseif ($a === false) {
return '<img src="./n.gif" alt="普通" style="border: none;">'; // 変数1がFALSEなら普通
}
}
$nabeatsu_L = nabeatsu($left); // 左側をnabeatsu関数で判定
$nabeatsu_R = nabeatsu($right); // 右側をnabeatsu関数で判定
$answer = $nabeatsu_L.$ans.$nabeatsu_R; // 最終的な答え
?>
<form method="POST" action="./index2.php">
<select name="tsuku">
<option value="10"<?php echo $tsuku_select[10]; ?>></option>
<option value="0"<?php echo $tsuku_select[0]; ?>>0</option>
<option value="1"<?php echo $tsuku_select[1]; ?>>1</option>
<option value="2"<?php echo $tsuku_select[2]; ?>>2</option>
<option value="3"<?php echo $tsuku_select[3]; ?>>3</option>
<option value="4"<?php echo $tsuku_select[4]; ?>>4</option>
<option value="5"<?php echo $tsuku_select[5]; ?>>5</option>
<option value="6"<?php echo $tsuku_select[6]; ?>>6</option>
<option value="7"<?php echo $tsuku_select[7]; ?>>7</option>
<option value="8"<?php echo $tsuku_select[8]; ?>>8</option>
<option value="9"<?php echo $tsuku_select[9]; ?>>9</option>
</select>
の付く数の時左側が<br>
<input type="text" size="1" name="baisu" value="<?php echo $baisu; ?>" istyle="4" format="N" MODE="numeric" style="ime-mode:disabled">
の倍数だった時右側が<br>
<h3>アホ</h3>になります。<br><br>
<input type="text" size="3" name="x" value="<?php echo $x; ?>" istyle="4" format="N" MODE="numeric" style="ime-mode:disabled">
<select name="enzanshi">
<option value="0"<?php echo $enzanshi_select[0]; ?>>+</option>
<option value="1"<?php echo $enzanshi_select[1]; ?>>-</option>
<option value="2"<?php echo $enzanshi_select[2]; ?>>×</option>
<option value="3"<?php echo $enzanshi_select[3]; ?>>÷</option>
<option value="4"<?php echo $enzanshi_select[4]; ?>>…</option>
</select>
<input type="text" size="3" name="y" value="<?php echo $y; ?>" istyle="4" format="N" MODE="numeric" style="ime-mode:disabled">
= <?php echo $answer; ?><br>
<input type="submit" name="soushin" value="計算">
</form>
<hr>
by まきまき(<a href="http://gyaku.zombie.jp/">gyaku.zombie.jp</a>)
</font></div>
</body>
</html>
ってかhanteiって関数を定義したところでコメントアウトしてボツ?って書いてあるのがあると思うんだけど
これって結局どっちがいいのかな?
動作自体は一緒になるはずだから、あとはどっちが実行速度が早いかとかになると思うんだけど…。
個人的にはis_intと組み合わせたのが気に入ってるんだけど…絶対こっちの方が遅いよね(汗)
どっかで質問してみっかな。
PHPプログラマの良し悪しどれだけ関数を知っているかで決まる
なんてどっかで見ました。
確かに、大量にある関数を全部覚えるのはかなり困難だけど
既存の関数を自分で作る程効率の悪い事はないね(笑)
ってかPHP5.3.0で結構仕様が変わるんだねぇ…PHP6を意識してるとか。
?:って演算子が追加されるらしいんだけど、これが便利!
例えば
echo $a ?: $b;
ってしたら
$aがFALSEじゃなければ$aを出力
$aがFALSEなら$bを出力
ってものらしい。
結局、いままでだったら
echo ($a) ? $a : $b;
って書くのと一緒らしいデス。
うーん…オブジェクト指向がよく分からない…
っていうかまだまだ基礎から順を追って勉強して行くべきですよね。
No related posts.

またしてもありがとうございます!
「PHPサイバーテロの技法―攻撃と防御の実際」は必読ですね。is_numericはド素人なりに考えて、そんな関数無いかな?って調べて使って見ました 笑
ネットでXSS脆弱性対策に付いて調べると、「htmlspecialcharsを使えばOK!これで心配なし!」みたいなことが書いてあって‥駄目ですね。インターネット全体の90%以上にXSS脆弱性が存在する、みたいな事もどこかに書いてありました。恐ろしい‥。
どうやらセキュリティに関してツメのあまいプログラマーさんが多いみたいですが、そのへんもしっかり学んで行きたいと思います。
Akismet‥WordPress自体がマルチバイトに関してまだ不十分な部分がありますよね。
PHPにしろなんにしろ、プログラミング言語そのものが英語圏(シングルバイト)メインと言うこともありますが‥。
最近Ruby on Railsが注目されているのはそういう理由(Rubyが日本発)もあるんですかね?
RoRに関しては全く分かりませんが…。
興味深いのが、PHPそのものがセキュリティがあまいと言うこと‥suhosinというセキュリティ強化パッチとその開発者の元PHP開発のプロジェクトチームの方でセキュリティ部分の意見の相違からプロジェクトから辞退した方の話が気になりました。
「PHP開発者側は、PHPのセキュリティについて問題があればユーザーのせいにする努力はするが、それを改善しようとはしない。指摘しても受け入れようとせず、指摘したりsuhosinの開発を進めるにつれ、逆に裏切り者扱いされた。」みたいなことが書いてありました。PHPの未来は大丈夫なのか、これからPHPを学ぼうとしている自分としてはちょっと心配になりましたね(;^ω^)
あ、メール送ったのですがちゃんと届いたでしょうか?
送信したあと気付いたのですが、IEの場合とそれ以外の場合でタグが変わるようになってるんですね‥。
「PHPサイバーテロの技法―攻撃と防御の実際」を読んでみると分かりますが、出力時に全部エスケープするのが基本だと思った方がよいです。そうしないと、それぞれの変数について「そのまま出力してもよい/よくない」を判断しなければならず、面倒になります。入力時の値の検査はもちろん必要なので、is_numeric を使うことはよいことです。
実は、href 属性、src 属性の中身を出力する場合は、htmlspecialchars では不十分です (href=”javascript:alert()” となる場合の対策ができてないため)。
Akismet はどうも日本語コメントには厳しいようです。
まだまだ初心者にも達しない、ド素人のレベルな物で(^^ゞ
「PHPサイバーテロの技法―攻撃と防御の実際」って言う本がセキュリティ対策に相当役立つそうなので、基礎を一通りマスターしたら買って見たいと思います!
こう言うもののセキュリティ云々は本当、イタチゴッコ状態ですからねぇ…。
ENT_QUOTESは初めて知りました!知らずにhtmlspecialcharsのみの対策している方も結構多い見たいデスね(汗)
今回の場合は数字のみ習得したかったのでis_numericを使ってフィルターをかけて見ましたが、やっぱり出力時にフィルターをかけないとまずいですかね?
これからは変数を出力する時はhtmlspecialcharsとENT_QUOTESはセットで付いてくるのが当たり前という事を覚えておきます。
フレームワークってそういう事もやってくれるんですね!
とりあえず、フレームワークの前にオブジェクト指向がまだイマイチ理解出来てないので、その変を煮詰めて行こうと思います(^^ゞ
いつもいつも、とても勉強になるコメント有難うございます!
しかし、そんなすばらしいコメントがAkismetでスパム判定を受けてしまうのはどうしてー(;ω;)
危うく削除しそうになります‥
スパムが多すぎてなんでもかんでもスパム判定するようになってる!?
XSS 脆弱性について、まだご存知じゃなかったんですね。今はウェブアプリを作るには、さまざまなセキュリティー対策を入れ込まないといけなくなったので、非常に大変になりました。XSS 脆弱性はまだ対策が簡単なのですが、もっと難しいものがあるので、ぼちぼち学習されるとよいかと思います。
これもありますが、むしろ、出力時に変数 ($x とか) をそのまま出しているのがまずいです。ここで
htmlspecialchars($x, ENT_QUOTES);とかしておく必要があります。XSS は「エスケープしていない値をそのまま出す」のが原因なので、echo とかしている箇所すべてでエスケープすれば対策できます。ただし、HTML を組み立てて echo する場合は echo 時にエスケープできないので、ちょっと工夫がいります。複雑なものを作るならば、最初からフレームワークを使った方が楽だったりします (エスケープ処理とかが自動でされるので)。コメントありがとうございます。
XSS脆弱性…セキュリティ問題まで気が回らなかった。。。というかまだそんな知識がありませんでした(汗)
XSS脆弱性の危険性や攻撃方法は調べて把握しました。これは危険ですね(汗)
一応ページも削除しました^^;
初心者は初心者なりに気をつけなければいけませんね。。。
原因は$_POSTの(int)を外してしまったせいですよね?
float型の計算も出来るようにしようという目的と、XSS脆弱性の問題を知らなかったもので…。
変数の初期化も含め、これから修正して再度うpしてみようと思います!
ご指摘、本当に感謝です ^^
今回のバージョンは XSS 脆弱性ができてしまっていますよ!! 前のバージョンはなかったのに。
あと、
$tsuku_select, $enzanshi_selectで、値の初期化をしていないので、Warning レベルの警告が出てしまうはずです。