Solucionado (ver solução)
Solucionado
(ver solução)
24
respostas

PHP - Notice: Undefined index:

Pessoal, alguém poderia me explicar e ajudar a resolver esses erros que aparecem somente no servidor de produção e não aparecem no servidor de desenvolvimento? Obrigado!

Notice: Undefined index: produtos_333 in /home/beladuquesa/www/sys/processa.php on line 172

Notice: Undefined index: produtos_333 in /home/beladuquesa/www/sys/processa.php on line 173

Warning: Cannot modify header information - headers already sent by (output started at /home/beladuquesa/www/sys/processa.php:172) in /home/beladuquesa/www/sys/processa.php on line 176

Com esse warning não está adicionando mais um produto e nem aparecendo os botões de adiciona, deleta e diminui:

Seguem as linhas onde ocorrem esses erros:

linha 1><?php
    session_start();
     ?>
<?php
//INSTANCIAR PAGINA CARRINHO
$pagina = 'carrinho.php';

//INICIAR A CLASSE
class shopping{
//MOSTRAR CARRINHO COMPRAS
function carrinho(){

aqui é onde declaro a ação de diminuir, aumentar e deletar:
<td class="td-actions">

                    <a href="processa.php?add='.$id.'" button type="button" rel="tooltip" data-placement="right" title="Adicionar" class="btn btn-info btn-simple btn-icon">
                           <i class="fa fa-plus"></i></a>

                    </button>

                    <a href="processa.php?menos='.$id.'" button type="button" rel="tooltip" data-placement="right" title="Diminuir" class="btn btn-alert btn-simple btn-icon">
                            <i class="fa fa-minus"></i></a>

                    </button>

                    <a href="processa.php?del='.$id.'" button type="button" rel="tooltip" data-placement="right" title="Remover item" class="btn btn-danger btn-simple btn-icon ">
                            <i class="fa fa-times"></i></a>

                    </button>


aqui a partir da linha 165 

linha 165>//FIM DA CLASS
}
//ADIÇÃO DE PRODUTOS
if (isset($_GET['add'])) {
    $conexao = mysqli_connect('');
    $resultado = mysqli_query($conexao, "select * from produtos where id = ".$_GET['add']);
    $produto = mysqli_fetch_assoc($resultado);
    if ($_SESSION['produtos_'.$_GET['add']] != $produto['quantidade']) {
        $_SESSION['produtos_'.$_GET['add']] += '1';

    }
    header("Location:".$pagina);
}
//SUBTRAÇÃO DE PRODUTOS
if (isset($_GET['menos'])) {
    $_SESSION['produtos_'.$_GET['menos']] -- ;
    header("Location:".$pagina);
}
//DELETAR PRODUTOS
if (isset($_GET['del'])) {
    $_SESSION['produtos_'.$_GET['del']] = '0' ;
    header("Location:".$pagina);
}

?>
24 respostas

Oi Sergio, tudo bom?

Seu erro diz qu eo problema esta no arquivo processa.php na linha 172. Provavelmente nessa linha estamos procurando um index em algum array. Compartilha com a gente esse arquivo? Assim fica mais facil saber certinho =)

Muito obrigado André, segue abaixo todo o codigo. Como você pode ver tirei a parte do html porque acredito que não preciso dela e o warning de Cannot modify header information sumiu quando eu seleciono o primeiro produto mas quando volto para selecionar outro o Warning volta com tudo junto com Undefined Index mas se dou refresh na pagina eles somem!!! Vai entender isso!!!

<?php
session_start();
?>
<?php
//INSTANCIAR PAGINA CARRINHO
$pagina = 'carrinho.php';

