Home > PHP | Web > 第3回「新しくプログラミング言語を覚えたいときに行うべき10の練習問題」をPHPでやってみた!!

第3回「新しくプログラミング言語を覚えたいときに行うべき10の練習問題」をPHPでやってみた!!

  • 2008-06-01 (日) 4:49
  • PHP | Web

百式さんの運営するIDEA*IDEAの「新しくプログラミング言語を覚えたいときに行なうべき10の練習問題」を実際にやってみる第3回目!

今回の問題はこちら!

  1. 複数の数値を入力させ、昇順に並び替え、最大値と最小値を出す(例:同僚の体重を入力して計算)。

今回は体重のソート(順番に並べる)ってことなので、第1関門はフォームから値を入力してもらう事、第2関門にソートする事。
最初はあまり考えずに「体重だけじゃアレだなー」と思って「名前も一緒に入れよう!」と思ったのが運のツキ…めんどくさくなってしまった…

最初にHTMLのフォームからPOSTでデータを受け取る!
これは$_POST["name1"] この1行で終わるので楽勝ですな。(name1はフォームのname属性の値)

次にソートなんだけど、名前を取得せずに体重だけを取得する場合はsort関数を使えばそんなに悩まずにすぐ出来ると思います。
が、しかし!自分は$personという配列の中に3人のデータをさらに配列で作ってしまったのでめんどくさくなりました(´・ω・`)

でも色々調べてみるとarray_multisortという関数があったので、$person配列からweightの値を$weightという新しい配列に移し、この$weight配列の数字の大きい順に$personも並び替えできました。

実際に動いているのはこちら
第3回目「新しくプログラミング言語を覚えたいときに行うべき10の練習問題 〜PHP編〜」

書いたコードはこちら


<?php
//POSTで受け取ったデータを2次元配列に格納
$person = array(
	        		array('name'  => $_POST["name1"], 'weight'  => $_POST["weight1"]),
	        		array('name'  => $_POST["name2"], 'weight'  => $_POST["weight2"]),
	        		array('name'  => $_POST["name3"], 'weight'  => $_POST["weight3"])
	        		);
※問題があったので下に修正したものを書きましたのでそちらを参考にしてください。

//2次元配列の中の連想配列weightの値を配列$weightの中に代入
foreach ($person as $key => $row) {
    $weight[$key]  = $row['weight'];
}

//$weightの数値の大きい順に$personも並び替えする。
array_multisort($weight, SORT_DESC,  $person);

//配列の中を順番に表示
for($i=0; $i<3; $i++){
	echo '<p>名前:'.$person[$i]['name'].' 体重:'.$person[$i]['weight'].'</p>';
}
?>

コメント欄にてyusuke0927さんに下記のようなご指摘を受けました。ありがとうございます!

$_POST["name1"] とやっている箇所は htmlspecialchars() を入れておかないと、<script>タグを埋め込めてJavaScript等を実行できてしまいます。(いわゆるクロスサイトスクリプティングというやつですね)

ということだったので、POSTで受け取ったデータを配列に代入するときに htmlspecialchars()を使ってJavaScript等を実行できないように修正しました。
これで入力されてもそのまま出力されるはずっ!

こういうご指摘は正直ありがたいです。どんどんお願いしますー!


$person = array(
	        		array('name'  => htmlspecialchars($_POST["name1"]), 'weight'  => htmlspecialchars($_POST["weight1"])),
	        		array('name'  => htmlspecialchars($_POST["name2"]), 'weight'  => htmlspecialchars($_POST["weight2"])),
	        		array('name'  => htmlspecialchars($_POST["name3"]), 'weight'  => htmlspecialchars($_POST["weight3"]))
	        		);

次回は「簡易電卓。0で割ったときの処理を自分なりに作りこむ。」だそうだ。がんばるぞ〜!(n’ ∀ ‘)η

関連リンク
第0回「新しくプログラミング言語を覚えたいときに行うべき10の練習問題」をPHPでやってみよう!
第1回「新しくプログラミング言語を覚えたいときに行うべき10の練習問題」をPHPでやってみた!!
第2回「新しくプログラミング言語を覚えたいときに行うべき10の練習問題」をPHPでやってみた!!
第3回「新しくプログラミング言語を覚えたいときに行うべき10の練習問題」をPHPでやってみた!!

Comments:2

yusuke0927 08-06-01 (日) 12:13

$_POST["name1"] とやっている箇所は htmlspecialchars() を入れておかないと、<script>タグを埋め込めてJavaScript等を実行できてしまいます。(いわゆるクロスサイトスクリプティングというやつですね)

suniti 08-06-04 (水) 9:46

>yusuke
はっ!しまった!指摘ありがとうございますっ!

修正しておきましたー!

Comment Form
Remember personal info
Macをはじめよう。Apple Store(Japan)

Trackback+Pingback:1

TrackBack URL for this entry
http://blog.grayash.com/archives/754/trackback
Listed below are links to weblogs that reference
第3回「新しくプログラミング言語を覚えたいときに行うべき10の練習問題」をPHPでやってみた!! from blog.grayash.com
トラックバック from yusuke@blog 08-06-07 (土) 19:06

「新しくプログラミング言語を覚えたいときに行うべき10の練習問題」を PHP で解いてみる【第 3 回】

第 1 回、第 2 回に続き、今回は第 3 問。問題はこちら。
3.複数の数値を入力させ、昇順に並び替え、最大値と最小値を出す(例:同僚の体重を入力して計算)。
フォームに名前と体重を 3…

Home > PHP | Web > 第3回「新しくプログラミング言語を覚えたいときに行うべき10の練習問題」をPHPでやってみた!!

Search
Google
Feeds
Meta
あわせて読む
あわせて読みたい
Yahoo! ログール読む

Return to page top