Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Pessoal,
Estou com um problema que não estou conseguindo resolver...
O código abaixo serve para adicionar produtos a um carrinho de compras.
Quando adiciono o primeiro produto, beleza, quando adiciono o segundo dá o seguinte erro:
Warning: Cannot use a scalar value as an array in ***** on line 28
A linha 28 é: $_SESSION['IdProduto'][] = $IdProduto;
Já usei essa lógica unúmeras vezes e nunca havia tido problemas.
Alguém poderia me ajudar?
$IdProduto = (int)$_POST['IdProduto'];
$Quant = (int)$_POST['Quantidade'];
$QuantCaixa = (int)$_POST['QuantidadeCaixa'];
if (is_array($_SESSION['IdProduto'])) {
while ($i = current($_SESSION['IdProduto'])) {
if ($i == $IdProduto) {
$ProdutoExistente = true;
$_SESSION['Quantidade'][$i] = $Quant;
}
}
}
if ($ProdutoExistente == false) {
$_SESSION['IdProduto'][] = $IdProduto;
$_SESSION['Quantidade'][] = $Quant;
$_SESSION['QuantidadeCaixa'][] = 0;
}Mesmo erro, no mesmo lugar
Segue o código
if (is_array($_SESSION['IdProduto'])) {
while ($i = current($_SESSION['IdProduto'])) {
if ($i == $IdProduto) {
$ProdutoExistente = true;
$_SESSION['Quantidade'][$i] = $Quant;
}
next($_SESSION['IdProduto']);
}
}
if ($ProdutoExistente == false) {
if ( !isset( $_SESSION[ 'IdProduto' ] ) ) $_SESSION[ 'IdProduto' ] = array();
if ( !isset( $_SESSION[ 'Quantidade' ] ) ) $_SESSION[ 'Quantidade' ] = array();
if ( !isset( $_SESSION[ 'QuantidadeCaixa' ] ) ) $_SESSION[ 'QuantidadeCaixa' ] = array();
$_SESSION['IdProduto'][] = $IdProduto;
$_SESSION['Quantidade'][] = $Quant;
$_SESSION['QuantidadeCaixa'][] = 0;
}Ahhh esqueci de mencionar um detalhe bastante importante...
No meu localhost funciona
Não funciona é no servidor da Locaweb rss
Mesmo erro, no mesmo lugar
Algum outro ponto da sua aplicação está gravando nessa mesma variável de sessão ?
Quando você fez o teste, você limpou sua sessão ? (ou ainda está com a antiga, com o valor errado)
Limpe sua sessão e tente novamente:
limpar.php
<?php
$sid = session_id();
if ( empty( $sid ) ) session_start();
foreach ( $_SESSION as $key => $value ){
unset( $_SESSION[ $key ] );
}
session_destroy();Limpei sim...
Como comentei, aqui funciona, não funciona na Locaweb...
Segue o código completo, restando alguns ajustes para "diminuir o código duplicado"...
<?php
session_start();
include('Includes/Conf.php');
include('Includes/Conectar.php');
$IdProduto = (int)$_POST['IdProduto'];
$Quant = (int)$_POST['Quantidade'];
$QuantCaixa = (int)$_POST['QuantidadeCaixa'];
$sql = mysql_query("select Id, Valor, ValorCaixa from produtos where Id = ".$IdProduto." and Status = 1 and (IdSite = 0 or IdSite = ".$_SESSION['IdSite'].")");
$rs = mysql_fetch_array($sql);
if ($Quant != 0) {
if ($rs['Valor'] != '0.00') {
if (is_array($_SESSION['IdProduto'])) {
while ($i = current($_SESSION['IdProduto'])) {
if ($i == $IdProduto) {
$key = key($_SESSION['IdProduto']);
$ProdutoExistente = true;
$_SESSION['Quantidade'][$key] = $Quant;
}
next($_SESSION['IdProduto']);
}
}
if ($ProdutoExistente == false) {
if ( !isset( $_SESSION[ 'IdProduto' ] ) ) $_SESSION[ 'IdProduto' ] = array();
if ( !isset( $_SESSION[ 'Quantidade' ] ) ) $_SESSION[ 'Quantidade' ] = array();
if ( !isset( $_SESSION[ 'QuantidadeCaixa' ] ) ) $_SESSION[ 'QuantidadeCaixa' ] = array();
$_SESSION['IdProduto'][] = $IdProduto;
$_SESSION['Quantidade'][] = $Quant;
$_SESSION['QuantidadeCaixa'][] = 0;
}
//header("location:cesta.php");
exit;
} else {
//header("location:cesta.php");
exit;
}
} elseif ($QuantCaixa != 0) {
if ($rs['ValorCaixa'] != '0.00') {
if (is_array($_SESSION['IdProduto'])) {
while ($i = current($_SESSION['IdProduto'])) {
if ($i == $IdProduto) {
$key = key($_SESSION['IdProduto']);
$ProdutoExistente = true;
$_SESSION['QuantidadeCaixa'][$key] = $QuantCaixa;
}
next($_SESSION['IdProduto']);
}
}
if ($ProdutoExistente == false) {
if ( !isset( $_SESSION[ 'IdProduto' ] ) ) $_SESSION[ 'IdProduto' ] = array();
if ( !isset( $_SESSION[ 'Quantidade' ] ) ) $_SESSION[ 'Quantidade' ] = array();
if ( !isset( $_SESSION[ 'QuantidadeCaixa' ] ) ) $_SESSION[ 'QuantidadeCaixa' ] = array();
$_SESSION['IdProduto'][] = $IdProduto;
$_SESSION['Quantidade'][] = 0;
$_SESSION['QuantidadeCaixa'][] = $QuantCaixa;
}
//header("location:cesta.php");
exit;
} else {
//header("location:cesta.php");
exit;
}
} else {
//header("location:cesta.php");
exit;
}
?>Certo, faça o seguinte:
var_dump( $_SESSION );
Poste a saída (removendo qualquer informação confidencial)
Muito estranho pois apenas o Id do produto vem com um unico indice, a quantidade e a quantidade de caixas vem certo.
Dúvida: o que significa o símbolo ∫ antes do Id do produto?
array(9) { ["IdSite"]=> ∫(1) ["SiteNome"]=> &string(9) "xxx" ["SiteEmail"]=> &string(23) "xxx@vinxxxhosweb.com.br" ["UrlSite"]=> &string(21) "xxx.xxx.com.br" ["PastaImagens"]=> &string(7) "_xxx" ["Css"]=> &string(17) "xxx.css" ["IdProduto"]=> ∫(1458) ["Quantidade"]=> &array(2) { [0]=> int(1) [1]=> int(1) } ["QuantidadeCaixa"]=> &array(2) { [0]=> int(0) [1]=> int(0) } }
Alguma nova sugestão?
Acreditem se quiser
Mudei o nome de $_SESSION['IdProduto'] para $_SESSION['nIdProduto'] e funcionou...
Se alguém souber o motivo, posta ai.
Três vivas pra quem perdeu 5 horas pra resolver esse problema!!!!