//INICIAR A CLASSE
class shopping{
//criar conexão
    //conexao com o BD

//MOSTRAR CARRINHO COMPRAS
function carrinho(){
//preciso desse Total para que não mostre erro
$Total = null;

    //VERIFICAR SE EXISTE SESSION ABERTA
    if ($_SESSION) {
        //SEPARAR NOME DE QUANTIDADE (nome é o id do produto)       
        foreach ($_SESSION as $nome => $quantidade ) {
            //VERIFICAR SE A QUANTIDADE NÃO ESTÁ ZERADA
            if ($quantidade > 0) {      

            //VERIFICA SE EXISTE UMA OUTRA SESSION COM O MESMO NOME ABERTA
            if (substr($nome, 0,9) == 'produtos_') {
                //PEGAR ID DA SESSION
                $id = substr($nome, 9,(strlen($nome) -9));
                //MONTAR O CARRINHO
                //conexão + select 
  $conexao = mysqli_connect('xxxxxxxxxx', 'xxxxxxxx', 'xxxxxxxxx', 'xxxxxxxxxx');
  $resultado = mysqli_query($conexao, "select * from produtos where id = {$id}");
  while($produto = mysqli_fetch_assoc($resultado)) {
    $subTotal = ($quantidade) * ($produto['preco']);

echo'
<tbody>
        <td>

                    <div class="img-container">

                        <img src="assets/img/product.jpg" alt="...">

                    </div>

                </td>

                <td class="td-name">

                    '.$produto['nome'].'

                </td>

                <td>

                    <b>Meeting Notes</b>

                    <p>

                    Most beautiful agenda for the office.</p>

                </td>


                <td class="td-number">

                    <small>&dollar;</small>'.number_format($produto['preco'], 2).'

                </td>

                <td class="td-number">

                    <small>x</small>
                   '.$quantidade.'
                </td>

                <td class="td-number">

                    <small>&dollar;</small>'.number_format($subTotal, 2).'

                </td>
                 <tr>

                <td class="td-actions">

                    <a href="processa.php?add='.$id.'" button type="button" rel="tooltip" data-placement="right" title="Adicionar" class="btn btn-info btn-simple btn-icon">
                           <i class="fa fa-plus"></i></a>

                    </button>

                    <a href="processa.php?menos='.$id.'" button type="button" rel="tooltip" data-placement="right" title="Diminuir" class="btn btn-alert btn-simple btn-icon">
                            <i class="fa fa-minus"></i></a>

                    </button>

                    <a href="processa.php?del='.$id.'" button type="button" rel="tooltip" data-placement="right" title="Remover item" class="btn btn-danger btn-simple btn-icon ">
                            <i class="fa fa-times"></i></a>

                    </button>



                </td>


            </tr>

                ';               

            }                 
        }
$Total += $subTotal;
}
    }
}
    if($Total == 0){
echo '

<tr>

<td colspan="7" align="center" valign="midle"><i class="material-icons">add_shopping_cart</i> Seu Carrinho esta Vazio

</td>
</tr>
<br>
<tr>

<td colspan="7" align="center" valign="midle"><a href="../index.php" button class="btn btn-success btn-fill">Continuar Comprando</a></button>

</td>
</tr>

';
    }else{
echo '
 <tr>
            <td colspan="7" align="center" valign="midle"> <a href="../index.php" button type="button" class="btn btn-success btn-fill btn-l">Continuar Comprando</button></td>
</tr>
 <tr>


                <td colspan="2"></td>

                <td></td>

                <td class="td-total">

                   Total

                </td>               

                <td class="td-price">

                    <small>&dollar;</small>'.number_format($Total, 2).'

                </td>

                <td> <button type="submit" class="btn btn-info btn-fill btn-l">Concluir a Compra<i class="fa fa-chevron-right"></i></button></td>



                <td></td>

            </tr>
 </tbody>
';
    }
}

//FIM DA CLASS
}
//ADIÇÃO DE PRODUTOS
if (isset($_GET['add'])) {
$conexao = mysqli_connect('xxxxxxxxxx', 'xxxxxxx', 'xxxxxxxx', 'xxxxxxxxx');
    $resultado = mysqli_query($conexao, "select * from produtos where id = ".$_GET['add']);
    $produto = mysqli_fetch_assoc($resultado);   
    if ($_SESSION['produtos_'.$_GET['add']] != $produto['quantidade']) {
        $_SESSION['produtos_'.$_GET['add']] += '1';        
    }  
    header("Location:".$pagina); 
    }     

