Jump to content
AnthonyKamers

Excluir uma Array de dentro de uma Session

Recommended Posts

Estou fazendo um carrinho que pega os dados do SQL, mas não deixa como ID único.

 

Está da pegando os itens dessa forma:

if(isset($_GET['adicionar']) && isset($_GET['idProduto']) && isset($_GET['tipoForma']) && isset($_GET['subSubForma'])){
			  
			  $idProduto = $_GET['idProduto'];
			  $tipoForma = $_GET['tipoForma'];
			  $subSubForma = $_GET['subSubForma'];
			  $fotoProduto = "";
			  $idFotoProduto = "";
			  $quantidade = 1;
			  
			  $arr = array("idProduto" => $idProduto, "tipoForma" => $tipoForma, "subSubForma" => $subSubForma, "fotoProduto" => $fotoProduto, "idFotoProduto" => $idFotoProduto, "Quantidade" => $quantidade);
			  var_dump($arr);
			  
			  $_SESSION['carrinho'][] = $arr;
			  
		  }

 

e com o var_dump():

array (size=3)
  0 => 
    array (size=6)
      'idProduto' => string '23' (length=2)
      'tipoForma' => string 'Pequeno' (length=7)
      'subSubForma' => string '' (length=0)
      'fotoProduto' => string '' (length=0)
      'idFotoProduto' => string '' (length=0)
      'Quantidade' => int 1
  1 => 
    array (size=6)
      'idProduto' => string '19' (length=2)
      'tipoForma' => string 'Médio' (length=6)
      'subSubForma' => string '' (length=0)
      'fotoProduto' => string '[2]20151119_224108.jpg' (length=22)
      'idFotoProduto' => string '61' (length=2)
      'Quantidade' => int 1
  2 => 
    array (size=6)
      'idProduto' => string '23' (length=2)
      'tipoForma' => string 'Pequeno' (length=7)
      'subSubForma' => string '' (length=0)
      'fotoProduto' => string '' (length=0)
      'idFotoProduto' => string '' (length=0)
      'Quantidade' => int 1

 

Eis minha pergunta, preciso apagar o array de, por exemplo, Key [2], como devo proceder??

 

Estou fazendo da seguinte forma para pegar os dados da Session:

foreach($_SESSION['carrinho'] as $carrinho){

$id = $carrinho['...'];
$... = $carrinho['...'];

}

 

Desde já agradeço a qualquer resposta ou ajuda.

Share this post


Link to post
Share on other sites

Obrigado pela resposta.

 

Sim, eu sei que posso dar Unset em uma Session, o problema é "puxar"/Get a Key da Array da Session.

 

Como no exemplo: 

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

 

não consigo pegar/Get esse "2", preciso Get essa Key da Session/Array;

 

Como posso fazer isso???

Share this post


Link to post
Share on other sites

@AnthonyKamers

O que seria pegar?

Onde quiser usar, use assim: $_SESSION['carrinho'][2];

Ex.: exibir na tela:

echo $_SESSION['carrinho'][2];
Colocar dentro de um input:

<input value='<?= $_SESSION['carrinho'][2]?>'>
etc...

Share this post


Link to post
Share on other sites

Novamente, agradeço pelas respostas.

 

Sim, eu sei que posso fazer unset dessar forma, o problema é que eu não sei como fazer para pegar o 2, pois cada vez que adiciona um produto no carrinho, cria uma Key na Array. Preciso pegar essa Key dinâmica.

 

Como posso proceder??

Share this post


Link to post
Share on other sites

Tem que existir alguma referência pra que você possa excluir do array, tipo POST, GET, SESSION.

index.php

<?php
foeach($_SESSION['carrinho'] as $chave => $carrinho){
    echo '<a href="pagina-para-remover-da-sessao.php?id_del='. $carrinho[$chave].'">excluir</a>';
}

//pagina-para-remover-da-sessao.php

<?php

$remover = $_GET['id_del'];
if(unset($_SESSION['carrinho'][$remover])){
    echo 'Item removido';
}

 

Share this post


Link to post
Share on other sites

Criei um token único para cada produto com uniqid(), agora não consigo dar unset usando este valor.

 

$idProduto = $_GET['idProduto'];
			  $tipoForma = $_GET['tipoForma'];
			  $subSubForma = $_GET['subSubForma'];
			  $fotoProduto = "";
			  $idFotoProduto = "";
			  $quantidade = 1;
			  $token = uniqid(rand(), true);
			  
			  $arr = array("idProduto" => $idProduto, "tipoForma" => $tipoForma, "subSubForma" => $subSubForma, "fotoProduto" => $fotoProduto, "idFotoProduto" => $idFotoProduto, "Quantidade" => $quantidade, "token" => $token);

 

