PHP错误:注意:未定义的索引:

PHP*_*OOB 10 php variables indexing undefined

我正在使用PHP购物车,我似乎在各种各样的地方收到此错误"注意:未定义的索引:".错误指的是不同位置的类似编码位.例如,我有一段编码,用于计算用户决定订阅的月份的套餐价格.我有以下错误引用的变量:

    $month = $_POST['month'];
    $op = $_POST['op'];
Run Code Online (Sandbox Code Playgroud)

$ month变量是用户在表单中输入的数字,$ op变量是不同的包,其值存储在用户从表单上的单选按钮中选择的可用表中.

我希望在某种程度上是清楚的.

谢谢

编辑:抱歉忘记提及他们确实在用户提交数据时消失.但是,当他们第一次来到页面时,它会显示此错误.我怎么能摆脱它所以它不显示它?

-

这是代码:

<?php
    $pack_1 = 3;
    $pack_2 = 6;
    $pack_3 = 9;
    $pack_4 = 12;
    $month = $_POST['month'];
    $op = $_POST['op'];
    $action = $_GET['action'];

    if ( $op == "Adopter" ) {
       $answer = $pack_1 * $month;
    }

    if ( $op == "Defender" ) {
      $answer = $pack_2 * $month;
    }

    if ( $op == "Protector" ) {
      $answer = $pack_3 * $month;
    }

    if ( $op == "Guardian" ) {
      $answer = $pack_4 * $month;
    }

    switch($action) {   
        case "adds":
            $_SESSION['cart'][$answer][$op];
            break;
    }
?>  
Run Code Online (Sandbox Code Playgroud)

mea*_*gar 27

您正在尝试访问未设置的数组中的指示.这提出了一个通知.

您现在很可能会注意到它,因为您的代码已移至php.ini已error_reporting设置为包含的服务器E_NOTICE.通过将error_reporting设置为E_ALL & ~E_NOTICE(不推荐)来抑制通知,或者在尝试访问索引之前验证索引是否存在:

$month = array_key_exists('month', $_POST) ? $_POST['month'] : null;
Run Code Online (Sandbox Code Playgroud)


Dea*_*ado 13

您是否将表单处理器放在与表单相同的脚本中?如果是这样,它正在尝试在设置post值之前进行处理(一切都在执行).

将所有处理代码包装在条件中,以检查表单是否已被发送.

if(isset($_POST) && array_key_exists('name_of_your_submit_input',$_POST)){
//process form!
}else{
//show form, don't process yet!  You can break out of php here and render your form
}
Run Code Online (Sandbox Code Playgroud)

脚本在程序编程时从上到下执行.如果表单尚未发送,您需要确保程序知道忽略处理逻辑.同样,在处理之后,您应该重定向到具有类似功能的成功页面

header('Location:http://www.yourdomainhere.com/formsuccess.php');
Run Code Online (Sandbox Code Playgroud)

我不会养成抑制通知或错误的习惯.

如果我建议如果您遇到这些问题并且您正在尝试构建购物车,请改为使用像Magento或OsCommerce这样的成熟电子商务解决方案,请不要冒犯.购物车是一个需要高度安全性的界面,如果您正在努力解决这些POST问题,我可以保证您以后会感到头疼.有许多很好的稳定版本,有些像对象模型一样简单,可以下载.