• // パラメータに
    不正な値が入っているかチェックで質問です。動画は13...
  • じゅんやじゅんや 
    // パラメータに不正な値が入っているかチェックで質問です。動画は13分です。

    if(!is_int((int)$currentPageNum)){

    error_log('エラー発生:指定ページに不正な値が入りました');

    header("Location:index.php"); //トップページへ

    }

    変数$currentPageNumには、int(1) または string(1) "1"、string(1) "2"みたいな感じで値が格納されることは確認しました。

    if文の条件では、まず変数$currentPageNumを(int)で数値型にキャストしています。

    その上で、!is_int()を使ってint型(数値型)じゃない場合にif文の中に入ってトップページへ遷移するようになっていると思います。

    しかし、int型にキャストしているので、int型じゃない場合はありえないと思います。
    なのでこのif文は意味が無いのでは無いかと考えています。

    もちろん不正なパラメーターかどうかを判定するのは必要ですが、このif文で不正かどうかを判定する役割をできているのか疑問に思います。

    自分の理解が間違っていたらすいません。


    回答お願いします。
    回答 0

     
    その認識であっています。
    では不正なパラメータがきた場合はどのような書き方をすればエラーキャッチできるか考えてみてください。
    他にもあえて動かないようにしているコードもありますので、見つけて動くようにしていきましょう!

    じゅんや 
    回答ありがとうございます。

    考えて変更をしてみましたので報告します。

    今回の問題に関して、前回学んだ「registProduct.php」ファイルを参考にしました。

    理由は// パラメータ改ざんチェックをこのページでもしていたことを思い出したので参考にしました。

    【変更前のコード】

    // カレントページのGETパラメータを取得
    $currentPageNum = (!empty($_GET['p'])) ? $_GET['p'] : 1;

    //パラメータに不正な値が入っているかチェック
    if(!is_int((int)$currentPageNum)){
    error_log('エラー発生:指定ページに不正な値が入りました');
    header("Location:index.php"); //トップページへ
    }

    【変更後のコード】

    // カレントページのGETパラメータを取得
    $currentPageNum = (!empty($_GET['p'])) ? $_GET['p'] : 1;

    // 表示件数
    $listSpan = 20;

    // 現在の表示レコード先頭を算出
    $currentMinNum = (($currentPageNum-1)*$listSpan); //1ページ目なら(1-1)*20 = 0 、 2ページ目なら(2-1)*20 = 20

    // DBから商品データを取得
    $dbProductData = getProductList($currentMinNum);

    // パラメータに不正な値が入っているかチェック
    if(!empty($currentPageNum)

    じゅんや 
    切れてしまっていたので追加します。

    【変更後のページに追加】

    // パラメータに不正な値が入っているかチェック
    if(!empty($currentPageNum)

    じゅんや 
    // パラメータに不正な値が入っているかチェック

    if(!empty($currentPageNum)

     
    ここは不明点を質問する場所ですので報告や答え合わせについてはお答えできかねます。
    ご自身で考えて動くコードに修正してください。
    また、コードを載せる場合は文字数制限もあるためGithubやCODEPENでアップしてからURLを記載ください。