Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

paulo_roll

Carrinho de Compras - Banco de dados, Session ou Cookie?

Recommended Posts

Boa noite galera,

 

Andei pesquisando sobre lojas virtuais e estava até utilizando uma plataforma

como prestashop e opencart.

 

Lição: A flexibilidade é pouca para quem trabalha com programação estruturada.

A minha programação é estruturada mas é bem organizada! hehehehe

 

Decidi eu mesmo montar um código padrão. Assim posso trabalhar meu design com o 960.gs

a gosto do cliente e posso personalizar possíveis diferenças de algum recurso específico de uma loja.

 

Surgiu uma dúvidas para eu montar minha página carrinho.php...

 

Tenho a página de produtos que gera um link para a página carrinho

 

http:// localhost/Loja-Virtual/html/carrinho.php?idp=2&n=Yogi+Tea

 

idp = id do produto

n = nome do produto

 

Gostaria de saber como é o processo e qual o mais pratico para montar um carrinho de compras.

Eu sei que la no carrinho eu vou resgatar o idp = id do produto.

 

A sessão ou cookie começa quando entra no site ou quando joga o primeiro produto no carrinho?

 

Se armazena tudo em um array no session ou no cookie?

 

Como inserir na tabela pedidos os valores de cada array?

 

Só preciso pegar mais a teoria de como funciona pra ter uma idéia

 

Abraços.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá.

 

Bom, o que eu faria era criar uma session em que seu conteúdo seja um array onde cada posição corresponde ao ID e quantidade:

$_SESSION['carrinho'][$id_produto] = $quantidade;

 

Toda vez que adicionar um novo produto, adicionava também ao cookie, assim:

unset($_COOKIE['carrinho']); //apaga o cookie caso exista
setcookie('carrinho',serialize($_SESSION['carrinho']),time()+3600); //cria o novo cookie

 

Repare que utilizei a função "serialize" para converter o array em string, uma vez que no cookie só se grava strings.

 

Agora imagina que o utilizador fechou o browser sem terminar a compra, volta a abrir o browser e o consequentemente o site.

O que vamos fazer é verificar se o cookie existe e extrair os dados para a session. (coloque na index essa verificação, quando o utilizador abrir o site pela primeira vez).

if(isset($_COOKIE['carrinho'])){
    $_SESSION['carrinho'] = unserialize($_COOKIE['carrinho']);
}

 

Repare que utilizei a função "unserialize", para converter a string em um array.

 

Ao finalizar a venda, para extrair os dados da session, podemos usar o foreach:

foreach($_SESSION['carrinho'] as $key){ 
    $id_produto = $key;
    $quantidade = $_SESSION['carrinho'][$key];
}

 

 

Não se esqueça de apagar o cookie/session depois que a venda for finalizada.

unset($_COOKIE['carrinho']);
unset($_SESSION['carrinho']);

 

Abraço.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Opa. Valeu pelas dicas. Na realidade a coisa é até mais simples.

A loja é um catálogo para o internauta montar uma lista de
pedidos(carrinho de compras) e terem a oportunidade de salvar
essa lista (contas de clientes) para futuramente realizar os mesmos pedidos.

Ao montar a lista de pedidos, o internauta liga para a loja (o numero do tel estará bem grande)
e a loja entrega a domicilio, portanto não terá quantidade do produto também, pois o consultor
informará.

Resumindo: É um carrinho de compras somente com nome, foto, cod referencia e
que o cliente tem a possibilidade de salvar para futuramente lembrar. Nada de fretes, pagamentos.

Aplicando o que voce disse acima eu arrisco dizer como ficaria. hehehe

 

$_SESSION['carrinho'] = $id_produto;
unset($_COOKIE['carrinho']); //apaga o cookie caso exista setcookie('carrinho',serialize($_SESSION['carrinho']),time()+3600); //cria o novo cookie

 

 

 

O internauta cria uma session chamada carrinho e atribui o id do primeiro produto cadastrado.

o unset apaga o cookie carrinho. Mas quando for inserir o segundo produto vai apagar o primeiro???

o setcookie entendi. cria um cookie chamado carrinho convertendo o valor da array da session em

