Ir para o conteúdo
Daniivo

Carrinho de compras!

Mensagens Recomendadas

Daniivo

boa noite gente.

preciso de aplicar um carrinho de compras, visto isso, encontrei este tuturial:

http://www.portugal-a-programar.pt/index.php?showtopic=11615

no entanto deparo-me com vários bugs por exemplo o "<?" que da-me um erro deste género http://img150.imageshack.us/img150/4392/screen1eq2.png

como tb as variáveis nao estão a guardar valores. o que é que acham?  penso que seja derivado a isto

<?=
que nao faço ideia do que seja.

comp. daniivo

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
brunoais

Provavelmente terás de activar as short-tags.

Ou substituir <?= por <?php echo

e substituir <? por <?php


"[Os jovens da actual geração]não lêem porque não envolve um telecomando que dê para mirar e atirar, não falam porque a trapalhice é rainha e o calão é rei" autor: thoga31

Life is a genetically transmitted disease, induced by sex, with death rate of 100%.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Daniivo
Provavelmente terás de activar as short-tags.

onde faço isso?? isso tem haver com o server apache?

Ou substituir <?= por <?php echo

e substituir <? por <?php

vcs sao sencacionais. o <? sabia que era o <?PHP, ou melhor nao sabia presumi e apos testar resolvi a maioria dos problemas, mas o = era o mesmo que "echo" nao imaginava...

obrigado pessoal!

++ após uma rápida procura:

Vc tem que alterar o arquivo php.ini para habilitar o short tags.

por enquanto, vc pode usar as tags do codigo php dessa forma:

<?php

?>

que vai funcionar..

Pra alterar, abra teu arquivo php.ini no bloco de notas, procure a linha:

short_open_tag = Off

e altere ela para:

short_open_tag = On

Reinicia teu servidor http e pode usar a vontade.. tongue.gif

Espero ter ajudado.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Daniivo

boa tarde pessoal.

tenho aqui umas duvidas que gostava que alguém me esclarecesse.

estou a tentar passar valores por um link no entanto esse link vai ficar numa variável. enfim isto deve estar confuso. passo a exemplificar:

"index.php?mod=carrinho.php?cod=".$cod."&acao=incluir"

o Mod é a variável que vai actualizando o conteúdo do Div, que é o content neste caso!

"index.php?mod=carrinho" assim funciona, no entanto os valores nao passam logo nao insere nada no carrinho...

No brwoser:

Warning: include(includes/carrinho.php?cod=1.php) [function.include]: failed to open stream: No error in C:\xampp\htdocs\UltimateGames\Home\index.php on line 143

Warning: include() [function.include]: Failed opening 'includes/carrinho.php?cod=1.php' for inclusion (include_path='.;C:\xampp\php\PEAR') in C:\xampp\htdocs\UltimateGames\Home\index.php on line 143

qual é a mente brilhante que me arranja uma solução simples ou complexa :thumbsup:

sem mais

comp. daniivo

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
scorch

Isso tem a haver com o ficheiro não existe, pois estás a meter um .php no fim do include. :thumbsup:


scorch_pp.png

PS: Não respondo a perguntas por mensagem que podem ser respondidas no fórum.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Daniivo

Isso tem a haver com o ficheiro não existe, pois estás a meter um .php no fim do include. :thumbsup:

Warning: include(includes/carrinho.php?cod=3) [function.include]: failed to open stream: No error in C:\xampp\htdocs\UltimateGames\Home\index.php on line 143

Warning: include() [function.include]: Failed opening 'includes/carrinho.php?cod=3' for inclusion (include_path='.;C:\xampp\php\PEAR') in C:\xampp\htdocs\UltimateGames\Home\index.php on line 143

e agora?

alterei a forma como assedia a pagina, visto que, antes ele metia o php no fim automaticamente fiz de outra forma, no entanto o php deixa de estar no fim, mas o resultado é o mesmo.  :mad:

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
scorch

Se leres, reparas que o que ele diz é que o ficheiro carrinho.php da pasta includes não existe.


scorch_pp.png

PS: Não respondo a perguntas por mensagem que podem ser respondidas no fórum.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
socopo

Boas,

Não será que tás a fazer um mau uso da função include() ? Digo isto porque nunca vi ninguem a fazer um include a passar variáveis por GET. Acho eu que nem faz sentido!  :nono1:

