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

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

ただいまの
回答率

90.52%

  • PHP

    20318questions

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

  • Webサイト

    1075questions

    一つのドメイン上に存在するWebページの集合体をWebサイトと呼びます。

入力された値が数値化どうか、0でないかをチェックする

解決済

回答 3

投稿

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

bitcoiner2045

score 23

割り勘フォームで合計金額や人数を入力して実行しても、localhost/193.phpで何も表示されません。エラーコードの該当箇所を見ても何が間違っているのかが理解できません。どなたかご教示頂けると幸いです。お手数おかけしますが何卒宜しくお願いします。

エラーコード

[27-Jul-2018 04:47:54 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function cken() in /Applications/MAMP/htdocs/193.php:13
Stack trace:
#0 {main}
  thrown in /Applications/MAMP/htdocs/193.php on line 13

186.php

<?php

    function es($data, $charset = 'UTF-8') {

        if (is_array($data)) {

        return array_map(__METHOD__,  $data);
        } else {

            return htmlspecialchars ($data, ENT_QUOTES, $charset);
        }
}
?>


192.php

<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8">
<title>フォーム入力</title>
<link href=" ../../css/style.css" rel="stylesheet">
</head>
<body>
<div>
 <form method="POST" action="193.php">   
        <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>
</html>


193.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("186.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[] = "合計金額が未設定";
}

if (isset($_POST[ 'ninzu' ])) {
    $ninzu = $_POST[ 'ninzu' ];
    if (!ctype_digit($ninzu)) {

        $errors[] = "人数を整数で入力して下さい。";
    } else if ($ninzu==0) {

        $errors[] = "0人では割れません";
    }
  } else {

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

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

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


    <form method="POST" action="192.php">
       <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 "一人あたり{$price_fmt}円を支払えば、不足分は{$amari}円です。";
}
?>
</div>
</body>
</html>

イメージ説明

イメージ説明

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

回答 3

+2

未定義のfunctionであるcken()を呼ぼうとしている為エラーが発生しています。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

checkベストアンサー

+1

I'm a ESPer.

186.phpは↓ではないのですか?

<?php
// XSS対策のためのHTMLエスケープ
function es($data, $charset='UTF-8'){
  // $dataが配列のとき
  if (is_array($data)){
    // 再帰呼び出し
    return array_map(__METHOD__, $data);
  } else {
    // HTMLエスケープを行う
    return htmlspecialchars($data, ENT_QUOTES, $charset);
  }
}

// 配列の文字エンコードのチェックを行う
function cken(array $data){
  $result = true;
  foreach ($data as $key => $value) {
    if (is_array($value)){
      // 含まれている値が配列のとき文字列に連結する
      $value = implode("", $value);
    }
    if (!mb_check_encoding($value)){
      // 文字エンコードが一致しないとき
      $result = false;
      // foreachでの走査をブレイクする
      break;
    }
  }
  return $result;
}
// ?>

もしかして「詳細! PHP 7+MySQL 入門ノート(大重 美幸 (著))」を参照したりしてます?
参考

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

0

何故分からないのかが、全然分かりません。ckenという関数はどこで定義しているつもりですか?

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

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

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

関連した質問

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

  • PHP

    20318questions

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

  • Webサイト

    1075questions

    一つのドメイン上に存在するWebページの集合体をWebサイトと呼びます。