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);
}

?>

Garanta sua matrícula hoje e ganhe + 2 meses grátis

Continue sua jornada tech com ainda mais tempo para aprender e evoluir

Quero aproveitar agora
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!