Ir para conteúdo
Fórum Script Brasil
  • 0

Manipulando Valores de uma Sessão


RodrigoGomes

Pergunta

boa tarde pessoal..

eu to desenvolvendo um script de carrinho virtual, para uma loja..

na hora que adiciono produtos, to tentando fazer um script que analiza os valores da sessão caso já tenha o produto na sessão, ele apenas soma na quantidade..

ele soma tudo certinho, mas o erro aparece quando tento adicionar um produto "diferente" daquele que adicinei (um outro produto com outra ID)..

o meu script "substitui" o valor que tinha na sessão.. e adiciona apenas o produto novo.. e não estou conseguindo "enxergar" meu erro..

desde já agradeço, abraços..

parte do código:

$veriprovalores = explode(",",$_SESSION["produto"]);
//analiza os valores da sessão
for ($z=0; $veriprovalores[$z]; $z++) {
//separa os valores da sessão
$pgrverivalores = explode("-",$veriprovalores[$z]);
//echo que eu fiz para testes
echo $pgrverivalores[0]."<br>";
//analiza se o primeiro valor da sessão é igual ao do produto
if($pgrverivalores[0]==$produto){
//se for, soma os produtos na mesma ID
$tempval=$pgrverivalores[1]+$quantidade;
//analiza se possui algum valor no $sess (temporário)
if($sess){
$sess = "$sess,$pgrverivalores[0]-$tempval-$pgrverivalores[2]";
//cso não tenha ele adiciona o valor puro sem virgula
}else{
$sess = "$pgrverivalores[0]-$tempval-$pgrverivalores[2]";
}
//execulta caso o primeiro valor de sessão não for igual ao do produto
}else{
//analiza se possui algum valor no $sess (temporário)
if($sess){
$sess = "$sess,$produto-$quantidade-".rand(00000,99999);
//caso não tenha ele adiciona o valor puro sem virgula
}else{
$sess = "$produto-$quantidade-".rand(00000,99999);
}
}
}
//adiciona os novos valores na sessão
$_SESSION["produto"] = $sess;

obs.: os produtos são colocados na sessão da seguinte forma:

Produto-Quantidade-ID,Produto-Quantidade-ID,Produto-Quantidade-ID...

ex.: 5-1-16164,3-5-44066,7-2-9466

Editado por Vampyro
Link para o comentário
Compartilhar em outros sites

6 respostass a esta questão

Posts Recomendados

  • 0

bom, acho que não fui nem um pouco claro, vou tentar simplificar o máximo que posso..

eu tenho um for que analiza os valores do $_SESSION["produto"] e tenho também valores que recebi de um form..

eu quero adicionar o valor que recebi do form em $_SESSION["produto"], porem caso já tenha o valor do form eu não adiciono um novo e sim somo a quantidade..

ex.:

<?php

//Valores que recebi do form

$produto="Sabonete";

$quantidade"7";

//Cada produto é separado por virgula e cada detalhe dos produtos é separado por traço, na ordem "Produto-quantidade-Identificação"

$_SESSION["produto]="Oculos-3-kd8s4d,Pasta-5-d4f1d,Escova-3-4dd4as";

//--------------------------------------------------------------------------------------

//separa os valores da sessão

$veriprovalores = explode(",",$_SESSION["produto"]);

for ($z=0; $veriprovalores[$z]; $z++) {

//separa os detalhes dos produtos

$pgrverivalores = explode("-",$veriprovalores[$z]);

//se o produto for igual ao que tiver no $pgrverivalores[0] ele soma em quantidade

if($pgrverivalores[0]==$produto){

if($sess){

//soma

$tempval=$pgrverivalores[1]+$quantidade;

$sess = "$sess,$pgrverivalores[0]-$tempval-$pgrverivalores[2]";

}

else{

$sess = "$pgrverivalores[0]-$tempval-$pgrverivalores[2]";

}

}

//caso $pgrverivalores[0] não seja igual ao produto ele adiciona o produto

else{

if($sess){

$sess = "$sess,$produto-$quantidade-".rand(00000,99999);

}else{

$sess = "$produto-$quantidade-".rand(00000,99999);

}

}

}

//por fim adiciono o valor obtido na session

$_SESSION["produto] = $sess;

?>

o problema esta na parte em vermelho, caso o produto que quero adicionar não tenha no session ele adiciona mais de uma vez por que tem mais de 1 produto na session..

o que faço para ele adicionar meu produto apenas uma vez?

abraços! espero que possam me ajudar..

Link para o comentário
Compartilhar em outros sites

  • 0

Segue abaixo uma sugestao minha:

<?php

//Assumindo que se tenha as seguintes variaveis definidas anteriormente:
//
//$produto, $quantidade, $id e que a sessão tenha sido iniciada com @session_start();
//
//eu faria esta session armazenar uma Array(), mas vou fazer o exemplo usando o seu
//princípio de armazenar como string... da na mesma, mas iria agilizar um pouco o processo
//pois seriam necessários menos "explodes()"...

//array que vai armazenar o resultado temporario
$stemp = Array();
//variavel que passa se o produto já estava na session
$pExiste = false;
if(isset($_SESSION["produto"])){
    //é um tamanho mínimo para uma session válida...
    if(strlen($_SESSION["produto"]) > 4){
        $item = explode(",",$_SESSION["produto"]);      
        for($i = 0; $i < count($item); $i++){
            //tamanho minimo para uma string válida...
            if(strlen($item[$i]) > 4){
                $dados = explode("-",$item[$i]);
                //verifica se a string estava realmente correta
                if(count($dados) == 3){
                    $pdt = $dados[0];
                    $qtde = $dados[1];
                    $pid = $dados[2];
                    //compara para ver se o produto é o mesmo
                    if($pdt == $produto){
                        $qtde += $quantidade;
                        $pExiste = true;
                    }
                    $strTemp = $pdt ."-". $qtde ."-". $pid;
                    $stemp[count($stemp)] = $strTemp;
                }
            }
        }
    }
}
if(!$pExiste){
    $stemp[count($stemp)] = "$produto-$quantidade-". rand(00000,99999);
}

//adiciona os novos valores na sessão
$_SESSION["produto"] = implode(",",$stemp);
?>

Ps.: corrigido... realmente, onde eu dava o explode em items, tinha colocado $_SESSION["produtos"] ao invés de $_SESSION["produto"].... esse "s" q bugou a parada... :D

Editado por colerus
Link para o comentário
Compartilhar em outros sites

  • 0

colerus, obrigado pela sugestão..

achei seu script muito bem bolado.. só que não funcinou como esperado, ele não esta somando e esta substituindo os valores..

digamos que:

$produto="Sabonete";

$quantidade"7";

$_SESSION["produto"]=Oculos-3-kd8s4d,Pasta-5-d4f1d,Escova-3-4dd4as";

usando seu script, o resultado final esta sendo..

$_SESSION["produto]="Sabonete-7-651984";

os dados que já tinham na session sumiram..

Editado por Vampyro
Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...