usando var_dump():

array (size=1)
  0 => 
    array (size=7)
      'idProduto' => string '22' (length=2)
      'tipoForma' => string '' (length=0)
      'subSubForma' => string '' (length=0)
      'fotoProduto' => string '' (length=0)
      'idFotoProduto' => string '' (length=0)
      'Quantidade' => int 1
      'token' => string '2388858c418a61548b6.16153712' (length=28)

 

e tentei dar unset dessar forma:

if(isset($_GET['delete']) && isset($_GET['token'])){
			$tokenDelete = $_GET['token'];
			
			unset($_SESSION['carrinho']["token"][$tokenDelete]);
		}

 

mas não deu certo, como posso dar unset com o token específico??

Share this post


Link to post
Share on other sites

Consegui pessoal.

 

Procurando na Internet, achei uma Function com Foreach que consegui usar no meu sistema:

//Deletar Produto do Carrinho
		if(isset($_GET['delete']) && isset($_GET['token'])){
			$tokenDelete = $_GET['token'];
			
			foreach($_SESSION['carrinho'] as $subKey => $subArray){
				if($subArray['token'] == $tokenDelete){
					unset($_SESSION['carrinho'][$subKey]);
				} //Fim if Foreach
			} //Fim Foreach
		} //Fim Delete
		//Fim Deletar Produto do Carrinho

 

Valeu pessoal por todo o apoio.