string e o time 3600 nao entendi.

 

 

if(isset($_COOKIE['carrinho'])){ $_SESSION['carrinho'] = unserialize($_COOKIE['carrinho']); }

 

 

O código acima resgata os dados do cookie para a session caso o internauta saia do navegador.

Mas como listar esses itens? dá um echo fazendo um for each como abaixo?

 

 

foreach($_SESSION['carrinho'] as $key){ $id_produto = $key; $quantidade = $_SESSION['carrinho'][$key]; }

 

 

Não vou precisar de quantidade, por isso me enrolei todo hehehe.

 

O carrinho de compras somente lista a imagem, nome, cod ref e valor. Após essa etapa o internauta

tem uma opção de salvar o pedido na conta dele para futuramente nao esquecer do que tem

hábito de comprar. heheh

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vamos por parte.

 

Você não está criando um array ao fazer isso:

$_SESSION['carrinho'] = $id_produto;

 

Toda vez que você adicionar um produto a sua session, você irá perder o anterior, uma vez que no código acima a sua session será igual ao id do último produto, sobrepondo o valor anterior armazenado.

Se você não quer manter todos os itens selecionados em um array, porque você está usando session então?

Grava diretamente no cookie, nesse caso não faz sentido ter a session.

 

 

 

o unset apaga o cookie carrinho. Mas quando for inserir o segundo produto vai apagar o primeiro???

Sim, o unset apaga o cookie que lá existe, porque pela lógica que te passei, o conteúdo da session seria um array, sendo assim apenas gravaríamos no cookie os valores convertidos em string..

 

O que poderá ser feito é, antes de recriar o cookie, você pegaria o valor atual e adicionaria o novo, separando os id's por vírgula, assim:

 

 

$novo_conteudo = '';
if(isset($_COOKIE['carrinho'])){
   $novo_conteudo = $_COOKIE['carrinho'].",$id_produto"; //utilize aspas duplas para que o id do produto (integer) seja convertido em string;
   unset($_COOKIE['carrinho']);
}else{
   $novo_conteudo = "$id_produto"; //utilize aspas duplas para que o id do produto (integer) seja convertido em string;
}
setcookie('carrinho',$novo_conteudo,time()+3600);

 

//Para recuperar os id's selecionados, basta fazer um explode do conteúdo do cookie:

$ids= explode(",",$_COOKIE['carrinho']);

 

//Foi gerado um array "ids" em que cada posição será correspondente a um ID de um produto selecionado.

 

 

 

 

 

 

e o time 3600 nao entendi.

Bom, isso é um parâmetro que define o tempo de vida do cookie, no nosso exemplo é valido por 3600 segundos (um hora) a partir do momento em que foi criado (time());

Mais informações sobre cookies aqui: http://www.w3schools.com/PHP/php_cookies.asp

 

 

 

O código acima resgata os dados do cookie para a session caso o internauta saia do navegador.

Mas como listar esses itens? dá um echo fazendo um for each como abaixo?

Quando o utilizador sair do browser o cookie irá permanecer (no nosso caso com a duração de uma hora), para recuperar os dados armazenados no cookie, utilize a função "explode" conforme expliquei mais a cima nesse post. Entendendo a função você ira entender a lógica que estamos utilizando.

Depois de recuperar é só fazer um "while", "do while", "foreach" ou "for", utilizando o array como referência. Procure sobre esses ciclos e irá entender como cada um funciona. Na minha opinião o foreach bastaria.

 

 

 

Após essa etapa o internauta tem uma opção de salvar o pedido na conta dele para futuramente nao esquecer do que tem hábito de comprar

Bom, nesse caso seria necessário gravar na base de dados após concluir a lista, apagando sempre o cookie após gravar os dados.

 

Abraço.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Opa! Acho que to começando a caminhar.

Peguei o seu primeiro post e apliquei a minha necessidade.

 

Quero somente trrabalhar com os ids dos produtos, já que não precisarei

mecher com quantidade.

 

As outras informaçoes do produto eu resgato do bando de dados usando

o WHERE do MySQL.

 

Apareceu um problema.

 

Eu adiciono o primeiro produto de id 2 aí aparece:

