【PHP】POSTメソッドとHTMLエスケープをしよした割り勘の金額を求めるプログラムの作成
本日は、割り勘する時の一人当たりの金額を調べるプログラムを作成しようと思う。
始めに、HTMLエスケープを実行するためのes()を作成していく
util.php
<?php
function es($data){
if(is_array($data)){
return array_map(__METHOD__,$data);
}else{
return htmlspecialchars($data,ENT_QUOTES,'utf-8');
}
}
これにより、引数のデータが配列になっている時は、array_mapによって要素一つ一つをエスケープさせ、
esメソッドの配列を作成する。
そして、それ以外は、通常通りエスケープを実行する。
次に、文字のエンコードのチェックを行うckenメソッドを作成する。
util.php
function cken(array $data){
$result=true;
foreach($data as $key=>$value){
//foreach文で配列から値を順に取り出す
if(is_array($value)){
//引数が配列のとき
$value=implode("",value);
//配列を連結させる
}
if(!mb_check_encoding($value)){
//文字エンコードをチェックしたときに違う値だったという条件
$result=false;
break;
}
}
return $result;
}
次にデータの入力の画面を作成する
name_Check.php
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8">
<title>フォーム入力</title>
</head>
<body>
<div>
<form action="warikan.php"method="post">
//ここではpostメソッドを指定
<ul>
<li><label>合計金額<input type="number" name="goukei"></label></li>
<li><label>人数<input type="number"name="ninzu"></label></li>
<li><input type="submit" value="割り勘する"></li>
</ul>
</form>
</div>
</body>
これらのデータを処理するwarikan.php というphpファイルを作成する
warikan.php
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8">
<title>フォーム入力</title>
</head>
<body>
<div>
<?php
require_once('util.php');//util.php を読み込み
if(!cken($_POST)){
$encoding=mb_internal_encoding();
$err="ENcoding error the expected encoding is".$encoding;
exit($err);
}
$_POST=es($_POST);
?>
<?php
$errors=[];
?>
<?php
if(isset($_POST['goukei'])){
$goukei=$_POST['goukei'];
if(!ctype_digit($goukei)){
$errors[]="合計金額を整数で入力してください";
}}
else{
$errors[]="合計金額が未設定";
}
?>
<?php
if(isset($_POST['ninzu'])){
$ninzu=$_POST['ninzu'];
if(!ctype_digit($ninzu)){
$errors[]="人数を整数値で入力してください";
}
elseif($ninzu==0){
$errors[]="0では割り切れません";
}
}
else{
$errors[]="人数が未設定";
}
?>
<?php
if(count($errors)>0){
echo '<ol class="errror">';
foreach($errors as $value){
echo "<li>","$value","</li>";
}
echo "</ol>";
?>
<form action="nameCheck.php" method="post">
<ul>
<li><input type="submit"value="戻る"></li>
</ul>
</form>
<?php
}else{
$amari=$goukei%$ninzu;
$price=($goukei-$amari)/$ninzu;
$goukei_fmt=number_format($goukei);
$price_fmt=number_format($price);
echo "{$goukei_fmt}を{$ninzu}で割ります","<br>";
echo "1にん当たり{$price_fmt}円を払えば、{$amari}円です";
}
?>
</div>
</body>
<?php
require_once('util.php');//util.php を読み込み
if(!cken($_POST)){
$encoding=mb_internal_encoding();
$err="ENcoding error the expected encoding is".$encoding;
exit($err);
}
$_POST=es($_POST);
?>
文字のエンコードに失敗した場合に、エラーメッセージを出力しており、
正常に出力しているときには、esメソッドを作成している。
<?php
if(isset($_POST['goukei'])){
$goukei=$_POST['goukei'];
if(!ctype_digit($goukei)){
$errors[]="合計金額を整数で入力してください";
}}
else{
$errors[]="合計金額が未設定";
}
?>
<?php
if(isset($_POST['ninzu'])){
$ninzu=$_POST['ninzu'];
if(!ctype_digit($ninzu)){
$errors[]="人数を整数値で入力してください";
}
elseif($ninzu==0){
$errors[]="0では割り切れません";
}
}
else{
$errors[]="人数が未設定";
}
?>
こちらでは、$_POSTメソッドがセットされている時のエラーのメッセージを出力するプログラムを作成。
warikan.php
<?php
if(count($errors)>0){
echo '<ol class="errror">';
foreach($errors as $value){
echo "<li>","$value","</li>";
}
echo "</ol>";
?>
<form action="nameCheck.php" method="post">
<ul>
<li><input type="submit"value="戻る"></li>
</ul>
</form>
<?php
}else{
$amari=$goukei%$ninzu;
$price=($goukei-$amari)/$ninzu;
$goukei_fmt=number_format($goukei);
$price_fmt=number_format($price);
echo "{$goukei_fmt}を{$ninzu}で割ります","<br>";
echo "1にん当たり{$price_fmt}円を払えば、{$amari}円です";
}
?>
</div>
</body>
割り勘を処理するプログラムは以下の通りである。
$amari=$goukei%$ninzu;
$price=($goukei-$amari)/$ninzu;
$goukei_fmt=number_format($goukei);
$price_fmt=number_format($price);
これで一人当たりの割り勘の金額を求めるプログラムが完成した。
Author And Source
この問題について(【PHP】POSTメソッドとHTMLエスケープをしよした割り勘の金額を求めるプログラムの作成), 我々は、より多くの情報をここで見つけました https://qiita.com/yukou29good0910/items/5ad1055d3e5d2e93fd7f著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .