0

以下のコードで、毎回整数を 1 ずつインクリメントしないのはなぜですか? たとえば1 OF 5、フォームを送信したときに持っているとします。送信後は になるはずですが2 OF 5、代わりに が表示されます5 OF 5。これは、最大値を 5 から 3 に変更しても発生します。から始まり、1 OF 3すぐに にジャンプし3 OF 3ます。を表示するコードです。.. OF ..

<h1><?php echo $sessionMinus ?> OF <?php echo $_SESSION['initial_count'] ?></h1>

以下は、毎回値を 1 ずつインクリメントするコードです。

if(isset($_POST['sessionNum'])){
  //Declare my counter for the first time

  $_SESSION['initial_count'] = $_POST['sessionNum'];
  $_SESSION['sessionNum'] = $_POST['sessionNum'];
  $_SESSION['sessionCount'] = 1;
}
else if ($_SESSION['sessionCount'] < $_SESSION['sessionNum']) {
    $_SESSION['sessionCount']++;
}

$sessionMinus =  $_SESSION['sessionCount'];
4

4 に答える 4

1

コードは問題ないようです。ただし、知らないうちにバックグラウンドでページがリクエストされている可能性があります。たとえば、破損した画像パスなどがこのファイルに到達する可能性があるため、カウンターが増加します。そうでないことを確認するには、新しいセッション配列 var を追加して、それを記録する$_SERVER['REQUEST_URI']か、テキスト ファイルなどに記録します。

于 2012-07-04T15:27:42.950 に答える
0

これを試してみてください。現時点ではテストできないため、機能するかどうかはわかりませんが、問題は $_SESSION++ を実行できないことだと思います。また、session_start(); がありません。

<?php
session_start();

if(isset($_SESSION['sessionNum'])) {
    if ($_SESSION['sessionCount'] < $_SESSION['sessionNum']) {
        $_SESSION['sessionCount'] = $_SESSION['sessionCount'] + 1;
    }
}
else {
    $_SESSION['initial_count'] = $_POST['sessionNum'];
    $_SESSION['sessionNum'] = $_POST['sessionNum'];
    $_SESSION['sessionCount'] = 1;
}?>

<h1><?php echo $sessionMinus ?> OF <?php echo $_SESSION['initial_count'] ?></h1>
于 2012-07-04T15:22:18.710 に答える
0

問題は、$_POSThttp 配列から文字列を取得することです。これは自動的に整数値に変換されません。必要なことを行うために、上記のコードを次のように変更できます。

if(isset($_POST['sessionNum'])){
  //Declare my counter for the first time

  $_SESSION['initial_count'] = intval($_POST['sessionNum']);
  $_SESSION['sessionNum'] = intval($_POST['sessionNum']);
  $_SESSION['sessionCount'] = 1;
}
else if ($_SESSION['sessionCount'] < $_SESSION['sessionNum']) {
    $_SESSION['sessionCount']++;
}

$sessionMinus =  $_SESSION['sessionCount'];

このコードは、数値を解析できない場合にintval()が返されるため、基本的な入力検証も提供します。0

于 2012-07-04T15:49:17.700 に答える
0

$_SESSION['sessionCount']++;毎回インクリメントしたい場合は、if/else ステートメントの外に移動するだけです。

于 2012-07-04T15:20:38.103 に答える