P.s. Se fizer sentido peço desculpa  :thumbsup:

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Daniivo

Se leres, reparas que o que ele diz é que o ficheiro carrinho.php da pasta includes não existe.

"carrinho.php?cod=".$cod."&acao=incluir"

epah nao sei realmente assim funciona funciona!!!

"index.php?mod=carrinho.php" tb!!

mas ara passar valores tem que ser

"index.php?mod=carrinho.php?cod=".$cod."&acao=incluir"

Boas,

Não será que tás a fazer um mau uso da função include() ? Digo isto porque nunca vi ninguem a fazer um include a passar variáveis por GET. Acho eu que nem faz sentido!  :nono1:

P.s. Se fizer sentido peço desculpa  :thumbsup:

nao sei se tens razão lol eu tb nao sou pro nisto, no entanto estou a seguir o tuturial a cima e como tal tou a supor que é bom, para todos os efeitos sabes mais que eu, como também funciona :) a nivel de segurança ja e outra historia, mas nem me vou virar para esses lados :P

obrigado, se alguém tiver mais opiniões continuem a postar, pk nao faço ideia como resolver isto...

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
socopo

nao sei se tens razão lol eu tb nao sou pro nisto, no entanto estou a seguir o tuturial a cima e como tal tou a supor que é bom, para todos os efeitos sabes mais que eu, como também funciona :thumbsup: a nivel de segurança ja e outra historia, mas nem me vou virar para esses lados :)

obrigado, se alguém tiver mais opiniões continuem a postar, pk nao faço ideia como resolver isto...

Funciona?! Eu se visse lá isso no tutorial até me acreditava mas não encontro.

O include() serve apenas para pegar no conteúdo de um ficheiro/página e colar no nosso código, é basicamente isso que faz. Pelo que tu escreveste parece-me que tás à espera que ele faça mais alguma coisa  :P

Mostra o bloco de código que origina o erro e explica o que é suposto fazer em geral que eu ajudo-te, não é preciso explicar tim tim por tim tim mas convém que digas os pormenores  :ipool:

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Daniivo

Funciona?! Eu se visse lá isso no tutorial até me acreditava mas não encontro.

O include() serve apenas para pegar no conteúdo de um ficheiro/página e colar no nosso código, é basicamente isso que faz. Pelo que tu escreveste parece-me que tás à espera que ele faça mais alguma coisa  :thumbsup:

Mostra o bloco de código que origina o erro e explica o que é suposto fazer em geral que eu ajudo-te, não é preciso explicar tim tim por tim tim mas convém que digas os pormenores  :ipool:

lol tu nao percebes-te!

o include nesta situação penas serve para substituir o conteúdo de um DiV, ou seja quando escolho produto, o div content vai para o carrinho de compras!!

neste caso é mais complicado devido as variáveis!!

qual é o código que pretendes ver?? o que esta a  originar o erro é o postado em cima!

<?php

        if(empty($_GET["mod"]))  // (aqui fica a linha 2)

                $mod = "main.php";

        else

                $mod = $_GET["mod"];

     

?>

<?php

include("includes/$mod");

?>

  echo "<td><div align='center' style='font-size:10px;font-family:Verdana'><strong><a href='index.php?mod=carrinho.php?cod=".$cod."&acao=incluir'>".$nome."</a></strong></div><strong><div align='center'><font color='#FF0000' size='4px'>  ".$preco." € </font></strong></div></td>";

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
brunoais

ALARME DE FALHA DE SEGURANÇA MUITO GRAVE

<?php
        if(empty($_GET["mod"]))  // (aqui fica a linha 2)
                $mod = "main.php";
        else
                $mod = $_GET["mod"];
       
?>
//...
<?php
      include("includes/$mod");                   
    ?>

Isto pode originar problemas sem precedentes. E permite que quem esteja a atacar aceda a qualquer página, ficheiro, qq coisa q esteja no servidor.

Faz filtragem da variável usando um switch ou altera como o sistema funciona

ADD:

Warning: include() [function.include]: Failed opening 'includes/carrinho.php?cod=3' for inclusion (include_path='.;C:\xampp\php\PEAR') in C:\xampp\htdocs\UltimateGames\Home\index.php on line 143

A causa é simples: o ficheiro "carrinho.php?cod=3" não existe. Acredito que o ficheiro carrinho.php exista mas o ficheiro "carrinho.php?cod=3" não existe. Experimenta declarar uma var antes de incluir esse ficheiro para gravar essa info.