//SUBTRAÇÃO DE PRODUTOS
if (isset($_GET['menos'])) {
    $_SESSION['produtos_'.$_GET['menos']] -- ;
    header("Location:".$pagina);
}
//DELETAR PRODUTOS
if (isset($_GET['del'])) {
    $_SESSION['produtos_'.$_GET['del']] = '0' ;
    header("Location:".$pagina);
}

?>

Olá Sergio,

Analisando seu código identifiquei que o problema pode está nos objetos da sua Sessão. Pode me confirmar se a linha 172 é a linha a seguir:


$_SESSION['produtos_'.$_GET['menos']] -- ;

Se sim, eu aconselharia que você faça o debug da sessão. Poderia nos enviar um var_dump do $_SESSION para ver o que tem nele no momento em que é chamado e dado como index undefined.

Acredito que o problema possa está na manipulação dessa sessão.

Espero ter ajudado.

Muito obrigado. :)

Oi Luiz obrigado.

A linha 172(174) e 173(175) são essas:

if ($_SESSION['produtos_'.$_GET['add']] != $produto['quantidade']) {
        $_SESSION['produtos_'.$_GET['add']] += '1';

Segue o var dump destas sessions:

Notice: Undefined index: produtos_312 in /home/beladuquesa/www/sys/processa.php on line 174

Notice: Undefined index: produtos_312 in /home/beladuquesa/www/sys/processa.php on line 175
array(2) { ["produtos_319"]=> int(1) ["produtos_312"]=> int(1) } 
Warning: Cannot modify header information - headers already sent by (output started at /home/beladuquesa/www/sys/processa.php:174) in /home/beladuquesa/www/sys/processa.php on line 179

outro que tirei:

Notice: Undefined index: produtos_274 in /home/beladuquesa/www/sys/processa.php on line 174

Notice: Undefined index: produtos_274 in /home/beladuquesa/www/sys/processa.php on line 175
array(5) { ["produtos_319"]=> string(1) "0" ["produtos_312"]=> string(1) "0" ["produtos_437"]=> string(1) "0" ["produtos_304"]=> string(1) "0" ["produtos_274"]=> int(1) } 
Warning: Cannot modify header information - headers already sent by (output started at /home/beladuquesa/www/sys/processa.php:174) in /home/beladuquesa/www/sys/processa.php on line 179

O warning:

Warning: Cannot modify header information - headers already sent by (output started at /home/beladuquesa/www/sys/processa.php:174) in /home/beladuquesa/www/sys/processa.php on line 179

Acredito que é porque você está tentando modificar o header depois de já ter já startado uma sessão. O header deve ser sempre a primeira coisa enviada pelo PHP.

Já o problema do Undefined index, ainda estou queimando meus neurônios aqui.

Achei engraçado que ele sempre da erro na último index do array que está na sessão. O que acontece se você adicionar produtos repetidos? Que não sejam o último. Por exemplo, adicionar o produto 304 aonde o 274 foi o último adicionado. Ele muda a quantidade do 304 para 2?

Pelo o que eu entendi o erro está na hora em que eu adiciono o último produto pela segunda vez, certo? E ele acaba não encontrando o index, mesmo existindo?

Luiz, o primeiro Warning do header eu resolvi tirando as tags html do arquivo processa e funcionou. No primeiro produto selecionado não aparecia o Warning mas aparece no segundo em diante. Acredito que no meio do código ainda tenha alguma referência ao header mas não sei onde.

Sim isso mesmo, ele deve mudar a quantidade adicionando mais 1 quando eu adiciono o mesmo produto.

Na primeira sessão ele aparece o erro. Mas se der refresh na pagina, some.

Se adicionarmos o segundo produto o erro some. Ao adicionar o terceiro volta.

Adicionando o mesmo produto some o erro.

Mesmo que eu delete todos os produtos da sessão e volte a adicionar produtos daí não aparecem erros.

Se eu adicionar um produto novo (que não havia adicionado ateriormente) o erro aparece de novo e se der refresh na pagina, some

Entendo, pode realizar um procedimento pra mim?

Você poderia tentar usar a função isset (Verifica se a variável é definida. ) do PHP antes de realizar as operações com a Sessão.

Por exemplo:

if(isset($_SESSION['produtos_'.$_GET['add']]) {
    //variavel definida
    if ($_SESSION['produtos_'.$_GET['add']] != $produto['quantidade']) {
            $_SESSION['produtos_'.$_GET['add']] += '1';
    }
} else {

    //variavel nao definida
    //AQUI EU ADICIONARIA MEU NOVO PRODUTO NA SESSÃO...
}

Dessa maneira se por acaso em algum procedimento o usuário tentasse acessar um produto que ainda não foi adicionado ele não iria fazer direto o acesso a sessão e sim uma validação antes se aquele produto já foi adicionado ou não. Entende?

Segue documentação doPHP da função isset para apoio. (http://php.net/manual/pt_BR/function.isset.php)

Obrigado Luiz, veja se entendi, seria isso?

//ADIÇÃO DE PRODUTOS

if(isset($_SESSION['produtos_'.$_GET['add']]) {
    //variavel definida
    if ($_SESSION['produtos_'.$_GET['add']] != $produto['quantidade']) {
            $_SESSION['produtos_'.$_GET['add']] += '1';
    }
   } else {

if (isset($_GET['add'])) {
$conexao = mysqli_connect('xxxxxxxxxx', 'xxxxxxx', 'xxxxxxxx', 'xxxxxxxxx');
    $resultado = mysqli_query($conexao, "select * from produtos where id = ".$_GET['add']);
    $produto = mysqli_fetch_assoc($resultado);   
    if ($_SESSION['produtos_'.$_GET['add']] != $produto['quantidade']) {
        $_SESSION['produtos_'.$_GET['add']] += '1';
   }  
    header("Location:".$pagina); 
    }   
    }

Veja bem, fiz algumas alterações e comentei:

if(isset($_SESSION['produtos_'.$_GET['add']]) {
    //variavel definida
    if ($_SESSION['produtos_'.$_GET['add']] != $produto['quantidade']) {
            $_SESSION['produtos_'.$_GET['add']] += '1';
    }
   } else {

if (isset($_GET['add'])) {
$conexao = mysqli_connect('xxxxxxxxxx', 'xxxxxxx', 'xxxxxxxx', 'xxxxxxxxx');
    $resultado = mysqli_query($conexao, "select * from produtos where id = ".$_GET['add']);
    $produto = mysqli_fetch_assoc($resultado);   
/*    COMO É A PRIMEIRA ATRIBUIÇÃO E JÁ TESTAMOS E SABEMOS QUE ESSA SESSÃO NAO EXISTE NÃO PRECISAMOS DO IF E TIRAMOS O += SÓ PARA = PORQUE SABEMOS QUE É A PRIMEIRA VEZ QUE ESSE PRODUTO ESTÁ SENDO ATRIBUIDO*/
        $_SESSION['produtos_'.$_GET['add']]  = '1';
    header("Location:".$pagina); 
    }   
    }

Acho que seria isso. Poderia validar no funcionamento?

Oi Luiz, fiz as alterações e a resposta foi essa:

Parse error: syntax error, unexpected '{' in /home/beladuquesa/www/sys/processa.php on line 170

a linha 170 a 174:

if(isset($_SESSION['produtos_'.$_GET['add']]) {
    //variavel definida
    if ($_SESSION['produtos_'.$_GET['add']] != $produto['quantidade']) {
            $_SESSION['produtos_'.$_GET['add']] += '1';
    }

Está faltando fechar um parênteses

if(isset($_SESSION['produtos_'.$_GET['add']])) {

Oi Luiz, retornou este aviso e não apareceu o produto:

Notice: Undefined variable: produto in /home/beladuquesa/www/sys/processa.php on line 172

Essa variável produto não vinha da Session ela vinha do BD do resultado da query

Isso significa que na linha 172 a variável $produto deve está nula e por isso não pode ser acessada.

Você precisaria inicializa-la de alguma maneira.Como por exemplo uma String vazia. Isso dependerá do tipo dela.

Luiz preciso da tua ajuda criei uma string ilegal:

//ADIÇÃO DE PRODUTOS
$produto='';
if(isset($_SESSION['produtos_'.$_GET['add']])) {
    //variavel definida
    if ($_SESSION['produtos_'.$_GET['add']] != $produto['quantidade']) {
            $_SESSION['produtos_'.$_GET['add']] += '1';
    }
   } else {

Warning: Illegal string offset 'quantidade' in /home/beladuquesa/www/sys/processa.php on line 173

Notice: Uninitialized string offset: 0 in /home/beladuquesa/www/sys/processa.php on line 173

Então Sergio,

O que está acontecendo na verdade é quando o código tenta acessar o condicional:

if ($_SESSION['produtos_'.$_GET['add']] != $produto['quantidade'])

Ele não encontra a variavel $produto como um Array. Como está sendo tentado o acesso na parte

$produto['quantidade'])

Como é um array deveria ser inicializada da seguinte maneira.

$produto = []

O que não posso garantir é exatamente onde você terá que inicializar essa variável. Provavelmente no inicio do código, logo quando a página inicia para não comprometer os comportamentos que vem depois da variável.

Entende?

Luiz , não está adicionando novos produtos e o produto que estava na sessão ele aceita mas está sem o limitador da quantidade de produtos disponiveis no BD (fica somando sem parar quando adiciono o mesmo produto). A adição, subtração e deletar produtos na pagina não está funcionando ele envia para a pagina processa e para, não redireciona de volta mas adiciona o produto. O que posso mais fazer para resolver essa situação? Você teria alguma idéia? obrigado

Luiz, bom dia. Consegui resolver os problemas acima adicionando a conexão ao primeiro if. e tudo está funcionando normalmente.

O unico problema agora é outra warning:

Notice: Undefined index: add in /home/beladuquesa/www/sys/processa.php on line 169

//ADIÇÃO DE PRODUTOS linha 169>if(isset($SESSION['produtos'.$_GET['add']])) {

Beleza,

Vamos tentar mudar um pouco esse código parar ver se conseguimos aproveitar a sua lógica.

Pode tentar o seguinte?

//Antes de fazer a checagem diretamente na sessão, poderia primeiramente fazer a preparação das viráveis Por exemplo:.

$idProduto = $_GET["add"];
//Aqui você pode verificar se o ID está na variável $idProduto corretamente com um var_dump.

var_dump($idProduto);
//O die() para execução apenas usar quando estiver debbugando.
die();

//Com o ID do produto corretamente na variável você pode acessar agora a sua lista de produtos. Por Exemplo

if(isset($SESSION['produtos_'.$idProduto])) {
    //O produto existe na sessão
} else {
    //Novo produto para ser adicionado com a quantidade 1.
}

OBS: No seu exemplo vi que você está acessando a variável sem o anderline (). Entretanto em um outro exemplo seu, vi que você armazena usando o anderline(). Isso também pode ser a causa do seu problema. Pode verificar isso também?

Segue o código sem o anderline:

if(isset($SESSION['produtos'.$_GET['add']])) {

Outro código com o anderline que você encaminhou:

$produto='';
if(isset($_SESSION['produtos_'.$_GET['add']])) {
    //variavel definida
    if ($_SESSION['produtos_'.$_GET['add']] != $produto['quantidade']) {
            $_SESSION['produtos_'.$_GET['add']] += '1';
    }
   } else {

Oi Luiz, obrigado. Verifiquei o underline e está ok, deve ter sido na hora de copiar e colar. A nova refatoração funciona mas ainda permanecem os avisos: 1) se os produtos estão na sessão:

Notice: Undefined index: add in /home/beladuquesa/www/sys/processa.php on line 165
linha 165>$idProduto = $_GET["add"];

2) Se adiciono novo produto que não estava na sessão:

Notice: Undefined index: produtos_319 in /home/beladuquesa/www/sys/processa.php on line 192
linha 192 (do else)> if ($_SESSION['produtos_'.$_GET['add']] != $produto['quantidade']) {

Notice: Undefined index: produtos_319 in /home/beladuquesa/www/sys/processa.php on line 193
linha 193( do else)>$_SESSION['produtos_'.$_GET['add']]  += '1';
Warning: Cannot modify header information - headers already sent by (output started at /home/beladuquesa/www/sys/processa.php:192) in /home/beladuquesa/www/sys/processa.php on line 196
linha 196 do else>  header("Location:".$pagina);

3) Se der refresh na pagina somem os avisos Undefined anteriores e só fica o abaixo:

Notice: Undefined index: add in /home/beladuquesa/www/sys/processa.php on line 165
linha 165>$idProduto = $_GET["add"];

esse é o código que estou utilizando para que todas as operações funcionem, mesmo que com avisos:

//ADIÇÃO DE PRODUTOS

//Antes de fazer a checagem diretamente na sessão, poderia primeiramente fazer a preparação das viráveis Por exemplo:.
$idProduto = $_GET["add"];

//Aqui você pode verificar se o ID está na variável $idProduto corretamente com um var_dump.

//var_dump($idProduto);
//O die() para execução apenas usar quando estiver debbugando.
//die();

//Com o ID do produto corretamente na variável você pode acessar agora a sua lista de produtos. Por Exemplo

if(isset($SESSION['produtos_'.$idProduto])) {
     //O produto existe na sessão
  $conexao = mysqli_connect('xxxxxxxxxx', 'xxxxxxx', 'xxxxxxxx', 'xxxxxxxxx');
    $resultado = mysqli_query($conexao, "select * from produtos where id = ".$_GET['add']);
    $produto = mysqli_fetch_assoc($resultado);
     if ($_SESSION['produtos_'.$_GET['add']] != $produto['quantidade']) {
        $_SESSION['produtos_'.$_GET['add']] += '1';
    }
    header("Location:".$pagina); 
    } else {
    //Novo produto para ser adicionado com a quantidade 1.
   if (isset($_GET['add'])) {
  $conexao = mysqli_connect('xxxxxxxxxx', 'xxxxxxx', 'xxxxxxxx', 'xxxxxxxxx');
    $resultado = mysqli_query($conexao, "select * from produtos where id = ".$_GET['add']);
    $produto = mysqli_fetch_assoc($resultado);
/*    COMO É A PRIMEIRA ATRIBUIÇÃO E JÁ TESTAMOS E SABEMOS QUE ESSA SESSÃO NAO EXISTE NÃO PRECISAMOS DO IF E
 TIRAMOS O += SÓ PARA = PORQUE SABEMOS QUE É A PRIMEIRA VEZ QUE ESSE PRODUTO ESTÁ SENDO ATRIBUIDO*/
 if ($_SESSION['produtos_'.$_GET['add']] != $produto['quantidade']) {
    $_SESSION['produtos_'.$_GET['add']]  += '1';

    } 
      header("Location:".$pagina);  
}
   }
solução!

Vê se isso resolve...

//ADIÇÃO DE PRODUTOS

//Antes de fazer a checagem diretamente na sessão, poderia primeiramente fazer a preparação das viráveis Por exemplo:.

if(isset($_GET["add"])){
    $idProduto = $_GET["add"];

    //Aqui você pode verificar se o ID está na variável $idProduto corretamente com um var_dump.

//var_dump($idProduto);
//O die() para execução apenas usar quando estiver debbugando.
//die();

//Com o ID do produto corretamente na variável você pode acessar agora a sua lista de produtos. Por Exemplo

if(isset($SESSION['produtos_'.$idProduto])) {
     //O produto existe na sessão
  $conexao = mysqli_connect('xxxxxxxxxx', 'xxxxxxx', 'xxxxxxxx', 'xxxxxxxxx');
    $resultado = mysqli_query($conexao, "select * from produtos where id = ".$_GET['add']);
    $produto = mysqli_fetch_assoc($resultado);
     if ($_SESSION['produtos_'.$_GET['add']] != $produto['quantidade']) {
        $_SESSION['produtos_'.$_GET['add']] += '1';
    }
    header("Location:".$pagina); 
    } else {
    //Novo produto para ser adicionado com a quantidade 1.
   if (isset($_GET['add'])) {
  $conexao = mysqli_connect('xxxxxxxxxx', 'xxxxxxx', 'xxxxxxxx', 'xxxxxxxxx');
    $resultado = mysqli_query($conexao, "select * from produtos where id = ".$_GET['add']);
    $produto = mysqli_fetch_assoc($resultado);
/*    COMO É A PRIMEIRA ATRIBUIÇÃO E JÁ TESTAMOS E SABEMOS QUE ESSA SESSÃO NAO EXISTE NÃO PRECISAMOS DO IF E
 TIRAMOS O += SÓ PARA = PORQUE SABEMOS QUE É A PRIMEIRA VEZ QUE ESSE PRODUTO ESTÁ SENDO ATRIBUIDO*/
 if ($_SESSION['produtos_'.$_GET['add']] != $produto['quantidade']) {
    $_SESSION['produtos_'.$_GET['add']]  += '1';

    } 
      header("Location:".$pagina);  
}
   }
} else {
    //Não a produtos para adicionar
}

Mas agora o funcionamento já está OK ne?

Obrigado Luiz Fiz um session_destroy e iniciei novamente. Primeiro produto e ocorreu as warnings abaixo novamente mas as ações estão normais, inserir quantidade, diminuir e deletar produto, soma do sub total e total geral tudo ok.

Notice: Undefined index: produtos_333 in /home/beladuquesa/www/sys/processa.php on line 194
linha194 do else> if ($_SESSION['produtos_'.$_GET['add']] != $produto['quantidade']) {

Notice: Undefined index: produtos_333 in /home/beladuquesa/www/sys/processa.php on line 195
linha 195 do else> $_SESSION['produtos_'.$_GET['add']]  += '1';

Warning: Cannot modify header information - headers already sent by (output started at /home/beladuquesa/www/sys/processa.php:194) in /home/beladuquesa/www/sys/processa.php on line 198
linhas 194 a 198 do else>
if ($_SESSION['produtos_'.$_GET['add']] != $produto['quantidade']) {
    $_SESSION['produtos_'.$_GET['add']]  += '1';

    } 
      header("Location:".$pagina);

Novo produto e voltam a ocorrer as mesmas warnings:

Notice: Undefined index: produtos_437 in /home/beladuquesa/www/sys/processa.php on line 194

Notice: Undefined index: produtos_437 in /home/beladuquesa/www/sys/processa.php on line 195

Warning: Cannot modify header information - headers already sent by (output started at /home/beladuquesa/www/sys/processa.php:194) in /home/beladuquesa/www/sys/processa.php on line 198

Se deleto e depois volto a escolher o mesmo produto e coloco no carrinho, somem as warnings e todos os produtos continuam lá e tudo funcionando.

Pô bacana que está funcionando mesmo com esses Warnings.

O que eu aconselho a partir de agora é você tentar pensar na aplicação de forma modular entende?

Acredito que se você fizer os cursos de Orientação a Objeto com PHP e os de JavaScript que envolvem requisições AJAX você irá ter um ganho absurdo em relação a organização e limpeza de código. O que no caso do PHP vai melhorar muito o debug e diminuir muito esses comportamentos que o PHP tem que muitas vezes deixam a gente perdido. Vou deixar meu GitHub aqui -> https://github.com/massaluiz

Essa semana que vem vou tentar fazer um CRUD usando esses conceitos que mencionei acima, se for do seu interesse ficará disponível lá para download o código.

Obrigado Sergio.

Opa eu que agradeço a sua paciência de professor Luiz,, muito obrigado mesmo.

Eu fiz os cursos presenciais WD-43, FP-73 e WD-47. e fico chateado por não separar os arquivos como aprendemos no FP-73 e tampouco utilizar tantas concatenações...mas era o que tinhamos... Esse script eu peguei na internet porque eu estava apanhando para fazer esse carrinho de compras e queria entender o conceito da Session no carrinho. E essa video aula da internet também explicou a não exceder a quantidade maxima de produtos disponiveis no BD (não tinha pensado nisso) Vou ficar antenado nesse fim de semana no seu github para ver essa solução que você vai criar.

abraços e obrigado mais uma vez!

Fico feliz de ter ajudado.

Abraço e até a próxima!