「数字入力について考える1」の編集履歴(バックアップ)一覧はこちら
「数字入力について考える1」(2015/08/08 (土) 22:34:38) の最新版変更点
追加された行は緑色になります。
削除された行は赤色になります。
PHPのよいところは型を宣言しなくても柔軟に対応してくれるところではありますが、中には対応してくれないものもあります。今回はそんな中で数字の入力について考えてみます。8月8日記事
~
~
目次
#contents
~
~
----
~
*フォームの入力
ID,年齢,生年月日の入力でユーザから数字を入力させるシーンはよくあります。ECサイトでフォームの入力エラーがあると、それで成約率が下がってくるそうです。そんな中で、エンドユーザから入力されたフォームをどう処理していけばよいのかを考えていきます。
~
~
*エンドユーザの入力
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>数字チェック</title>
</head>
<body>
<p>80より大きければ合格と表示させるプログラム<br>「全角数字で80より大きい数字」や「小数点」や「数字+文字」など色々入力してみてください。</p>
<form action="confirm.php" method="post">
<dl>
<dt>なにもなし</dt><dd><input type="text" name="number"></dd>
<dt>数字エラー表示</dt><dd><input type="text" name="error"></dd>
<dt>半角数字に変換する</dt><dd><input type="text" name="convert"></dd>
<dt>INT型filter_inputを使う</dt><dd><input type="text" name="filter"></dd>
</dl>
<input type="submit" name="submit">
</form>
</body>
</html>
色々な数字や小数点等を入れてみてください。
~
~
*確認ページ
入力された文字を色々と変換したり、フィルター
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>数字チェック</title>
</head>
<body>
<dl>
<dt>1つ目:全角で80より大きい数をいれても不合格になる。</dt>
<dd>
<?php
$number = $_POST["number"];
echo $number;
if($number > 80){
echo "で合格";
}else{
echo "で不合格";
}
?>
</dd>
<dt>2つ目:全角で入れられたらエラーを返す</dt>
<dd>
<?php
$error = $_POST["error"];
echo $error;
//!を入れて否定を表し、正規表現でチェックする。
if (!preg_match("/^[0-9]+$/", $error)) {
echo '半角数字ではありません。';
}else{
if($error > 80){
echo "で合格";
}else{
echo "で不合格";
}
}
?>
</dd>
<dt>3つ目:変換してあげる</dt>
<dd>
<?php
$convert = $_POST["convert"];
echo mb_convert_kana($convert, 'n');
$convert1 = mb_convert_kana($convert, 'n');
if($convert1 > 80){
echo "で合格";
}else{
echo "で不合格";
}
?>
</dd>
<dt>4つ目:filter_input</dt>
<dd>
<?php
//整数にする。
$filter = filter_input(INPUT_POST,'filter',FILTER_SANITIZE_NUMBER_INT);
echo $filter;
if($filter > 80){
echo "で合格";
}else{
echo "で不合格";
}
?>
</dd>
</dl>
</body>
</html>
~
~
**表示1(全角で「91」と入れる)
1つ目:全角で80より大きい数をいれても不合格になる。
91で不合格
2つ目:全角で入れられたらエラーを返す
91半角数字ではありません。
3つ目:変換してあげる
91で合格
4つ目:filter_input
で不合格
1つ目は80より大きい数字をいれているのですが全角であるため、エラーが表示されます。4つ目は半角の数字のみ残し、整数値にするということで、全部フィルターされて、結局不合格になっていまいます。
~
~
**表示2(「91点」と入れる)
1つ目:全角で80より大きい数をいれても不合格になる。
91点で合格
2つ目:全角で入れられたらエラーを返す
91点半角数字ではありません。
3つ目:変換してあげる
91点で合格
4つ目:filter_input
91で合格
2つ目以外は認識されています。
3つ目は点という文字列が入っていますが、評価されます。
~
~
**表示3(「50.1点」と入力する)
1つ目:全角で80より大きい数をいれても不合格になる。
50.1点で不合格
2つ目:全角で入れられたらエラーを返す
50.1点半角数字ではありません。
3つ目:変換してあげる
50.1点で不合格
4つ目:filter_input
501で合格
4つ目が小数点と点がとられて501になり、合格と判定されます。
~
~
*考察
開発者が意図しない入力をされたときに、エラーを出すか、変換をしてあげるのかを考えなければなりません。
色々な方法があるので、それは次回[[数字入力について考える2]]で話していきたいと思います
~
~
以上
PHPのよいところは型を宣言しなくても柔軟に対応してくれるところではありますが、中には対応してくれないものもあります。今回はそんな中で数字の入力について考えてみます。8月8日記事
~
~
目次
#contents
~
~
----
~
*フォームの入力
ID,年齢,生年月日の入力でユーザから数字を入力させるシーンはよくあります。ECサイトでフォームの入力エラーがあると、それで成約率が下がってくるそうです。そんな中で、エンドユーザから入力されたフォームをどう処理していけばよいのかを考えていきます。
~
~
*エンドユーザの入力
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>数字チェック</title>
</head>
<body>
<p>80より大きければ合格と表示させるプログラム<br>「全角数字で80より大きい数字」や「小数点」や「数字+文字」など色々入力してみてください。</p>
<form action="confirm.php" method="post">
<dl>
<dt>なにもなし</dt><dd><input type="text" name="number"></dd>
<dt>数字エラー表示</dt><dd><input type="text" name="error"></dd>
<dt>半角数字に変換する</dt><dd><input type="text" name="convert"></dd>
<dt>INT型filter_inputを使う</dt><dd><input type="text" name="filter"></dd>
</dl>
<input type="submit" name="submit">
</form>
</body>
</html>
色々な数字や小数点等を入れてみてください。
~
~
*確認ページ
入力された文字を色々と変換したり、フィルターしたりするプログラム。&color(red){本来、htmlspecialchars関数は使うべきですが、今回は構造を簡単にするために使っていません。ご了承ください。}
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>数字チェック</title>
</head>
<body>
<dl>
<dt>1つ目:全角で80より大きい数をいれても不合格になる。</dt>
<dd>
<?php
$number = $_POST["number"];
echo $number;
if($number > 80){
echo "で合格";
}else{
echo "で不合格";
}
?>
</dd>
<dt>2つ目:全角で入れられたらエラーを返す</dt>
<dd>
<?php
$error = $_POST["error"];
echo $error;
//!を入れて否定を表し、正規表現でチェックする。
if (!preg_match("/^[0-9]+$/", $error)) {
echo '半角数字ではありません。';
}else{
if($error > 80){
echo "で合格";
}else{
echo "で不合格";
}
}
?>
</dd>
<dt>3つ目:変換してあげる</dt>
<dd>
<?php
$convert = $_POST["convert"];
echo mb_convert_kana($convert, 'n');
$convert1 = mb_convert_kana($convert, 'n');
if($convert1 > 80){
echo "で合格";
}else{
echo "で不合格";
}
?>
</dd>
<dt>4つ目:filter_input</dt>
<dd>
<?php
//整数にする。
$filter = filter_input(INPUT_POST,'filter',FILTER_SANITIZE_NUMBER_INT);
echo $filter;
if($filter > 80){
echo "で合格";
}else{
echo "で不合格";
}
?>
</dd>
</dl>
</body>
</html>
~
~
**表示1(全角で「91」と入れる)
1つ目:全角で80より大きい数をいれても不合格になる。
91で不合格
2つ目:全角で入れられたらエラーを返す
91半角数字ではありません。
3つ目:変換してあげる
91で合格
4つ目:filter_input
で不合格
1つ目は80より大きい数字をいれているのですが全角であるため、エラーが表示されます。4つ目は半角の数字のみ残し、整数値にするということで、全部フィルターされて、結局不合格になっていまいます。
~
~
**表示2(「91点」と入れる)
1つ目:全角で80より大きい数をいれても不合格になる。
91点で合格
2つ目:全角で入れられたらエラーを返す
91点半角数字ではありません。
3つ目:変換してあげる
91点で合格
4つ目:filter_input
91で合格
2つ目以外は認識されています。
3つ目は点という文字列が入っていますが、評価されます。
~
~
**表示3(「50.1点」と入力する)
1つ目:全角で80より大きい数をいれても不合格になる。
50.1点で不合格
2つ目:全角で入れられたらエラーを返す
50.1点半角数字ではありません。
3つ目:変換してあげる
50.1点で不合格
4つ目:filter_input
501で合格
4つ目が小数点と点がとられて501になり、合格と判定されます。
~
~
*考察
開発者が意図しない入力をされたときに、エラーを出すか、変換をしてあげるのかを考えなければなりません。
色々な方法があるので、それは次回[[数字入力について考える2]]で話していきたいと思います
~
~
以上