Array ( [2] => 2 )

 

se eu navegar pela loja e clicar no produto de id 1 aparece:

Array ( [1] => 1 )

 

parece que está apagando o dado anterior. como faço pra acumular?

$id_produto = $_GET['idp'];
    
$_SESSION['carrinho'][$id_produto] = $id_produto;
    
unset($_COOKIE['carrinho']); //apaga o cookie caso exista
setcookie('carrinho',serialize($_SESSION['carrinho']),time()+3600);    //cria o novo cookie
    
if(isset($_COOKIE['carrinho'])){
   $_SESSION['carrinho'] = unserialize($_COOKIE['carrinho']);
}
    
print_r($_SESSION['carrinho']);

 


Compartilhar este post


Link para o post
Compartilhar em outros sites

Resumindo: É um carrinho de compras somente com nome, foto, cod referencia e

que o cliente tem a possibilidade de salvar para futuramente lembrar. Nada de fretes, pagamentos.

 

Na verdade em projetos de loja virtual COOKIES geralmente são usados no caso do usuario não esta logado e adicionar produtos ao seu carinho de compras e no caso ele fechar o navegador e mais tarde ele pegar e voltar para querer fazer novamente as compras.

No caso como o usuario pode querer lembra novamente você poderia trabalhar com um banco de dados e criar um login para o proprio usuario pode salvar sua lista e consultar mesmo no caso de ele estar em um computador diferente ou limpar os cookies do seu navegador.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Apareceu um problema.

 

Eu adiciono o primeiro produto de id 2 aí aparece:

Array ( [2] => 2 )

 

se eu navegar pela loja e clicar no produto de id 1 aparece:

Array ( [1] => 1 )

Inclui na primeira linha do seu código:

session_start();

Compartilhar este post


Link para o post
Compartilhar em outros sites

Galera,

 

Voces estão me ajudando bastante. Estou entendendo o que voces estao me passando

e adaptando ao meu código.

 

Atualmente está assim...

 

 

<?

session_start();
    
    $id_produto = $_GET['idp'];
    
    if (empty($id_produto)){
        $msg_vazio = "Nenhum produto foi selecionado.";
    }
    else
    {
        $_SESSION['carrinho'][$id_produto] = $id_produto;
    
        unset($_COOKIE['carrinho']); //apaga o cookie caso exista
        setcookie('carrinho',serialize($_SESSION['carrinho']),time()+3600); //cria o novo cookie
    
        if(isset($_COOKIE['carrinho'])){
        $_SESSION['carrinho'] = unserialize($_COOKIE['carrinho']);
        }
    }

?>

 

Agora vem a parte que resgata e monta os itens no carrinho. Porém surgiu um problema:

Se eu fechar o firefox completamente e abrir, o carrinho volta zerado. Onde que estou dando bobeira?

 

Agora se eu fechar a aba e abrir o carrinho em outra aba funciona. Me parece que é algo no cookie.