"[Os jovens da actual geração]não lêem porque não envolve um telecomando que dê para mirar e atirar, não falam porque a trapalhice é rainha e o calão é rei" autor: thoga31

Life is a genetically transmitted disease, induced by sex, with death rate of 100%.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
socopo

Pronto tudo bem, continuo a achar que não podes passar valores por GET na função include() porque não faz sentido :thumbsup:

Mas se por acaso der:

em vez do segundo "?" põe %3F que é o código desse caracter (não garanto que funcione, é apenas uma tentativa).

Para o caso eu estar correcto em relação ao GET a passar po include()  :biggrin:

porque não declarar o que queres passar po conteúdo antes de fazer o include? No ficheiro que fazes o include depois era só usar essa variável!!

Por exemplo:

index.php

$var =2;
include("a.php");
echo $var;

include("b.php");
echo ",".$var;

a.php

$var +=3;

b.php

$var -=1;

Executa index.php

output:

5,4

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Daniivo

ALARME DE FALHA DE SEGURANÇA MUITO GRAVE

<?php
        if(empty($_GET["mod"]))  // (aqui fica a linha 2)
                $mod = "main.php";
        else
                $mod = $_GET["mod"];
       
?>
//...
<?php
      include("includes/$mod");                   
    ?>

Isto pode originar problemas sem precedentes. E permite que quem esteja a atacar aceda a qualquer página, ficheiro, qq coisa q esteja no servidor.

Faz filtragem da variável usando um switch ou altera como o sistema funciona

ADD:A causa é simples: o ficheiro "carrinho.php?cod=3" não existe. Acredito que o ficheiro carrinho.php exista mas o ficheiro "carrinho.php?cod=3" não existe. Experimenta declarar uma var antes de incluir esse ficheiro para gravar essa info.

apos precionar o F5 fiquei arregalado com a frase que metes-te ai lol.

vamos entao passar para miudinhos! tas ma dizer que isto

<?php
        if(empty($_GET["mod"]))  // (aqui fica a linha 2)
                $mod = "main.php";
        else
                $mod = $_GET["mod"];
       
?>
//...
<?php
      include("includes/$mod");                   
    ?>

funciona mas nao presta???

Faz filtragem da variável usando um switch ou altera como o sistema funciona.  :eek:

Mas se por acaso der:

em vez do segundo "?" põe %3F que é o código desse caracter (não garanto que funcione, é apenas uma tentativa).

boa tentativa :thumbsup: dont work

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
socopo

ADD:A causa é simples: o ficheiro "carrinho.php?cod=3" não existe. Acredito que o ficheiro carrinho.php exista mas o ficheiro "carrinho.php?cod=3" não existe. Experimenta declarar uma var antes de incluir esse ficheiro para gravar essa info.

O brunoais falou bem, "carrinho.php?cod=3" não existe!!! é esse o problema...

http://php.net/manual/en/function.include.php

Ok, depois de ler por alto isto fiquei confuso, e parece que dá para fazer algo parecido com o que tás a fazer. Tens que por o caminho completo para que o php seja executado (vais fazer o include usando http), tens que fazer algo como

include("http://localhost/dir/carrinho.php?cod=3");

Atenção que com esse include vais obter apenas o output disso! Mas se for isso que já tavas à espera isso resolve-te o problema  :cheesygrin: lol

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Daniivo

O brunoais falou bem, "carrinho.php?cod=3" não existe!!! é esse o problema...

http://php.net/manual/en/function.include.php

Ok, depois de ler por alto isto fiquei confuso, e parece que dá para fazer algo parecido com o que tás a fazer. Tens que por o caminho completo para que o php seja executado (vais fazer o include usando http), tens que fazer algo como

include("http://localhost/dir/carrinho.php?cod=3");

Atenção que com esse include vais obter apenas o output disso! Mas se for isso que já tavas à espera isso resolve-te o problema  :cheesygrin: lol

possa que truques!!

achas que o que falas-te a bocado inserir valores em variáveis e depois azulas, funcionava?? por outras palavras, qual ela a tua resolução para este problema?

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Daniivo

Esse tutorial devia era ser apagado.

lo0l boa intervenção!!

mas nao me deixes de mãos a abanar arranja-me outro!!

