上手くエラー表示がされないのと計算ができない
PHP初心者です。
開発環境
apache2.0.59
PHP5.2.9
Eclipse3.3
以下のソースコードを見て下さい。
<?php
session_start();
?>
<html>
<head>
<title>test3_2.php</title>
</head>
<body>
<?php
//kadai3_3.phpにて、氏名、商品それぞれに未入力の場合はセッション変数に「NG」が設定されます
if ($_SESSION["name"]=="NG") {
unset($_SESSION["name"]);
print("氏名を入力して下さい。"."<br>");
}
if ($_SESSION["shohin"]=="NG") {
unset($_SESSION["shohin"]);
print("商品の何れかをチェックして下さい。"."<br>");
}
?>
<form action="./test3_3.php" method=post>
氏名:<input type="text" name="name" <?php print("value='".$_SESSION["name"]."'")?>>
<br><br>
商品一覧<br>
<!-- 全てのcheckboxの名称をshohin[商品名]として連想配列化する事により
test3_3.phpではcheckboxが扱いやすくなります -->
<input type="checkbox" name="shohin[A]"
<?php print($_SESSION["shohin"]["A"]=="on" ? "checked":"") ?>
>A商品 \\1,000<br>
<input type="checkbox" name="shohin[B]"
<?php print($_SESSION["shohin"]["B"]=="on" ? "checked":"") ?>
>B商品 \\2,000<br>
<input type="checkbox" name="shohin[C]"
<?php print($_SESSION["shohin"]["C"]=="on" ? "checked":"") ?>
>C商品 \\3,000<br>
<input type="checkbox" name="shohin[D]"
<?php print($_SESSION["shohin"]["D"]=="on" ? "checked":"")?>
>D商品 \\4,000<br>
<input type="checkbox" name="shohin[E]"
<?php print($_SESSION["shohin"]["E"]=="on" ? "checked":"")?>
>E商品 \\5,000<br><br>
<input type="submit" value="送信">
</form>
</body>
</html>
で次のtest3_3.phpのソースコードです。
<?php
session_start();
/*
* 氏名にデータが入っていない場合はセッション変数を「NG」を入っていた場合はセッション変数に氏名をセットする
*/
if (strlen($_POST["name"]==0)) {
$_SESSION["name"] = "NG";
}else{
$_SESSION["name"] = $_POST["name"];
}
if (isset($_POST["shohin"])) {
$_SESSION["shohin"]=$_POST["shohin"];
}else{
$_SESSION["shohin"]="NG";
}
/*
* 氏名か商品の何れかが未入力(未チェック)の場合はtest3_2.phpに遷移します。
*/
if ($_SESSION["name"]=="NG" or
$_SESSION["shohin"]=="NG") {
header("Location: test3_2.php?".SID);
exit;
}
?>
<html>
<head>
<title>test3_3.php</title>
</head>
<body>
<?php
$fp = fopen("C:\Apache2\htdocs\test3_1.txt", "r");
while (!feof($fp)) {
$buffer = fgets($fp);
$ans = explode(",", $buffer);
$shohin[$ans[0]] = $ans[1];
}
fclose($fp);
$sum = 0;
while(list($key, $val)=each($shohin)) {
if ($_POST[$key]=="on") {
print($key."商品:\\".number_format($val)."<br>");
$sum += $val;
$shohizei = $sum * 0.05;
$goukei = $sum + $shohizei;
}
}
print("---------------------------<br>");
print("合計金額:\\".number_format($sum)."<br>");
print("消費税 :\\".number_format($shohizei)."<br>");
print("税込金額:\\".number_format($goukei));
?>
</body>
</html>
分からないのは氏名欄に何も書かない場合もしくは商品を1つも選択しない場合、それぞれエラー表示されるのですが、何故か氏名欄にはMGと言う値が入力されてリダイレクトされます。
なので、まずはその原因を探しているのですが、いくら見ても分かりません。
なので、氏名欄が空白のときにエラー表示されるのかどうかも分かりません。
もう1つは商品購入の際の計算式が表示されない事です。
その前に連想配列$_SESSION["shohin"]["A"]についても疑問点があります。
これは2次元連想配列と解釈するのでしょうか。
ちなみにtest3_1.txtには以下のような文章が書かれています。
A,1000
B,2000
C,3000
D,4000
E,5000
何か延々とソースコードを書き連ねただけみたいに見えますね。
読み辛いようでしたら、本当に申し訳ありません。
以上の疑問について回答を頂きたいと思い書き込みました。
どうぞ宜しくお願い致します。