<?
if (empty($_SESSION['carrinho'])){
  echo '<tr><td colspan="5">Nenhum produto na sua lista de pedidos.</td></tr>';
}
else
{
  foreach($_SESSION['carrinho'] as $key){
  $id_produto = $key;
  $query = "SELECT * FROM produtos WHERE id_produto = '$id_produto'";
  $executa = mysql_query($query,$conexao);
  $row = mysql_fetch_array($executa);
?>

AQUI VEM MEU CONTEÚDO DA TABELA PRODUTOS 
dando echo $row['nome_do_campo']

<?
} //fecha o foreach
?>

?>

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá.

Bom, você tem um erro de lógica.

No seu primeiro código, apague essa parte:

... 
if(isset($_COOKIE['carrinho'])){
    $_SESSION['carrinho'] = unserialize($_COOKIE['carrinho']);
}

 

Você esta gerando um cookie de acordo com o valor da session e logo a seguir está alterando o valor da session com o que foi gravado no cookie?

Não faz sentido, o valor da session irá continuar igual, uma vez que o valor armazenado no cookie vem da session.

 

Bom de qualquer forma não está entrando no "if", uma vez que você acabou de criar o cookie e logo a seguir tenta acessa-lo.

O browser leva um tempo a criar o cookie, por isso ao tentar acessa-lo logo a seguir a sua criação o php não o encontrará.

 

 

 

 

Agora vem a parte que resgata e monta os itens no carrinho. Porém surgiu um problema:

Se eu fechar o firefox completamente e abrir, o carrinho volta zerado. Onde que estou dando bobeira?

 

Agora se eu fechar a aba e abrir o carrinho em outra aba funciona. Me parece que é algo no cookie.

Veja bem, quando você abre uma session em php (session_start()), é criado por padrão um cookie chamado "PHPSESSID" onde é armazenado o ID de sessão do usuário.

Ao fechar o browser por completo esse cookie é apagado, mas ao fechar apenas uma aba ele continua a existir até que o browser seja fechado.

Bom, partindo do resumo feito acima, vamos analisar o erro:

if (empty($_SESSION['carrinho'])){
  echo '<tr><td colspan="5">Nenhum produto na sua lista de pedidos.</td></tr>';
}

 

 

Fazendo a verificação somente em cima da session, ao fechar o browser será destruída e irá aparecer a mensagem "nenhum produto..." mesmo existindo os dados armazenados em cookie.
Você precisa considerar a existência da session também, mas se não existir deve verificar se existe dados armazenados em cookie, caso negativo, você poderá mostrar a mensagem que nenhum produto foi encontrado.
Ficaria algo assim:
<?
if(empty($_SESSION['carrinho']) && !isset($_COOKIE['carrinho']) ){
    echo '<tr><td colspan="5">Nenhum produto na sua lista de pedidos.</td></tr>';
}else{
  if(empty($_SESSION['carrinho']){
      $_SESSION['carrinho'] = unserialize(stripcslashes($_COOKIE['carrinho']));
  }
  
  foreach($_SESSION['carrinho'] as $key){
  ...

 

 

 

 

 

Uma sugestão, no lugar de fazer uma query para cada produto (como você está fazendo dentro do foreach), faça uma query que busque todos os produtos selecionados ao mesmo tempo.

Coloque o "mysql_query" e o "mysql_fetch_array" depois do cliclo foreach.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Muito bom! Matou o problema bonito!

Seguindo a onda do carrinho de compras, surgiu um novo desafio que é de

excluir os itens. Consegui fazer isso.

 

A pagina carrinho.php apresenta uma mensagem padrão de "Nenhum produto na sua lista de pedidos."

Consigo remover de 1 em 1 item no carrinho, porém ao deletar o ultimo produto e voltar a mensagem

padrão, o carrinho fica em branco. Segue meu código...

 

ps: quando o carrinho estiver 100% eu posto tudo aqui pra ajudar futuros programadores.

 

 

 





<?
$id_produto = $_GET['idp'];

if (empty($id_produto)){
$msg_vazio = "Nenhum produto foi selecionado.";
}
else
{
$_SESSION['carrinho'][$id_produto] = $id_produto;

unset($_COOKIE['carrinho']); //apaga o cookie caso exista
setcookie('carrinho',serialize($_SESSION['carrinho']),time()+3600); //cria o novo cookie
}?>

 

 

 

 





<?
if(empty($_SESSION['carrinho']) && !isset($_COOKIE['carrinho']) ){
echo '<tr><td colspan="5">Nenhum produto na sua lista de pedidos.</td></tr>';
}else{
if(empty($_SESSION['carrinho'])){
$_SESSION['carrinho'] = unserialize(stripcslashes($_COOKIE['carrinho']));
}

foreach($_SESSION['carrinho'] as $key){
$id_produto = $key;
$query = "SELECT * FROM produtos WHERE id_produto = '$id_produto'";
$executa = mysql_query($query,$conexao);
$row = mysql_fetch_array($executa);
?>


AQUI VEM MEU CONTEÚDO DA TABELA PRODUTOS
dando echo $row['nome_do_campo']


//LINK PARA REMOVER O ITEM DO ARRAY
<a href="remove-produto.php?idp=<? echo $row['id_produto']; ?>">Excluir</a>


<?
} }//fecha o foreach e o if
?>

Nesse caso ainda estou usando o SELECT dentro do foreach. Está funcionando perfeitamente.

Dentro desse foreach eu coleto todos os dados na tabela produtos inclusive o id_produto para

poder jogar via GET para a página remove-produto.php Quando estiver ok eu faço um redirect dela

para o carrinho. hehehehe

 

 

 

REMOVE-PRODUTO.PHP





<?
session_start();

$id_produto = $_GET['idp']; //resgata o id do produto

unset($_SESSION['carrinho'][$id_produto]); //apaga a chave do produto

unset($_COOKIE['carrinho']); //apaga o cookie caso exista
setcookie('carrinho',serialize($_SESSION['carrinho']),time()+3600); //cria o novo cookie
?>

Como eu disse acima,

 

A pagina carrinho.php apresenta uma mensagem padrão de "Nenhum produto na sua lista de pedidos."

Consigo remover de 1 em 1 item no carrinho através da pagina remover-produto.php,

porém ao deletar o ultimo produto e voltar a mensagem padrão, o carrinho fica em branco. Não deixa

de ser um resultado, porém o site limpo apresenta a mensagem. É alguma brecha que estou

dando com Cookie ou Session?

 

Tanto que quando aperto contro alt delete e limpo tudo no meu navegador, a mensagem inicial

"Nenhum produto na sua lista de pedidos", aparece normalmente.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Verifica se a session não tem mais produtos. Se não for encontrado nenhum ID armazenado, apague o cookie.

Veja, o seu código esta assim:

if(empty($_SESSION['carrinho']) && !isset($_COOKIE['carrinho']) ){
    echo '<tr><td colspan="5">Nenhum produto na sua lista de pedidos.</td></tr>';
}
...

So irá aparecer a mensagem se a session estiver vazia e o cookie não existir, no seu caso a session é vazia mas o cookie continua a existir.

 

Altere o seu "remove-produto.php" para apagar o cookie, veja:

<?
session_start();

$id_produto = $_GET['idp']; //resgata o id do produto

unset($_SESSION['carrinho'][$id_produto]); //apaga a chave do produto
unset($_COOKIE['carrinho']); //apaga o cookie caso exista

//Cria o cookie somente se a session for diferente de vazio
if(!empty($_SESSION['carrinho'])){
    setcookie('carrinho',serialize($_SESSION['carrinho']),time()+3600); //cria o novo cookie
}
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fala Filipe. Muito obrigado pela ajuda. Só finalizando com uma leve correção nesse

código do remove-produto. Surgiu um problema que quando remove o último produto,

ele não sumia da lista. Fechei o navegador e abri, lá estava ele ainda, então não era da Session.

Removi o Cookie e aí sim desapareceu. Então peguei:

 

 





unset($_COOKIE['carrinho']); //apaga o cookie caso exista

e substitui por:





setcookie('carrinho',""); //apaga o cookie caso exista

Depois dessa alteração funcionou perfeitamente a remoção total dos itens.

 

 

SEGUE ABAIXO O CÓDIGO COMPLETO DO CARRINHO DE COMPRAS COM

SESSION E COOKIE

 

 

CARRINHO.PHP





<?
//INICIA A CONEXÃO COM O BANCO DE DADOS
require_once 'db/connect.php';
session_start();

$id_produto = $_GET['idp'];

if (empty($id_produto)){
$msg_vazio = "Nenhum produto foi selecionado.";
}
else
{
$_SESSION['carrinho'][$id_produto] = $id_produto;

unset($_COOKIE['carrinho']); //apaga o cookie caso exista
setcookie('carrinho',serialize($_SESSION['carrinho']),time()+3600); //cria o novo cookie
}
?>




<?
if(empty($_SESSION['carrinho']) && !isset($_COOKIE['carrinho']) ){
echo '<tr><td colspan="5">Nenhum produto na sua lista de pedidos.</td></tr>';
}else{
if(empty($_SESSION['carrinho'])){
$_SESSION['carrinho'] = unserialize(stripcslashes($_COOKIE['carrinho']));
}

foreach($_SESSION['carrinho'] as $key){
$id_produto = $key;
$query = "SELECT * FROM produtos WHERE id_produto = '$id_produto'";
$executa = mysql_query($query,$conexao);
$row = mysql_fetch_array($executa);
?>




AQUI VEM O CONTEÚDO DA TABELA PRODUTOS
dando echo $row['nome_do_campo_no_banco_de_dados']


//LINK PARA REMOVER O ITEM DO ARRAY
<a href="remove-produto.php?idp=<? echo $row['id_produto']; ?>">Excluir</a>


<? }} //fechando if e foreach ?>

 

 

REMOVE-PRODUTO.PHP





<?
session_start();

$id_produto = $_GET['idp']; //resgata o id do produto

unset($_SESSION['carrinho'][$id_produto]); //apaga a chave do produto
setcookie('carrinho',""); //apaga o cookie caso exista

//Cria o cookie somente se a session for diferente de vazio
if(!empty($_SESSION['carrinho'])){
setcookie('carrinho',serialize($_SESSION['carrinho']),time()+3600); //cria o novo cookie
}
?>

<meta http-equiv="REFRESH" content="0;url=carrinho.php" />

 

Valeu pelas dicas Filipe, esse tópico rendeu muito bem.

Agora vou criar o botão de salvar pedido, verificar se a session do cliente esta logada,

se nao estiver pede registro e salva no bd e no final manda as sessions e cookies carrinhos

pro espaço. heheheh

 

Abraços!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Só mais uma observação.

Você está pegando valores da session colocando diretamente na sua query.

$id_produto = $key;
$query = "SELECT * FROM produtos WHERE id_produto = '$id_produto'";
...

 

Isso não seria um problema se você não estivesse reconstruindo a sua session baseado no conteúdo do cookie.

Como o cookie fica do lado do cliente, algum mal intencionado poderia alterar o cookie colocando, por exemplo, uma aspas simples, provocando um erro na sua query.

 

Como você apenas está trabalhando com números, verifica se os valores armazenados no cookie são apenas numéricos.

 

Bom, coloque o tópico como concluído!

Abraço!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Opa,

Poucas dúvidas restantes...

 

se eu fizer lá no começo um,

$id_produto = mysql_real_scape_string($_GET['idp']);

garante a segurança? Gostaria de ter segurança nisso pra qualquer tipo

de dados, pois esse sistema poderá passar por alterações aí já ficaria tudo no esquema.

 

 

if(empty($_SESSION['carrinho']) && !isset($_COOKIE['carrinho']) ){
  echo '<tr><td colspan="5">Nenhum produto na sua lista de pedidos.</td></tr>';
}else{
  if(empty($_SESSION['carrinho'])){
  $_SESSION['carrinho'] = unserialize(stripcslashes($_COOKIE['carrinho']));///PEGA COOKIE
}

Acredito que a parte do código que resgata o valor do cookie para jogar na sessao seria a linha PEGA COOKIE do

código acima. Ela ja possui uma funcao stripcslashes(). Posso colocar um mysql_real_scape_string ali pra garantir?

Acredito que essa seja a única parte do código que pega o cookie. O resto somente cria os cookies, mas aí eu protejo com o mysql_real_scape_string nos GETs

Compartilhar este post


Link para o post
Compartilhar em outros sites

Alguem pode me ajudar?

Como eu faço para criar um script de cookies para uma url especifica?

Quero que a pessoa que acessar o site atraves dessa url visualize um banner de desconto... e esse banner tem que aparecer em todo site sempre, por isso preciso do script do cookie, ah e não precisa ter validade.

 

obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

Alguem pode me ajudar?

Como eu faço para criar um script de cookies para uma url especifica?

Quero que a pessoa que acessar o site atraves dessa url visualize um banner de desconto... e esse banner tem que aparecer em todo site sempre, por isso preciso do script do cookie, ah e não precisa ter validade.

 

obrigado

Olá armenio12.

Abra um novo tópico para tratar a sua questão, será melhor.

Estamos a falar de cookie porém no contexto da dúvida do nosso colega paulo_roll.

Abra um tópico novo e com certeza iremos ajuda-lo. :yes:

 

paulo_roll.

Em relação a sua dúvida a função "stripcslashes" não trata a string, ela apenas remove barras invertidas inseridas pela função "addslashes". Penso que nesse caso não faz sentido ter essa função, uma fez que não estamos usando "addslashes".

 

A função "mysql_real_scape_string" seria uma solução, mas vejamos, se o script está a espera de números armazenados, então se aparecer algo não numérico significa que alguém mudou alguma coisa no cookie, e se alguém mudou alguma coisa não é bom sinal... então bloqueava logo, não permitia que o sistema continuasse, porque ao executar a query, estaria gastando recursos do servidor em vão, uma vez que a query não iria retornar a resposta esperada. Por exemplo:

//Se alterasse o conteúdo do cookie e colocasse um "'" no lugar do número que representa o id, a query ficaria assim:
$query = "select id from produtos where id='\''";

 

Não daria nenhum erro por causa da barra invertida inserida pela função "mysql_real_scape_string", mas também não iria retorna nada, uma vez que não encontraria o ID, desperdiçando recursos do servidor desnecessariamente, não concorda?

Poderia evitar a execução da query verificando se são apenas números

 

Alguns irão dizer que o usuário poderia alterar o conteúdo para um ID que não existe, iria executar a query na mesma por ser numérico, mas pelo menos você fechou portas, só tem um caminho para a query ser executada.

 

Espero ter ajudado!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Acredito que tanto o mysql_real_escape_string quanto a validação de numeros juntos

são importantes. E nunca é bom colocar valores de produtos em cookies. O ideal

e armazenar somente o id e tratar o id no código para evitar manipulação de dados como valor do item por parte

do usuário.

 

Valeu por todas as dicas Filipe, Esse tópico foi um curso de introdução a

programação de plataforma de e-commerce. Muito obrigado mesmo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa tarde a todos estou finalizando um projeto e preciso que ao clicar em um botão ele salve os dados que venho passando entre as páginas e estão armazenados em SESSION em um arquivo .txt
Se alguém puder ajudar agradeço, segue o que tenho até o momento:

Quando dou um print_r na página orcamento.php para ver o que ele está trazendo aparece assim:
Obs: dei uma separada para melhor compreenção.

 

Array ( [usuario] =>
Array ( [id] => 2 [nome] => TESTE [login] => TESTE [senha] => TESTE [nomeCliente] => CONSUMIDOR [cliente] => TESTANDO [loja] => TESTE )

[veiculo] => Array ( [carroMontadora] => GM - General Motors [carroModelo] => Astra 2.0 16V [carroAno] => 2010 [carroPlaca] => aaa1245 )

[produtos_17] => 1
[produtos_18] => 1

Obs: produtos_ = nome session, 1 é a quantidade de cada produto que foi incluído no carrinho.

Até imprimiu usando assim com esta função:

 

/

//Processa arquivo para gravar em txt
//Função para ler o arquivo
function ler_arquivo($file_name){
    $fd = @fopen($file_name, 'r');
    $file_content = fread($fd, filesize($file_name));
    $fclose($fd);
    $var = unserialize($file_name);
    return $var;
}

//Função para gravar o arquivo
function gravar_arquivo($file_name, $var){
    $content = serialize($var);
    $fd = @fopen($file_name, 'w+');
    fwrite($fd, $content);
    fclose($fd);
    chmod($file_name, 0644);
    return true;
}

$file_name = strtoupper($_SESSION['veiculo']['carroPlaca']).'.txt';

$the_array = array(
    $_SESSION['usuario']['nomeCliente'],
    $_SESSION['veiculo']['carroModelo'],
    $_SESSION['veiculo']['carroAno'],
    $_SESSION['veiculo']['carroPlaca'],
    $list->NOME_PRO.$quantidade );

gravar_arquivo($file_name, $the_array);

 

Até está salvando e gravando no arquivo, mas aparece assim:

 

a:5:{i:0;s:10:"CONSUMIDOR";i:1;s:13:"Astra 2.0 16V";i:2;s:4:"2010";i:3;s:7:"aaa1245";i:4;s:0:"";}

 

E mesmo assim não imprimiu nenhum dos produtos que aparecem no array, alguém poderia dar uma ajuda?

 

Desde já agradeço.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.