-1

この問題に関する多くの投稿があることを理解しています。多くの投稿を見てきましたが、何らかの理由で答えを見つけることができます!

どんな助けでも大歓迎です。PHP初心者なので間違っていたらごめんなさい。

配列を使用して基本的なバスケット システムを作成しようとしています。行で undefined index というエラーが発生し続けます$_SESSION['cart'][$app_ID]++;面白いのは、すべてが正しく機能していることです! エラー報告をオフにするだけでなく、エラーを解決したい。

    if(isset($_GET['id'])){


$app_ID = $_GET['id'];   //the item id from the URL 
$action = $_GET['action']; //the action from the URL 


$total = 0;


if (isset($app_ID)){

switch($action) {       

    case "add":
        $_SESSION['cart'][$app_ID]++;
    break;

    case "remove":
        $_SESSION['cart'][$app_ID]--; 
        if($_SESSION['cart'][$app_ID] == 0) unset($_SESSION['cart'][$app_ID]); 
    break;

    case "empty":
        unset($_SESSION['cart']); //unset the whole cart, i.e. empty the cart. 
    break;

みんなありがとう。

4

4 に答える 4

0

$_SESSION を使用するには、ヘッダー情報を送信する前に、最初に session_start () を呼び出す必要があります

これがお役に立てば幸いです。

乾杯、

于 2013-03-28T21:09:15.023 に答える
0
session_start(); // at the top

case "add":
    if (isset( $_SESSION['cart'][$app_ID] )){
        $_SESSION['cart'][$app_ID]++;
    } else {
        $_SESSION['cart'][$app_ID] = 1;
    }
break;
于 2013-03-28T21:09:21.297 に答える
0

これは単なる通知であり、エラーではないことに注意してください。基本的に、配列インデックスの存在を確認し、参照する前に初期化する必要があります。

if (isset($app_ID)) {
    switch($action) {       

        case "add":
            if (!isset($_SESSION['cart']) {
                $_SESSION['cart'] = array();
            }

            if (!isset($_SESSION['cart'][$app_ID]) {
                $_SESSION['cart'][$app_ID] = 0;
            }

            $_SESSION['cart'][$app_ID]++;
        break;

        case "remove":
            if (isset($_SESSION['cart'] && isset($_SESSION['cart'][$app_ID]) {
                $_SESSION['cart'][$app_ID]--; 
                if ($_SESSION['cart'][$app_ID] <= 0) {
                   unset($_SESSION['cart'][$app_ID]);
                }
            }
        break;

        case "empty":
            unset($_SESSION['cart']); //unset the whole cart, i.e. empty the cart. 
        break;
    }
}

私も安全のために着替え== 0ました。remove<= 0

于 2013-03-28T21:17:12.420 に答える
0

isset($_SESSION['cart'][$app_ID])どこでもand おそらくisset( $_SESSION['cart'])beforeを使用する必要があります。

通常、参照する前に、配列インデックスが存在することを確認する必要があります。これは、isset() を使用するか、またはその条件が避けられないコードを記述することで実行できます (たとえば、以前の場所にインデックスを追加するなど)。

あなたの質問の他の部分は、あなたのコードが機能する理由だと思います。説明は簡単です。存在しないインデックスを参照すると、観察した通知が (非運用環境で) 発行されますが、プログラムは停止しません。使用するものがないnullため、その配列値に対して が返されます。そのため、値は null であると見なされ、++値を整数として取り、null は整数 0 に変換されてから 1 が加算されます。は書き込み演算子であるため++、配列項目が作成されます。は、記述したものが 0 を生成して実行される場所であることが簡単にわかるように$a++定義されているため、(以前は欠落していた) 配列項目に 0 が割り当てられます。これが明確に見えることを願っています。;)$a=$a+1$_SESSION['cart'][$app_ID]=$_SESSION['cart'][$app_ID]+1$_SESSION['cart'][$app_ID]=null+1null+10+1

于 2013-03-28T21:24:42.427 に答える