VALEU

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By Agnosticado
      Olá senhores, estou intrigado com uma coisa: tenho o seguinte código:
       
      $pesquisa = "SELECT motivo, CASE WHEN motivo = 'Intensa superposição celular em mais de 75% de esfregaço' THEN 'A' WHEN motivo = 'Sangue em mais de 75% de esfregaço' THEN 'B' WHEN motivo = 'Artefatos de dessecamento mais de 75% de esfregaço' THEN 'C' ELSE 'TESTE' END AS opcao FROM insatisfatorio WHERE exame_id = '1' ORDER BY opcao ASC"; quando o executo diretamente no SGBD (PHPMyAdmin) dá certo e tenho a coluna "opcoes" me mostrando a opção "A" como previsto.
      No entanto, quando acrescento:
      $linha = mysql_query($pesquisa); while ($pesquisa = mysql_fetch_array($linha) or die(mysql_error())){ echo $pesquisa["opcao"]; echo "<br>"; na página PHP para exibir o resultado, o código só me retorna a string "TESTE".
       
      NÃO SEI MAIS O QUE FAZER PQ PARECE TÁ TUDO OK!
      O QUE DIABOS ACONTECE?
    • By Adriano Barbosa
      Olá, tudo bom?
       
      Se alguém puder me ajudar já agradeço de agora.
       
      Tenho um .htaccess da seguinte forma:
      RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php?page=$1  
      No meu arquivo index.php eu pego a variável "page" e busco no banco de dados o arquivo correspondente ao valor informado, feito isso faço o seguinte:
       
      require ($Rs->nomeArquivo);
      que seria isso require (produto-detalhe.php);
       
      O que ocorre é o seguinte, algumas páginas eu preciso passar parâmetros e funciona quando utilizo ( & ) porém se for utilizar o ( ? ) não consigo recuperar os valores informados.
       
      Exemplos:
       
      Assim funciona:
      busca&b=carrinho
       
      Assim não funciona:
      busca?b=carrinho
       
      Não consigo pegar o valor informado.
      Alguém já passou por isso? ou estou fazendo da forma incorreta?
       
      Podem me ajudar.
      Abs
    • By peterstefan
      Olá, tenho 4 campos em um formulario, porem eles não são obrigatórios, queria ver qual tecnica para fazer que o cliente preencha pelo menos um dos campos. caso ele tente enviar vazio mostrar uma mensagem para ele avisando que tem que preencher pelo menos um dos 4 campos... 
       
      Obrigado!!
    • By Alex Dias
      Olá amigo, não sou usuário avançado, conseguir um código-fonte que lista arquivos de uma pasta no servidor, esses fontes listavam apenas os arquivos, daí eu dei uma incrementada nele para além dos arquivos ele listar também o tamanho do arquivo e a data da última modificação, segue ANEXO como ele está exibindo os resultados com perfeição.

      A minha dificuldade é que ele lista os arquivos da pasta por ordem alfabética de A a Z e eu gostaria muito que essa lista de arquivos fosse exibida por ordem de data de modificação decrescente, da mais atual para a mais antiga, e não estou conseguindo realizar essa tarefa, gostaria muito da ajuda dos amigos para solucionar esse ocorrido, desde já agradeço a ajuda de todos.

      Segue o código-fonte

       
      <?php //$diretorio = "D:\SERVIDOR-APACHE\PATRIMONIO TECNOLOGIA\images"; $diretorio = "/home/patrimonio/www/sites/default/files/ftpdata/download/Acesso Remoto"; //USADO PARA LISTAR OS ARQUIVOS DA PASTA $url = "sites/default/files/ftpdata/download/Acesso Remoto/"; // USADO PARA FAZER O LINK DE DOWNLOAD // abre o diretório $ponteiro = opendir($diretorio); // monta os vetores com os itens encontrados na pasta while ($nome_itens = readdir($ponteiro)) { $itens[] = $nome_itens; } // ordena o vetor de itens sort($itens); // percorre o vetor para fazer a separacao entre arquivos e pastas foreach ($itens as $listar) { // retira "./" e "../" para que retorne apenas pastas e arquivos if ($listar!="." && $listar!=".."){ // checa se o tipo de arquivo encontrado é uma pasta if (is_dir($listar)) { // caso VERDADEIRO adiciona o item à variável de pastas $pastas[]=$listar; } else{ // caso FALSO adiciona o item à variável de arquivos $arquivos[]=$listar; } } } // lista as pastas se houverem if ($pastas != "" ) { foreach($pastas as $listar){ print "";} } // lista os arquivos se houverem if ($arquivos != "") { foreach($arquivos as $listar){ //CONDICAO PARA NOMEAR EM BYTES, KB, MB, GB, TB $tamanho = filesize("$url/$listar"); $kb = "1024"; $mb = "1048576"; $gb = "1073741824"; $tb = "1099511627776"; if($tamanho<$kb){ $tamanho_resposta = ($tamanho." bytes"); }else if($tamanho>=$kb&&$tamanho<$mb){ $kilo = number_format($tamanho/$kb,2); $tamanho_resposta = ($kilo." KB"); }else if($tamanho>=$mb&&$tamanho<$gb){ $mega = number_format($tamanho/$mb,2); $tamanho_resposta = ($mega." MB"); }else if($tamanho>=$gb&&$tamanho<$tb){ $giga = number_format($tamanho/$gb,2); $tamanho_resposta = ($giga." GB"); } // FIM CONDICAO PARA NOMEAR EM BYTES, KB, MB, GB, TB // DATA DA ULTIMA MODIFICACAO $modificado = date("d/m/Y H:i:s", filemtime("$url/$listar"))."<br>"; // FIM DATA DA ULTIMA MODIFICACAO //echo"$modificado"; // FAZ A LISTA DE XIBICAO DOS AQRUIVOS DO DIRETORIO // FAZ A LISTA DE XIBICAO DOS AQRUIVOS DO DIRETORIO echo" <tr> <td width='438' height='30' bgcolor='#ffffff'><p><font size='2'>&nbsp;&nbsp;<a href='$url/$listar' target='_blank'>$listar</a></font></p></td> <td width='192' bgcolor='#ffffff'><p><font size='2'>&nbsp;&nbsp;$tamanho_resposta</font></p></td> <td width='340' bgcolor='#ffffff'><p><font size='2'>&nbsp;&nbsp;$modificado</font></p></td> <td width='202' bgcolor='#ffffff'><p align='center'><a href='$url/$listar' target='_blank'><img src='images/nuvem.jpg'/></a></p></td> </tr> "; } } else { echo "<p><font color='#ff0000' size='3'>Não há nenhum arquivo.</font><p><br>"; } echo"</table>" ?>  

    • By whoopic
      Olá a todos!
      Estou a tentar perceber qual a melhor abordagem para:
      (Campos/Colunas:)
      A - Moeda
      B - Igual a A
      C - (A+B)/2
      D - Caixa de seleção7Checkbox : Se "ligada": C=C/2
       
      Preciso que estes campos sejam "persistentes", para que os possa usar em relatórios.
       
      Pensei em colunas "computadas". Consigo realizar tudo isto com essa abordagem?
      Tentei por exemplo no campo B, usando o campo de fórmula para coluna computada e inserindo o nome da coluna A.
       
       
      Pode alguém dar-me um empurrãozinho?
      Obrigado desde já.
       
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.