no google procuras é esse o 1º que te aparece :thumbsup:

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
socopo

Para perceberes o que o include faz...

index.php

$var =2;
include("a.php");
echo $var;

include("b.php");
echo ",".$var;

a.php

$var +=3;

b.php

$var -=1;

Neste exemplo é o mesmo que ter:

$var =2;
$var +=3;
echo $var;

$var -=1;
echo ",".$var;

Isto porque o include cola basicamente o código da página na zona onde fazemos o include. Por isso o que tiveres dentro dos ficheiros que usas no include é como se fizessem parte da página original.

Para resolver este problema? Ainda não percebi qual é a ideia desse include nem o que é suposto originar :biggrin: acho que não o fazia porque não vais fazer o include desse ficheiro em mais nenhum lado certo? Logo é desnecessário... O include serve para não repetir código desnecessariamente e para ser mais fácil a sua "manutenção", agora se fizeres o include dum ficheiro numa única página não vejo qual é a ideia.

Pelo pouco que percebi das duas uma:

Se quiseres executar mais que uma vez um certo bloco de código para diferentes parametros a solução é claramente UMA FUNÇÃO!

Se for só para executar uma única vez na execução da página então escreve por extenso  :thumbsup:

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
socopo

lo0l boa intervenção!!

mas nao me deixes de mãos a abanar arranja-me outro!!

no google procuras é esse o 1º que te aparece :thumbsup:

Vou ver se arranjo alguma coisa num projecto meu para te dar luzes

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
socopo

Não sei se te poderá ajudar mas para quem tiver interessado estão aqui exertos dum projecto que fiz relativos à parte do carrinho. Este exemplo é feito guardando os dados em variáveis session. Espero que vos seja util.

Não tentem copiar e colar o código porque para o por a funcar é preciso bastante coisa  :thumbsup: isto é mesmo só para te dar uma ideia de como fazer doutra maneira

catalogo.php

session_start();

if($_POST and isset($_POST['quant']) and $_POST['quant'] > 0)
{
	$novo_prod = $_POST['codprod'];
	$quantidade = $_POST['quant'];
	if(isset($_SESSION['carrinho']) and array_key_exists($novo_prod, $_SESSION['carrinho']))
		$_SESSION['carrinho'][$novo_prod] += $quantidade;
	else
		$_SESSION['carrinho'][$novo_prod] = $quantidade;
}


if(isset($_SESSION['carrinho']) and isset($_GET['retirar']))
{
	$cod = $_GET['retirar'];
	$car = $_SESSION['carrinho'];
	if(isset($car[$cod]))
	{
		unset($car[$cod]);
		$_SESSION['carrinho'] = $car;
		if(sizeof($_SESSION['carrinho']) < 1)
		unset($_SESSION['carrinho']);
	}	
}





// Muita coisa pelo meio ---------------------------


// Um produto

echo '<td><div class="proddiv">';

						echo '<a href="produto.php?id='.$res['codProduto'].'"><img src="'; if($res['imagem']) echo $res['imagem']; else echo "img/blankimg.jpg";  echo '" alt="'. $res['designacao']. '" /></a>';

						echo '<div class="label">'. $res['designacao'].'</div>';


						echo '<div class="shop">'. $res['preco'] ."€";
						$hoje = date("Y-m-d");
						$codProduto = $res['codProduto'];
						$sql = "SELECT * FROM `promocao` WHERE `codProduto`='$codProduto' AND `dataInicio` <= '$hoje' AND `dataFim` >= '$hoje'";

						$tp=mysql_query($sql);
						if(mysql_num_rows($tp) == 1)
						{
							$promores = mysql_fetch_assoc($tp);
							echo ' hoje: <span class="precoChama2">'. ($res['preco'] - ($res['preco'] * $promores['desconto'])).'€</span>';
						}

						if (isset($_SESSION['sessao']))
							echo '<div class="form"><form action="catalogo.php?pagina='.$pagina.'&tipo='.$tipo.'" method="post"><input name="codprod" type="hidden" value="'.$res['codProduto'].'"><input name="quant" class="quant" type="text" value="1"><input type="submit" value="+"></form></div></div></div></td>';
						else
							echo '</div></td>';




// Muita coisa pelo meio ---------------------------



