質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.52%

  • PHP

    20301questions

    PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

クーポンコードを使って割引率を決める

解決済

回答 3

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 228

bitcoiner2045

score 23

クーポンコードを使って割引率を決めたいのですが、discount2.phpの46行目とdescountForm2.phpの40行目のエラー該当箇所を見ても解決方法がわかりません。
どなたかご教示頂けると幸いです。宜しくお願いします。

エラーコード

[27-Jul-2018 07:58:34 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function getCouponRate() in /Applications/MAMP/htdocs/discount2.php:46
Stack trace:
#0 {main}
  thrown in /Applications/MAMP/htdocs/discount2.php on line 46
[27-Jul-2018 07:59:02 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function getCouponRate() in /Applications/MAMP/htdocs/discountForm2.php:40
Stack trace:
#0 {main}
  thrown in /Applications/MAMP/htdocs/discountForm2.php on line 40

saledata.php【割引率と価格の値が書いてある共有ファイル】

<php

    $couponList = [ "nf23qw"=>0.75, "ha45as"=>0.8, "hf56zx"=>8.5];
    $priceList = [ "ax101"=>2300, "ax102"=>2900];


     function getCouponRate($code) {
        global $couponList;

        $isCoupon = array_key_exists($code, $couponList);
        if ($isCouponCode) {
            return $couponList[$code];
        } else {

            return NULL;
            }
    }


    function getPrice($id) {
         global $priceList;

    $isGoodsID = array_key_exists ($id, $priceList);
    if ($isGoodsID) {
         return $priceList[$id];
    } else {

    return NULL;
    }    
 }   

  ?>  

discount2.php【POSTされたリクエストを処理】

<!DOCTYPE html>
<html lang="ja">
<head>
     <meta charset="utf-8">
     <title>金額の計算</title>
     <link href=" ../../css/style.css" rel="stylesheet">
</head>
<body>
<div>
<?php
       require_once("util.php");

       if (!cken($_POST)) {
           $encoding = mb_internal_encoding();
           $err = "Encoding Error! The expected encoding is " . $encoding ;

           exit($err);
       }

       $_POST = es($_POST);
?>

<?php

       $errors = [];

     if (isset($_POST[ 'couponCode' ])) {
     $couponCode = $_POST[ 'couponCode' ];
      } else {

      $couponCode = "";
      }

     if (isset($_POST[ 'goodsID' ])) {
         $goodsID = $_POST[ 'goodsID' ];
    } else {   

        $goodsID = "";
       }
?>

<?php

     require_once("saleData.php");

      $discount = getCouponRate($couponCode);
      $tanka = getPrice($goodsID);

     if (is_null($discount) || is_null($tanka)) {

       $err = '<div class="error">不正な操作がありました。</div>';
      exit($err);
      }
?>

<?php

if(isset($_POST[ 'kosu' ])) {
$kosu = $_POST[ 'kosu' ];

if (!ctype_digit($kosu)) {

$errors[] = "個数は整数で入力して下さい。";
    }
   } else {

   $errors[] = "個数が未設定";
    }
?>

<?php
if (count($errors)>0) {

echo '<ol class="error">';
foreach ($errors as $value) {
   echo "<li>" , $value , "</li>";
   }
   echo "</ol>";
} else {

$price = $tanka * $kosu;
$discount_price = floor($price * $discount);
$off_price = $price - $discount_price;
$off_per = (1- $discount)*100;

$tanka_fmt = number_format($tanka);
$discount_price_fmt = number_format($discount_price);
$off_price_fmt = number_format($off_price);

echo "単価:{$tanka_fmt}円、", "個数:{$kosu}個", "<br>";
echo "金額:{$discount_price_fmt}円", "<br>";
echo "(割引:-{$off_price_fmt}円、{$off_per}% OFF)", "<br>";
}
?>


<form method="POST" action="discountForm2.php">

          <input type="hidden" name="kosu" value="<?php echo $kosu; ?>">
    <ul>
          <li><input type="submit" value="戻る" ></li>
   </ul>
</form>

</div>
</body>
</html>

discountForm2.php【割引購入ページを作る】

<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8">
<title>割引購入ページ</title>
<link href=" ../../css/style.css" rel="stylesheet">
</head>
<body>
<div>
       <?php
          require_once("util.php");

         if (!cken($_POST)){
              $encoding = mb_internal_encoding();
              $err = "Encoding Error! The expected encoding is " . $encoding;

              exit($err);
          }

           $_POST = es($_POST);
    ?>

<?php


      if (isset($_POST[ 'kosu' ])) {
          $kosu = $_POST[ 'kosu' ];
      } else {
          $kosu = "";
      }
?>

<?php

       require_once("saleData.php");

         $couponCode = "ha45as";
         $goodsID = "ax102";

      $discount = getCouponRate($couponCode);
      $tanka = getPrice($goodsID);

      if (is_null($discount) || is_null($tanka)) {

     $err = '<div class="error">不正な操作がありました。</div>';
      exit($err);
       }
?>

<?php
      $off = (1 - $discount) * 100;
      if ($discount>0) {
           echo "<h2>このページでのご購入は{$off}% OFFになります!</h2>";
       }

  $tanka_fmt = number_format($tanka);
  ?>


  <form method="POST" action="discount.php">

  <input type="hidden" name="couponCode" value="<?php echo $couponCode; ?>">
  <input type="hidden" name="goodsID" value="<?php echo $goodsID; ?>">
  <ul>
     <li><label>単価:<?php echo $tanka_fmt; ?></label></li>
     <li><label>個数:
           <input type="number" name="kosu">
    </label></li>
    <li><input type="submit" value="計算する" ></li>
 </ul>
</form>
</div>
</body>
</html>

イメージ説明

イメージ説明

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 3

+2

ファイル名の大文字小文字は統一しましょうね。
saledata.phpなのかsaleData.phpなのか。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/07/27 17:17

    saledata.phpに直しました。しかし、まだ同じエラーが出ている状況です。

    キャンセル

checkベストアンサー

0

  • htdocsの中にsaledata.phpとdiscountForm2.phpとdiscount2.phpとutil.phpが並列して入っているかご確認ください
  • saledata.phpの内容をDiscountForm2.phpなどにコピーしてどうかご確認ください。

ちょっと外れますが、<form method="POST" action="discount.php">となっているところはdiscount2.phpではないですか?

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

まず、インデントを適切にたもつことを心がけるべきと思います。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.52%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • PHP

    20301questions

    PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。