2016-10-21 23 views
-1

PHPのお知らせ:不定フォームが次のエラー提出された場合、オフセットとインデックス

PHP Notice: Undefined offset: 1 in E:\php\learning2\increase.php on line 10

PHP Notice: Undefined index: quantity in E:\php\learning2\increase.php on line 10

フォーム:

それは解決することができますどのように
session_start(); 

if (isset($_POST['submit'])) { 
    $productId = $_REQUEST['productId']; 

    $productQuantity = $_REQUEST['productQuantity']; 

    $_SESSION['cart'][$productId]['quantity'] += $productQuantity; 

    header('Location: http://localhost:8000/'); 
} 

increase.php

<form action="increase.php" method="post"> 
    <input type="hidden" name="productId" value="1"> 
    <input type="number" name="productQuantity" value="1"> 
    <input type="submit" name="submit" value="Add to basket"> 
</form> 

を?ここで

$_SESSION['cart'][$productId]['quantity'] += $productQuantity; 

+0

号のsession_start:明示的に配列(複数可)を初期化することによって、それを引き起こしているエラーを修正し、

error_reporting(E_ALL & ~E_NOTICE); 

のか:まず、あなただけの通知を無効にし、意図したとおり、これは働いていると仮定することができます(); if(!isset($ _ SESSION ['cart'])){ $ _SESSION ['cart'] = []; } –

+0

私は、数値と文字列のインデックス通知でキャッチしているマペットです:P –

答えて

1

これらはあなたが意図した方法で機能していない可能性がコードしている理由にあなたの洞察力を与えるように設計されている注意事項、ある$productIdは(数はevaluted)一部ではありません配列$_SESSION['cart']の配列のように扱おうとしています。 PHPはそれを自動的に配列として初期化し、その配列の['quantity']$productQuantityに設定します。 PHPはこの仮定をしているので(あなたはそれを配列として扱おうとしているので、そうではありません)、それはNOTICE例外をスローします。

2通りの方法で修正できます。

if (!isset($_SESSION['cart'])) 
{ 
    $_SESSION['cart'] = array(); 
} 
if (!isset($_SESSION['cart'][$productId])) 
{ 
    $_SESSION['cart'][$productId] = array('quantity' => 0); 
} 
$_SESSION['cart'][$productId]['quantity'] += $productQuantity; 
+0

あなたの詳細な答えと助けをありがとう!それは有り難いです。 –

+0

この回答が確実に役に立ちます。 @RuTrashChannel。 *先に進んでください* –

+0

通知や警告を表示しないようにしてください。それらに対処する唯一の正しい**方法は、問題を無視しないようにすることです。新しいコードを書くときには、常に 'error_reporting = -1'(またはPHP 5.4以降では' E_STRICT'が必須ではない 'error_reporting = E_ALL | E_STRICT')を使用してください。 –

関連する問題