// o carrinho
if(isset($_SESSION['sessao']))
		{
			echo '<div id="carrinho" class="rightbar">';
			echo '<h2>Carrinho</h2><p>';
			if(!(isset($_SESSION['carrinho'])))
				echo '<p>Adicione produtos ao seu carrinho para registar uma encomenda</p>';
			else{
				$carrinho = $_SESSION['carrinho'];
				$i = 0;
				$total = 0;
				echo '<table><tr><th>Artigo</th><th>Q</th><th>Total</th><th>Tirar</th></tr>';
				while($i < sizeof($carrinho))
				{
					$produto = each($carrinho);
					$codProduto = $produto[0];
					$quantidade = $produto[1];
					$sql = "SELECT * FROM `produto` where `codProduto`='$codProduto'";

					$t=mysql_query($sql);

					if (!$t) {

						echo "DB Error";

					}else{
						$res = mysql_fetch_assoc($t);
						echo '<tr>';
						$hoje = date("Y-m-d");
						$sql = "SELECT * FROM `promocao` WHERE `codProduto`='$codProduto' AND `dataInicio` <= '$hoje' AND `dataFim` >= '$hoje'";

						$t=mysql_query($sql);
						if(mysql_num_rows($t) == 1)
						{
							$promores = mysql_fetch_assoc($t);
							$subtotal = $quantidade * ($res['preco'] - ($res['preco'] * $promores['desconto']));
						}else
							$subtotal = $quantidade * $res['preco'];
						$total += $subtotal;
						echo '<td>'.$res['designacao'].'</td><td>x'.$quantidade.'</td><td>'.money_format('%.2n', $subtotal).'€</td>';
						echo '<td><a href="catalogo.php?pagina='.$pagina.'&tipo='.$tipo.'&retirar='.$codProduto.'">x</a></td>';
						echo '</tr>';
					}
					$i++;
				}
				echo '<tr><th colspan="2">Total</th><td>'.money_format('%.2n', $total).'€</td></tr></table>';

				echo '<a href="encomendar.php">Finalizar encomenda</a>';
			}
			echo '</p></div>';
		}

encomendar.php


session_start();

if(isset($_SESSION['carrinho']) and isset($_GET['retirar']))
{
	$cod = $_GET['retirar'];
	$car = $_SESSION['carrinho'];
	if(isset($car[$cod]))
	{
		unset($car[$cod]);
		$_SESSION['carrinho'] = $car;
		if(sizeof($_SESSION['carrinho']) < 1)
		unset($_SESSION['carrinho']);
	}	
}

if(!isset($_SESSION['carrinho']) or $_SESSION['carrinho'] == array())
	header('Location: catalogo.php');

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Daniivo

os meus includes são usados não para repetir o código mas sim para actualizar uma parte da pagina e nao a pagina toda!! lol

por exemplo tens um menu e Vaz clicando e o content vai mudando consoante o conteúdo pretendido.

tu optas-te por outra estratégia

usar session para guardar valores para o carrinho!! nao sei se é assim que se deve fazer se é assim que é mais seguro mas é bem capas de funcionar...

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
socopo

os meus includes são usados não para repetir o código mas sim para actualizar uma parte da pagina e nao a pagina toda!! lol

por exemplo tens um menu e Vaz clicando e o content vai mudando consoante o conteúdo pretendido.

tu optas-te por outra estratégia

usar session para guardar valores para o carrinho!! nao sei se é assim que se deve fazer se é assim que é mais seguro mas é bem capas de funcionar...

Pronto então a tua solução é passar o endereço quando fazes o include com valores GET. Eu não faria assim, mas agora até estou curioso pelo resultado disso :thumbsup:

Eu faria com que página que tu fazes o include fosse uma página "autónoma". A diferença seria pouca ou nenhuma... Mas eu acho que é uma estrutura melhor.

Eu acho que é a melhor solução, porque eu associo que um carrinho é pa ser usado numa sessão e que não é muito bom tar a guardar na BD os carrinhos para sempre criando uma tabela ou tabelas enormes de carrinhos abandonados. A segurança não é muito importante neste aspecto porque no carrinho não guardas preços nem nada, apenas identificadores de produtos e quantidades. É mesmo uma questão de performance... Eu pelo menos na altura achei que era muito melhor guardar o carrinho em session, muito mais prático e talvez mais eficaz em performance (ou não xD).

O que é suposto representar o 3 pa ter alguma noção? id do carrinho?

carrinho.php?cod=3

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.