Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
como posso fazer para criar algo tipo... que pegue a sessao aberta no carrinho e a sessao aberta no login do usuario (que sao 2 db diferentes) e mostre uma nova pagina com todos dados no carrinho e infos do usuario para em seguida enviar por email?
>
isso está mais pra questão de lógica do que php.
qual a sua dificuldade no uso dos recursos do php ?
a dificuldade esta em saber como fazer isso de enviar o form de 2 sessoes diferentes :unsure:/>
quando você diz sessão está se referindo às variáveis de sessão do PHP ?
$_SESSION
??
sim essa mesmo... existe uma session pros dados do usuario no sistema de login e outra pro carrinho de compras, com os produtos adicionados pelo usuario nessa session. o que pretendia era associar as 2 sessions de forma que quando o usuario fizesse o login, o script reconhecesse que as compras no carrinho lhe pertencem e dessa forma criasse entao a pagina onde o usuario pode confirmar ou alterar os dados e produtos e em seguida clicar em ENVIAR e o script mandar um mail para o dono da loja e outro pro usuario a avisar que a encomenda ja esta a caminho.
Qual a dificuldade? Já fez alguma coisa? O que tem pronto? Deu algum erro?
Não consegui entender ainda o que você quer... Daí não posso te ajudar... Tente ser mais específico na sua dúvida.
Carlos Eduardo
Estou a um tempão a fazer este carrinho e não consigo finalizar as compras. Já consultei um monte de tuturials e videoaulas, mas nada me fez conseguir finalizar o meu e visto que no site existem varios carrinhos de compras e nenhum está completo e funcional a 100% decidi colocar o meu codigo aqui para que todos possam partilhar e tentar completar de um vez por todas para que este site tenha um codigo 100% funcional de carrinho de compras.
é o seguinte, para este carrinho eu criei 2 sistemas, 1 de login com registo de usuario e outro com o carrinho de compras.
As DB utilizadas sao (na pasta Membros):
CREATE TABLE membros.membros (
id INT( 4 ) NOT NULL ,
id_membro INT NOT NULL ,
uid VARCHAR( 50 ) NOT NULL ,
nome VARCHAR( 50 ) NOT NULL ,
username VARCHAR( 25 ) NOT NULL ,
password VARCHAR( 25 ) NOT NULL ,
confirmacaopassword VARCHAR( 25 ) NOT NULL ,
morada VARCHAR( 500 ) NOT NULL ,
cpostal VARCHAR( 50 ) NOT NULL ,
localidade VARCHAR( 50 ) NOT NULL ,
indicacoes VARCHAR( 500 ) NOT NULL ,
telefone VARCHAR( 25 ) NOT NULL ,
telemovel VARCHAR( 25 ) NOT NULL ,
email VARCHAR( 100 ) NOT NULL ,
contribuinte VARCHAR( 25 ) NOT NULL ,
horario VARCHAR( 100 ) NOT NULL ,
pagamento VARCHAR( 100 ) NOT NULL ,
data_ts VARCHAR( 25 ) NOT NULL ,
activo BOOL NOT NULL DEFAULT '0',
PRIMARY KEY ( id_membro )
) ENGINE = MYISAM
(Na pasta Produtos):
CREATE TABLE produtos (
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
nome VARCHAR(130) NOT NULL,
descricao VARCHAR(1000) NOT NULL,
extras VARCHAR(500) NOT NULL,
stock VARCHAR(10) NOT NULL,
img VARCHAR(36) NOT NULL,
preco FLOAT NOT NULL
);
INSERT INTO produtos (nome, img, preco) VALUES ("Notebook AMD Turion", "img_0001.jpg", 2899.0);
CREATE TABLE carrinho (
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
cod INT NOT NULL,
quant INT NOT NULL,
sessao VARCHAR(64) NOT NULL,
INDEX sessao (sessao)
);
Os ficheiros utilizados sao (Na pasta Membros):
activar.php
<?
// Liga-se à Base de Dados
include_once('ligacaoBD.php');
$id = $_GET['id'];
$emailMd5 = $_GET['email'];
$uidMd5 = $_GET['uid'];
$dataMd5 = $_GET['key'];
//Procura os resultados na base de dados
$sql = "select * from membros where id_membro = '$id'";
$sql = mysql_query( $sql );
$rs = mysql_fetch_array( $sql );
// Compara os dados da base de dados, com os dados vindos via url
$valido = true;
if( $emailMd5 !== md5( $rs['email'] ) )
$valido = false;
if( $uidMd5 !== md5( $rs['uid'] ) )
$valido = false;
if( $dataMd5 !== md5( $rs['data_ts'] ) )
$valido = false;
// Os dados estão corretos, hora de ativar o cadastro
if( $valido === true ) {
$sql = "update membros set ativo='1' where id_membro='$id'";
mysql_query( $sql );
echo "<br><center><font size=4 color=red><b>Registo de cliente activado com sucesso!</b></font><br><br>"; header( 'refresh:3; url=index.php' );
} else {
echo "<br><center><font size=4 color=red>Informações inválidas</b></font><br><br>"; header( 'refresh:3; url=index.php' );
}
?>
index.php
<form name="form1" method="post" action="verifica.php">
<center>
<br>
<table width="400" border="0" cellpadding="5" cellspacing="1" bgcolor="#f3f3f3">
<tr>
<td colspan="3" align="center">
<strong>Área de Clientes</strong>
<br>
<br>
Username:
<br>
<input name="myusername" type="text" id="myusername" style="width:300px">
<br>
Password:
<br>
<input name="mypassword" type="password" id="mypassword" style="width:300px">
<br>
<input type="submit" name="Submit" value="ENTRAR" style="width:300px">
<br>
<br>
<font size=2><a href="registar.php">Registar Novo Cliente</a></font>
<br>
<br>
</td>
</tr>
</table>
</form>
ligacaoBD.php
<?
$host="localhost"; // Servidor
$username=""; // Username
$password=""; // Password
$db_name="membros"; // Base Dados
$tbl_name="membros"; // Tabela
// Conecta ao MySQL
if(!$con = mysql_connect($host, $username, $password)){
echo 'Erro na ligação à base de dados';
exit();
}
// Seleciona o banco de dados
if(!mysql_select_db($db_name, $con)){
echo 'Erro ao selecionar a base de dados';
exit();
}
?>
logout.php
<?
session_start();
session_destroy();
?>
registar.php
<?
// Liga-se à Base de Dados
include_once('ligacaoBD.php');
if( isset( $_POST['enviar'] ) ) {
$uid = uniqid( rand( ), true );
$data_ts = time( );
$nome = $_POST['nome'];
$username = $_POST['username'];
$password = md5( $_POST['password'] );
$confirmacaopassword = md5( $_POST['confirmacaopassword'] );
$morada = ( $_POST['morada'] );
$cpostal = ( $_POST['cpostal'] );
$localidade = ( $_POST['localidade'] );
$indicacoes = ( $_POST['indicacoes'] );
$telefone = ( $_POST['telefone'] );
$telemovel = ( $_POST['telemovel'] );
$email = ( $_POST['email'] );
$contribuinte = ( $_POST['contribuinte'] );
$horario = ( $_POST['horario'] );
$pagamento = ( $_POST['pagamento'] );
$activo = 0;
$sql = "insert into membros ($sql .= "values (
'$uid',
'$data_ts',
'',
'$nome',
'$username',
'$password',
'$confirmacaopassword',
'$morada',
'$cpostal',
'$localidade',
'$indicacoes',
'$telefone',
'$telemovel',
'$email',
'$contribuinte',
'$horario',
'$pagamento',
'$activo'
)";
if( ! mysql_query( $sql )) {
echo "Erro! - Houve um erro ao registar o cliente. ".mysql_error( );
// Se o registo foi inserido com sucesso, envia o email.
}else{
$id = mysql_insert_id( $con );
// Cria as variaveis para validar o email.
$url =
sprintf( 'id=%s&email=%s&uid=%s&key=%s',$id, md5($email), md5($uid),md5($data_ts));
$mensagem = 'Para confirmar o seu registo, clique no link abaixo:'."\n";
$mensagem .= sprintf('http://www.rpublicidade.com/Membros/activar.php?%s',$url);
// envia o email
mail($email, 'Confirme o seu Registo de Cliente!', $mensagem );
echo "<br><center><font size=4 color=red><b>Cliente registado com sucesso. Obrigado!</b></font><br><br>"; header( 'refresh:3; url=index.php' );
}}
?>
<form method="POST">
<center><br>
<input type="text" name="nome" style="width:300px">
<br><br>
<input type="text" name="username" style="width:300px">
<br><br>
<input type="password" name="password" style="width:300px">
<br><br>
<input type="password" name="confirmacaopassword" style="width:300px">
<br><br>
<input type="text" name="morada" style="width:300px">
<br><br>
<input type="text" name="cpostal" style="width:300px">
<br><br>
<input type="text" name="localidade" style="width:300px">
<br><br>
<input type="text" name="indicacoes" style="width:300px">
<br><br>
<input type="text" name="telefone" style="width:300px">
<br><br>
<input type="text" name="telemovel" style="width:300px">
<br><br>
<input type="text" name="email" style="width:300px">
<br><br>
<input type="text" name="contribuinte" style="width:300px">
<br>
<br><br>
<SELECT NAME="horario" style="width:300px">
<OPTION VALUE="Dias de Semana durante a manhã">Dias de Semana durante a manhã
<OPTION VALUE="Dias de Semana durante a tarde">Dias de Semana durante a tarde
<OPTION VALUE="Fins de Semana durante a manhã">Fins de Semana durante a manhã
<OPTION VALUE="Fins de Semana durante a tarde">Fins de Semana durante a tarde
<OPTION VALUE="É Indiferente...">É Indiferente...
</SELECT>
<br>
<br><br>
<SELECT NAME="pagamento" style="width:300px">
<OPTION VALUE="Contra Reembolso">Contra Reembolso a Dinheiro
<OPTION VALUE="Transferência Bancária">Transferência Bancária
</SELECT>
<br>
<br>
<input type="submit" name="enviar" value="Efectuar Registo">
</form>
successo.php
<?
session_start();
if(!session_is_registered(myusername)){
header("location:login.php");
}
?>
<html>
<body>
<br>
<center>
<font size=4 color=red>
<b>Bem vindo!</b>
</font>
</body>
</html>
verifica.php
<?
ob_start();
// Liga-se à Base de Dados
include_once('ligacaoBD.php');
// Liga-se ao servidor e selecciona a base de dados.
mysql_connect("$host", "$username", "$password")or die("<br><center><font size=4 color=red><b>Erro! - Impossível liga à Base de Dados.</b></font>");header( 'refresh:3; url=index.php' );
mysql_select_db("$db_name")or die("<br><center><font size=4 color=red><b>Erro! - Impossível seleccionar a Tabela.</b></font>");header( 'refresh:3; url=index.php' );
// Define $myusername e $mypassword
$myusername=$_POST['myusername'];
$mypassword=$_POST['mypassword'];
$myusername = stripslashes($myusername);
$mypassword = stripslashes($mypassword);
$myusername = mysql_real_escape_string($myusername);
$mypassword = mysql_real_escape_string($mypassword);
$sql="SELECT * FROM $tbl_name WHERE username='$myusername' and password='$mypassword'";
$result=mysql_query($sql);
// Conta o número de linhas da tabela
$count=mysql_num_rows($result);
if($count==1){session_register("myusername");
session_register("mypassword");
header("location:successo.php");
}else{
echo "<br><center><font size=4 color=red><b>Username ou Password Errados!</b></font>";
header( 'refresh:3; url=index.php' );
}
ob_end_flush();
?>
Ok... agora passemos à pasta Produtos onde se encontra o carrinho:
nesta pasta temos uma pasta Imagens CMOD(777)
actualiza.php
<? ob_start(); ?>
<?
session_start();
include('conexao.php');
// Obtem a id da sessão.
$sessao = session_id();
// Obtem a lista de produtos.
$itens = $_POST['quantidade'];
// Separa a lista e actualiza a base de dados.
foreach($itens as $chave => $quantidade){
// O valor de $chave é o código do produto enviado entre [].
// O valor de $quantidade é a quantidade do produto.
// Multiplicar por um garante que o valor será um número.
$quantidade *= 1;
$chave *= 1;
// Atualiza os valores.
mysql_query('UPDATE carrinho SET quant="'.$quantidade.'" WHERE cod="'.$chave.'" AND sessao="'.$sessao.'"');
}
// Retorna para a página do carrinho.
header('Location: verProdutos.php');
?>
<? ob_flush(); ?>
remover.php
<? ob_start(); ?>
<?
session_start();
include('conexao.php');
// Obtem a id da sessão.
$sessao = session_id();
// Obtem o código do produto.
$produto = $_GET['id'];
// Apaga o produto do carrinho.
mysql_query('DELETE FROM carrinho WHERE cod="'.$produto.'" AND sessao="'.$sessao.'"');
// Redireciona para a página de visualização.
header('Location: verProdutos.php');
?>
<? ob_flush(); ?>
carrinho.php
<?
ob_start();
session_start();
include "conexao.php";
$sessao = session_id();
$prod = intval($_GET["produto"]);
// Aqui verifico se existe algum carrinho pra essa sessão
$selc = mysql_query("SELECT * FROM carrinho WHERE sessao='$sessao' AND cod='$prod'") or die(mysql_error());
$numrows = mysql_num_rows($selc);
$arr = mysql_fetch_array($selc);
if($numrows > 0) { // Se retornar carrinhos para esta sessão, a var $qtde assume o valor do campo quant
$qtde = $arr["quant"];
} else { // Caso contrário, assume valor 0
$qtde = "0";
}
if($qtde >= 1) { // Verifico se já existe um produto igual registrado pra esse carrinho. Se existir, aumento quantidade em +1
$nova_qtde = $qtde + 1;
$sql = "UPDATE carrinho SET quant='$nova_qtde' WHERE sessao='$sessao' AND cod='$prod'";
} else { // Se não existir, registro com quantidade = 1
$sql = "INSERT INTO carrinho (id, cod, quant, sessao) VALUES('', '$prod', '1', '$sessao')";
}
$query = mysql_query($sql);
if($query) {
echo "<center><br><font size='5' color='red'><b>OK... Produto Adicionado ao Carrinho!</b></font><br><br>";
header( 'refresh:3; url=verProdutos.php' );
echo "<center><a href='index.php'><img src='BotLoja.png' border='0'></a> <a href='verProdutos.php'><img src='BotCarrinho.png' border='0'></a>";
} else {
echo "O produto não pôde ser adicionado ao carrinho!";
echo "<center><a href='index.php'><img src='BotLoja.png' border='0'></a>";
}
ob_flush();
?>
conexao.php
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<?
// Dados da ligação
$servidor = 'localhost';
$usuario = '';
$senha = '';
$banco = 'teste';
// Conecta ao MySQL
if(!$con = mysql_connect($servidor, $usuario, $senha)){
echo 'Erro na ligação à base de dados';
exit();
}
// Seleciona o banco de dados
if(!mysql_select_db($banco, $con)){
echo 'Erro ao selecionar a base de dados';
exit();
}
?>
detalhes.php
<?
ob_start();
include('conexao.php');
?>
<html>
<body>
<?
$id = $_GET['id'];
$itens = mysql_query("SELECT * FROM produtos WHERE id = '$id'") or die(mysql_error());
if(mysql_num_rows($itens) < 1){
echo "Produto inválido!<br><br><a href='index.php'>Ir para a loja</a>";
} else {
while($item = mysql_fetch_assoc($itens)){
?>
<center>
<img src='BannerLoja.png' border='0'><br>
<table bgcolor='#99cc33' cellpadding='5' cellspacing='1' width='800'>
<tr>
<td bgcolor='#ffffff' align='center'>
<?
echo '
<br>
<img width=400 height=300 border=0 src="Imagens/'.$item['img'].'">
<br>
<b>'.$produto['nome'].'</b>
<br>
';
?>
</td>
</tr>
<tr>
<td bgcolor='#99cc33' align='center'>
<center>
<font size='2' color='#ffffff'><b>Detalhes do Produto:</b></font>
</td>
</tr>
<tr>
<td bgcolor='#e3e3e3' align='center'>
<font size='4' color='#000000'><b><? echo $item['cod'] ?><? echo $item['nome'] ?></b></font>
<?
echo '
<br>
<b><hr size=1 color=green><font color=#99cc33>Descrição Detalhada:</font></b><br>'.$item['descricao'].'
<br>
<b><hr size=1 color=green><font color=#99cc33>Extras Incluídos:</font></b><br>'.$item['extras'].'
<br>
<b><hr size=1 color=green><font color=#99cc33>Stock Actual:</font></b><br>'.$item['stock'].'
';
?>
<br>
<b><hr size=1 color=green><font color=#99cc33>Preço:</font></b><br>
<font size='4' color='red'>
<b>€</b> <? echo number_format($item['preco'], 2, ',', '') ?>
</td>
</tr>
<tr>
<td bgcolor='#99cc33' align='center'>
<?echo'<a href="carrinho.php?produto='.$item['id'].'"><img src="../Produtos/BotAdicionar.png" border="0"></a>';?><a href="verProdutos.php"><img src="BotCarrinho.png" border="0"></a> <a href="#" onclick="window.print();return false;"><img src="BotImprimir.png" border="0"></a> <a href="index.php"><img src="BotLoja.png" border="0"></a> <a href="finalizar.php"><img src="BotFinalizar.png" border="0"></a>
</td>
</tr>
</table>
<?
}}
ob_flush();
?>
</body>
</html>
verProdutos.php
<?
ob_start();
session_start();
include('conexao.php');
// Obtendo a id da sessão
$sessao = session_id();
?>
<html>
<body>
<form action='actualiza.php' method='post'>
<?
// Requisita à base de dados a id, quantidade e nome do produto.
// Como o nome está numa tabela diferente dos outros itens, incluo o nome da tabela junto ao nome do campo.
$itens = mysql_query('SELECT carrinho.cod, carrinho.quant, produtos.nome, produtos.img, produtos.preco FROM carrinho,produtos
WHERE carrinho.cod = produtos.id AND carrinho.sessao = "'.$sessao.'"');
// Uma verificação simples se o carrinho está vazio ou não
if(mysql_num_rows($itens) < 1){
// Se o carrinho estiver vazio só exibe uma mensagem e um link para a loja
echo "<center><br><font size='5' color='red'><b>O carrinho está vazio...</b></font><br><br><a href='index.php'><img src='BotLoja.png' border='0'></a>";
header( 'refresh:3; url=index.php' );
} else {
// Exibe os itens presentes no carrinho
?>
<center>
<img src='BannerCarrinho.png' border='0'><br>
<table bgcolor='#99cc33' cellpadding='5' cellspacing='1' width='800'>
<tr valign="middle">
<td bgcolor="#e3e3e3" width="40" align="left" valign="middle">
<font color='#99cc33' size='2'><b></b>
</td>
<td bgcolor="#e3e3e3" width="600" align="left" valign="middle">
<font color='#99cc33' size='2'><b>Lista de Produtos:</b>
</td>
<td bgcolor="#eeeeee" width="100">
<center>
<font color='#99cc33' size='2'><b>Preço Uni.</b>
</td>
<td bgcolor="#e3e3e3" width="50">
<center>
<font color='#99cc33' size='2'><b>Quant.</b>
</td>
<td bgcolor="#eeeeee" width="50">
<center>
<font color='#99cc33' size='2'><b>Opções</b>
</td>
</tr>
<?
// Calcular o preço total
$total = 0;
// Dou um loop pra listar is itens do carrinho de compras
while($item = mysql_fetch_assoc($itens)){
?>
<tr valign="middle">
<td bgcolor="#e3e3e3" width="40" align="left" valign="middle">
<center><b><a href="detalhes.php?id=<? echo $item['cod'] ?>"><? echo '<img width=40 height=30 border=0 src="Imagens/'.$item['img'].'">' ?></a></b>
</td>
<td bgcolor="#e3e3e3" width="600" align="left" valign="middle">
<b><a href="detalhes.php?id=<? echo $item['cod'] ?>"><? echo $item['nome'] ?></a></b>
</td>
<td bgcolor="#eeeeee" width="100">
<center>
<b>€</b> <? echo number_format($item['preco'], 2, ',', '') ?>
</td>
<td bgcolor="#e3e3e3" width="50">
<center>
<input size='4' type='text' name='quantidade[<? echo $item["cod"] ?>]' value='<? echo $item["quant"] ?>'>
</td>
<td bgcolor="#eeeeee" width="50">
<center>
<a href='remover.php?id=<? echo $item["cod"] ?>'><img src='BotRemover.png' border='0'></a>
</td>
</tr>
<?
$total += $item['preco'] * $item['quant'];
}
?>
</table>
<center>
<table bgcolor='#99cc33' cellpadding='5' cellspacing='1' width='800' border='0'>
<tr>
<td bgcolor='#99cc33' width='560'>
<font color='#ffffff' size='4'>
<b>Total: €<font color='yellow'> <? echo number_format($total, 2, ',', ''); ?></b></font> - Iva incluído à taxa em vigor.</font>
</td><td><font color='#666666' size='2'> Preço s/portes de envio. <a href='portes.php'>Ver Preço Portes</a></font>
</td>
</tr>
</table>
<center>
<hr size=1 width="800" color="green">
<INPUT TYPE="image" SRC="BotActualizar.png" BORDER="0"> <a href=''><img src='BotLimpar.png' border='0'></a> <a href='index.php'><img src='BotLoja.png' border='0'></a> <a href='finalizar.php'><img src='BotFinalizar.png' border='0'></a>
</form>
<?
}
ob_flush();
?>
</body>
</html>
e é tudo... espero que com todo o carrinho aqui postado seja possivel mais pessoas melhorar e completar o pouco que esta em falta para partilhar com todos, em vez de dizerem que partilham e depois ninguem partilha nada...
ora bem, o que está a faltar neste carrinho é fazer com que o carrinho associe as 2 sessions que existem, os produtos e o login do usuario e que crie uma nova pagina com os dados do carrinho e usuario logado para que possa finalizar a compra. ao finalizar a compra deverá enviar 1 email ao usuario com a sua encomenda e uma mensagem a dizer que está a ser processáda para envio, 1 email ao dono da loja virtual com os dados da encomenda e morada etc do usuario e ainda reduzir no DB na tabela stock os produtos que foram comprados... desta maneira conseguimos finalizar a compra e actualizar o stock ao mesmo tempo. É isso aí... espero contar com todos voces para terminar-mos o meu trabalho de ja 2 meses... Abraços, fiquem com deus!
CREATE TABLE carrinho (
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
cod INT NOT NULL,
quant INT NOT NULL,
sessao VARCHAR(64) NOT NULL,
INDEX sessao (sessao)
);
Explique cada um dos campos desta tabela...
Por exemplo, id é o id do carrinho, certo? Cod é o que??? Código do produto? Do usuário??? Quant é a quantidade de cada produto? Sessao, o que é??? Onde está a ligação com o usuário??? Como você faz para saber que tal carrinho é de tal usuário??? Acho que é um problema de modelagem do banco de dados... Alias, fazer carrinho de compras com banco de dados eu nunca vi... Normalmente se faz gravando os dados em session... Mas aí fica a seu critério.
Carlos Eduardo
id é o id do carrinho.
Cod é o numero unico gerado para cada produto no carrinho.
Quant é a quantidade de cada produto
Sessao é o numero unico de sessao
Onde está a ligação com o usuário??? o usuario esta na DB membros
Como você faz para saber que tal carrinho é de tal usuário???
R: é precisamente isso que queria fazer
Normalmente se faz gravando os dados em session???
eu no toturial que segui quando criei o carrinho tinha assim com base de dados... penso que é melhor para guardar os produtos na tabela em vez de ter que escrever no codigo cada produto... n sei...
>
Onde está a ligação com o usuário??? o usuario esta na DB membros
Como você faz para saber que tal carrinho é de tal usuário???
R: é precisamente isso que queria fazer
Quando eu pergunto ligação... é exatamente o que identifica que o carrinho é de tal usuário...
Veja...
A modelagem do seu BD está errado. No carrinho tem que ter um campo com a identificação do usuário que fez a compra, ou seja, de quem é o carrinho.
Carlos Eduardo
entao mas isso n pode ser pegado da DB membros? assim se o usuario fizesse o login ele pegava nos dados desse usuario e usava no carrinho, se nao abria a pag para o usuario se inscrever... é que fiz promeiro o carrinho e so depois criei o script para login, por isso ficou em 2 DB diferentes... como ficaria se fosse você a fazer? neste caso seria o id_membro na DB membros
Tem que ficar em 2 tabelas mesmo... Faça ligação na hora da consulta...
JOIN
http://dev.mysql.com/doc/refman/4.1/pt/join.html
Dica: Leia algumas apostilas sobre trabalhar com relacionamento de tabelas no Mysql... Vai te ajudar a entender como fazer.
Carlos Eduardo
xiiii ja tive a dar uma vista de olhos, mas n estou a ver como aplicar isso aqui... eu vou ter que dizer para mostrar todos os dados incluidos na sessao do carrinho e na sessao do usuario com o id_membro activo :huh:/>
Isto mesmo.
Carlos Eduardo
:(/> n estou a conseguir... nao acredito que depois de fazer tanta coisa vou encalhar aqui onde quase toda a gente encalha...
Você tem que adicionar mais um campo na tabela do banco de dados do carrinho, identificando quem é o usuário. Depois faz a consulta usando o JOIN no id das 2 tabelas... Não tem dificuldade. Se não está conseguindo fazer isto, é melhor estudar um pouco mais sobre PHP com Mysql, especialmente sobre relacionamento de tabelas. Porque fazer isto é o básico. Se você não está fazendo nenhum JOIN... tem coisa bem errada no teu carrinho de compras...
Olhe nesta página.
Tem muuuuuuuuiiiiiitas apostilas sobre o assunto. Lendo qualquer uma delas você consegue entender a lógica do que estou te falando.
Carlos Eduardo
>
Você tem que adicionar mais um campo na tabela do banco de dados do carrinho, identificando quem é o usuário. Depois faz a consulta usando o JOIN no id das 2 tabelas... Não tem dificuldade. Se não está conseguindo fazer isto, é melhor estudar um pouco mais sobre PHP com Mysql, especialmente sobre relacionamento de tabelas. Porque fazer isto é o básico. Se você não está fazendo nenhum JOIN... tem coisa bem errada no teu carrinho de compras...
Olhe nesta página.
Tem muuuuuuuuiiiiiitas apostilas sobre o assunto. Lendo qualquer uma delas você consegue entender a lógica do que estou te falando.
Carlos Eduardo
criei uma nova coluna na DB carrinho (idmembro VARCHAR(64) NOT NULL,)
deixa ver se eu percebi, visto a tabela Membros ser outra a parte, tenho que fazer com que ao fazer o login, a tabela membros envio o id para a tabela carrinho e o guarde no idmembro para depois pegar a idmembro e a cod e criar a pagina com os produtos e dados do cliente??? :mellow:/>
olá Ricktuga.
tens q pensar agora em duas coisas.
detalhe como estás salvando as "$_SESSIONS[]"
- está em duas "session()" diferentes?
- estão em diferentes variáveis dentro da mesma "session()"?
geralmente se salva no banco de dados depois do "finalizar compra" a menos q queiras "recuperar" a compra depois ou fazer um histórico de atividades.
>
olá Ricktuga.
tens q pensar agora em duas coisas.
detalhe como estás salvando as "$_SESSIONS[]"
- está em duas "session()" diferentes?
- estão em diferentes variáveis dentro da mesma "session()"?
geralmente se salva no banco de dados depois do "finalizar compra" a menos q queiras "recuperar" a compra depois ou fazer um histórico de atividades.
boas...
estou a gravar na session carrinho e na session membros o que deveria corresponder aos produtos no carrinho (que esta a funcionar as mil maravilhas) e a no membros que é outra session com os dados do user.
A minha duvida é mm criar uma outra pagina que exiba os produtos no carrinho tal como aparece no verProdutos.php onde se pode alterar quantidades, eliminar etc... e nessa mesma pagina a cena dos membros onde apos o login a pagina associe o que esta no carrinho aos dados desse cliente e envie. Ao enviar reduz no stock os produtos comprados. sinceramente deve ser facil, mas eu n estou a conseguir e pelo que vi ja em inumeros foruns e tuturiais é a parte onde toda a gente para sem saber pra onde se virar...
Veja que você confunde a todos assim...
estou a gravar na session carrinho e na session membros
Você não grava na session... Grava no BD. Aí bagunça a nossa cabeça e fica difícil de ajudar... Mas de qualquer forma...
>
criei uma nova coluna na DB carrinho (idmembro VARCHAR(64) NOT NULL,)
deixa ver se eu percebi, visto a tabela Membros ser outra a parte, tenho que fazer com que ao fazer o login, a tabela membros envio o id para a tabela carrinho e o guarde no idmembro para depois pegar a idmembro e a cod e criar a pagina com os produtos e dados do cliente???
Isto mesmo... Vou te dar um exemplo.
$sql = 'SELECT * FROM carrinho JOIN membros ON carrinho.idmembro = membros.id_membro WHERE sessao = SUA SESSAO';
Mais ou menos assim.
Tenta aí.
Carlos Eduardo
>
Veja que você confunde a todos assim...
estou a gravar na session carrinho e na session membros
Você não grava na session... Grava no BD. Aí bagunça a nossa cabeça e fica difícil de ajudar... Mas de qualquer forma...
>
criei uma nova coluna na DB carrinho (idmembro VARCHAR(64) NOT NULL,)
deixa ver se eu percebi, visto a tabela Membros ser outra a parte, tenho que fazer com que ao fazer o login, a tabela membros envio o id para a tabela carrinho e o guarde no idmembro para depois pegar a idmembro e a cod e criar a pagina com os produtos e dados do cliente???
Isto mesmo... Vou te dar um exemplo.
$sql = 'SELECT * FROM carrinho JOIN membros ON carrinho.idmembro = membros.id_membro WHERE sessao = SUA SESSAO';
Mais ou menos assim.
Tenta aí.
Carlos Eduardo
tentei criar um finalizar.php com o seguinte codigo:
<?
ob_start();
session_start();
include('conexao.php');
// Obtendo a id da sessão
$sessao = session_id();
?>
<html>
<body>
<form method="post" action="enviacompras.php">
<style>
input, select {
font-size: 11px;
background-color: #FFFFFF;
margin: 0px;
border: 0px solid #cac5a3;
}
textarea {
font-size: 11px;
background-color: #FFFFFF;
margin: 0px;
border: 0px solid #cac5a3;<?
// Requisita à base de dados a id, quantidade e nome do produto.
// Como o nome está numa tabela diferente dos outros itens, incluo o nome da tabela junto ao nome do campo.
$itens = mysql_query('SELECT carrinho.cod, carrinho.quant, produtos.nome, produtos.img, produtos.preco FROM carrinho,produtos
WHERE carrinho.cod = produtos.id AND carrinho.sessao = "'.$sessao.'"');
// Requisita os dados do cliente
$sql = 'SELECT * FROM carrinho,membros JOIN membros ON carrinho.idmembro = membros.id_membro WHERE sessao = "'.$uid.'"';
// Uma verificação simples se o carrinho está vazio ou não
if(mysql_num_rows($itens) < 1){
// Se o carrinho estiver vazio só exibe uma mensagem e um link para a loja
echo "<center><br><font size='5' color='red'><b>O carrinho está vazio...</b></font><br><br><a href='index.php'><img src='BotLoja.png' border='0'></a>";
header( 'refresh:3; url=index.php' );
}else{
// Exibe os itens presentes no carrinho
?>
<center>
<img src='BannerCarrinho.png' border='0'><br>
<table bgcolor='#99cc33' cellpadding='5' cellspacing='1' width='800'>
<tr valign="middle">
<td bgcolor="#e3e3e3" width="40" align="left" valign="middle">
<font color='#99cc33' size='2'><b></b>
</td>
<td bgcolor="#e3e3e3" width="600" align="left" valign="middle">
<font color='#99cc33' size='2'><b>Lista de Produtos:</b>
</td>
<td bgcolor="#eeeeee" width="100">
<center>
<font color='#99cc33' size='2'><b>Preço Uni.</b>
</td>
<td bgcolor="#e3e3e3" width="50">
<center>
<font color='#99cc33' size='2'><b>Quant.</b>
</td>
<td bgcolor="#eeeeee" width="50">
<center>
<font color='#99cc33' size='2'><b>Opções</b>
</td>
</tr>
<?
// Calcular o preço total
$total = 0;
// Dou um loop pra listar is itens do carrinho de compras
while($item = mysql_fetch_assoc($itens)){
?>
<tr valign="middle">
<td bgcolor="#e3e3e3" width="40" align="left" valign="middle">
<center><b><a href="detalhes.php?id=<? echo $item['cod'] ?>"><? echo '<img width=40 height=30 border=0 src="Imagens/'.$item['img'].'">' ?></a></b>
</td>
<td bgcolor="#e3e3e3" width="600" align="left" valign="middle">
<b><a href="detalhes.php?id=<? echo $item['cod'] ?>"><? echo $item['nome'] ?></a></b>
</td>
<td bgcolor="#eeeeee" width="100">
<center>
<b>€</b> <? echo number_format($item['preco'], 2, ',', '') ?>
</td>
<td bgcolor="#e3e3e3" width="50">
<center>
<input size='4' type='text' name='quantidade[<? echo $item["cod"] ?>]' value='<? echo $item["quant"] ?>'>
</td>
<td bgcolor="#eeeeee" width="50">
<center>
<a href='remover.php?id=<? echo $item["cod"] ?>'><img src='BotRemover.png' border='0'></a>
</td>
</tr>
<?
$total += $item['preco'] * $item['quant'];
}
?>
</table>
<center>
<table bgcolor='#99cc33' cellpadding='5' cellspacing='1' width='800' border='0'>
<tr>
<td bgcolor='#99cc33' width='560'>
<font color='#ffffff' size='4'>
<b>Total: €<font color='yellow'> <? echo number_format($total, 2, ',', ''); ?></b></font> - Iva incluído à taxa em vigor.</font>
</td><td><font color='#666666' size='2'> Preço s/portes de envio. <a href='portes.php'>Ver Preço Portes</a></font>
</td>
</tr>
</table>
<center>
<hr size=1 width="800" color="green">
<INPUT TYPE="image" SRC="BotActualizar.png" BORDER="0" style="width:150px"> <a href=''><img src='BotLimpar.png' border='0'></a> <a href='index.php'><img src='BotLoja.png' border='0'></a>
<?
// dados do cliente
if($valido === true){
// Se o carrinho estiver vazio só exibe uma mensagem e um link para a loja
echo "<center><br><font size='5' color='red'><b>Por favor inicie sessão...</b></font><br><br><a href='index.php'><img src='BotLoja.png' border='0'></a>";
include '../Membros/index.php';
}else{
?>
<hr size=1 width="800" color="green">
<table cellpadding='5' bgcolor='#f3f3f3' cellspacing='1' width='800' border='0'>
<tr>
<td align='center'>
<hr size=1 width="800" color="green">
<font size=3 color=green>
<b>Dados do Cliente:</b>
</font>
<hr size=1 width="800" color="green">
Nome:
<br>
<? echo $sql['nome'] ?>
<br><br>
<? echo $sql['telefone'] ?>
<br><br>
<? echo $sql['telemovel'] ?>
<br><br>
<? echo $sql['email'] ?>
<br><br>
<? echo $sql['contribuinte'] ?>
<hr size=1 width="800" color="green">
<font size=3 color=green>
<b>Opções de Entrega e Pagamento:</b>
</font>
<hr size=1 width="800" color="green">
Morada:
<br>
<? echo $sql['morada'] ?>
<br><br>
<? echo $sql['cpostal'] ?>
<br><br>
<? echo $sql['localidade'] ?>
<br><br>
<? echo $sql['indicacoes'] ?>
<br><br>
<? echo $sql['horario'] ?>
<br><br>
<? echo $sql['pagamento'] ?>
<br>
</td>
</tr>
</table>
<center>
<hr size=1 width="800" color="green">
<input type="image" src="BotFinalizar.png" border="0">
</form>
<?
}}
ob_flush();
?>
</body>
</html>Aqui está errado...
// Requisita os dados do cliente
$sql = 'SELECT * FROM carrinho,membros JOIN membros ON carrinho.idmembro = membros.id_membro WHERE sessao = "'.$uid.'"';Carlos Eduardo
alterei esta parte do conteudo para inputs, assim permite alterar os dados:
<table cellpadding='5' bgcolor='#f3f3f3' cellspacing='1' width='800' border='0'>
<tr>
<td align='center'>
<hr size=1 width="800" color="green">
<font size=3 color=green>
<b>Dados do Cliente:</b>
</font>
<hr size=1 width="800" color="green">
Nome:
<br>
<input size='4' type='text' name='cliente' value='<? echo $sql['cliente'] ?>' style="width:500px">
<br><br>
<input size='4' type='text' name='telefone' value='<? echo $sql['telefone'] ?>' style="width:500px">
<br><br>
<input size='4' type='text' name='telemovel' value='<? echo $sql['telemovel'] ?>' style="width:500px">
<br><br>
<input size='4' type='text' name='email' value='<? echo $sql['email'] ?>' style="width:500px">
<br><br>
<input size='4' type='text' name='contribuinte' value='<? echo $sql['contribuinte'] ?>' style="width:500px">
<br>
<br>
<hr size=1 width="800" color="green">
<font size=3 color=green>
<b>Opções de Entrega e Pagamento:</b>
</font>
<hr size=1 width="800" color="green">
Morada:
<br>
<textarea rows="4" cols="20" style="width:500px"><? echo $sql['morada'] ?></textarea>
<br><br>
<input size='4' type='text' name='cpostal' value='<? echo $sql['cpostal'] ?>' style="width:500px">
<br><br>
<input size='4' type='text' name='localidade' value='<? echo $sql['localidade'] ?>' style="width:500px">
<br><br>
<input size='4' type='text' name='indicacoes' value='<? echo $sql['indicacoes'] ?>' style="width:500px">
<br><br>
<input size='4' type='text' name='horario' value='<? echo $sql['horario'] ?>' style="width:500px">
<br><br>
<input size='4' type='text' name='pagamento' value='<? echo $sql['pagamento'] ?>' style="width:500px">
<br>
<br>
</td>
</tr>
</table>Quanto a query... alterei para:
$sql = mysql_query('SELECT * FROM carrinho,membros JOIN membros ON carrinho.idmembro = membros.id_membro WHERE sessao = "'.$uid.'"'); mas continua a n resultar, desta vez n mostra nada dentro dos inputs <_</>
você não está mandando gerar o resultado...
mysql_fetch_array ou mysq_fetch_assoc ou mysql_result ou ...
Carlos Eduardo
>
você não está mandando gerar o resultado...
mysql_fetch_array ou mysq_fetch_assoc ou mysql_result ou ...
Carlos Eduardo
esta a dar erro :(/>
Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in /home/rpublici/public_html/teste/Produtos/finalizar.php on line 140
Codigo Actual:
<?
ob_start();
session_start();
include('conexao.php');
// Obtendo a id da sessão
$sessao = session_id();
?>
<html>
<body>
<form method="post" action="enviacompras.php">
<style>
input, select {
font-size: 11px;
background-color: #FFFFFF;
margin: 0px;
border: 0px solid #cac5a3;
}
textarea {
font-size: 11px;
background-color: #FFFFFF;
margin: 0px;
border: 0px solid #cac5a3;<?
// Requisita à base de dados a id, quantidade e nome do produto.
// Como o nome está numa tabela diferente dos outros itens, incluo o nome da tabela junto ao nome do campo.
$itens = mysql_query('SELECT carrinho.cod, carrinho.quant, produtos.nome, produtos.img, produtos.preco FROM carrinho,produtos
WHERE carrinho.cod = produtos.id AND carrinho.sessao = "'.$sessao.'"');
// Uma verificação simples se o carrinho está vazio ou não
if(mysql_num_rows($itens) < 1){
// Se o carrinho estiver vazio só exibe uma mensagem e um link para a loja
echo "<center><br><font size='5' color='red'><b>O carrinho está vazio...</b></font><br><br><a href='index.php'><img src='BotLoja.png' border='0'></a>";
header( 'refresh:3; url=index.php' );
}else{
// Exibe os itens presentes no carrinho
?>
<center>
<img src='BannerCarrinho.png' border='0'><br>
<table bgcolor='#99cc33' cellpadding='5' cellspacing='1' width='800'>
<tr valign="middle">
<td bgcolor="#e3e3e3" width="40" align="left" valign="middle">
<font color='#99cc33' size='2'><b></b>
</td>
<td bgcolor="#e3e3e3" width="600" align="left" valign="middle">
<font color='#99cc33' size='2'><b>Lista de Produtos:</b>
</td>
<td bgcolor="#eeeeee" width="100">
<center>
<font color='#99cc33' size='2'><b>Preço Uni.</b>
</td>
<td bgcolor="#e3e3e3" width="50">
<center>
<font color='#99cc33' size='2'><b>Quant.</b>
</td>
<td bgcolor="#eeeeee" width="50">
<center>
<font color='#99cc33' size='2'><b>Opções</b>
</td>
</tr>
<?
// Calcular o preço total
$total = 0;
// Dou um loop pra listar os itens do carrinho de compras
while($item = mysql_fetch_assoc($itens)){
?>
<tr valign="middle">
<td bgcolor="#e3e3e3" width="40" align="left" valign="middle">
<center><b><a href="detalhes.php?id=<? echo $item['cod'] ?>"><? echo '<img width=40 height=30 border=0 src="Imagens/'.$item['img'].'">' ?></a></b>
</td>
<td bgcolor="#e3e3e3" width="600" align="left" valign="middle">
<b><a href="detalhes.php?id=<? echo $item['cod'] ?>"><? echo $item['nome'] ?></a></b>
</td>
<td bgcolor="#eeeeee" width="100">
<center>
<b>€</b> <? echo number_format($item['preco'], 2, ',', '') ?>
</td>
<td bgcolor="#e3e3e3" width="50">
<center>
<input size='4' type='text' name='quantidade[<? echo $item["cod"] ?>]' value='<? echo $item["quant"] ?>'>
</td>
<td bgcolor="#eeeeee" width="50">
<center>
<a href='remover.php?id=<? echo $item["cod"] ?>'><img src='BotRemover.png' border='0'></a>
</td>
</tr>
<?
$total += $item['preco'] * $item['quant'];
}
?>
</table>
<center>
<table bgcolor='#99cc33' cellpadding='5' cellspacing='1' width='800' border='0'>
<tr>
<td bgcolor='#99cc33' width='560'>
<font color='#ffffff' size='4'>
<b>Total: €<font color='yellow'> <? echo number_format($total, 2, ',', ''); ?></b></font> - Iva incluído à taxa em vigor.</font>
</td><td><font color='#666666' size='2'> Preço s/portes de envio. <a href='portes.php'>Ver Preço Portes</a></font>
</td>
</tr>
</table>
<center>
<hr size=1 width="800" color="green">
<INPUT TYPE="image" SRC="BotActualizar.png" BORDER="0" style="width:150px"> <a href=''><img src='BotLimpar.png' border='0'></a> <a href='index.php'><img src='BotLoja.png' border='0'></a>
<?
// Requisita os dados do cliente
$clientes = mysql_query('SELECT * FROM carrinho,membros JOIN membros ON carrinho.idmembro = membros.id_membro WHERE sessao = "'.$uid.'"');
// dados do cliente
if($valido === true){
// Se o carrinho estiver vazio só exibe uma mensagem e um link para a loja
echo "<center><br><font size='5' color='red'><b>Por favor inicie sessão...</b></font><br><br><a href='index.php'><img src='BotLoja.png' border='0'></a>";
include '../Membros/index.php';
}else{
// dou um loop para listar os dados do cliente
while($dados = mysql_fetch_assoc($clientes)){
?>
<hr size=1 width="800" color="green">
<table cellpadding='5' bgcolor='#f3f3f3' cellspacing='1' width='800' border='0'>
<tr>
<td align='center'>
<hr size=1 width="800" color="green">
<font size=3 color=green>
<b>Dados do Cliente:</b>
</font>
<hr size=1 width="800" color="green">
Cliente:
<br>
<input size='4' type='text' name='cliente' value='<? echo $dados["cliente"] ?>' style="width:500px">
<br><br>
<input size='4' type='text' name='telefone' value='<? echo $dados["telefone"] ?>' style="width:500px">
<br><br>
<input size='4' type='text' name='telemovel' value='<? echo $dados["telemovel"] ?>' style="width:500px">
<br><br>
<input size='4' type='text' name='email' value='<? echo $dados["email"] ?>' style="width:500px">
<br><br>
<input size='4' type='text' name='contribuinte' value='<? echo $dados["contribuinte"] ?>' style="width:500px">
<br>
<br>
<hr size=1 width="800" color="green">
<font size=3 color=green>
<b>Opções de Entrega e Pagamento:</b>
</font>
<hr size=1 width="800" color="green">
Morada:
<br>
<textarea rows="4" name="morada" cols="20" style="width:500px"><? echo $dados["morada"] ?></textarea>
<br><br>
<input size='4' type='text' name='cpostal' value='<? echo $dados["cpostal"] ?>' style="width:500px">
<br><br>
<input size='4' type='text' name='localidade' value='<? echo $dados["localidade"] ?>' style="width:500px">
<br><br>
<input size='4' type='text' name='indicacoes' value='<? echo $dados["indicacoes"] ?>' style="width:500px">
<br><br>
<input size='4' type='text' name='horario' value='<? echo $dados["horario"] ?>' style="width:500px">
<br><br>
<input size='4' type='text' name='pagamento' value='<? echo $dados["pagamento"] ?>' style="width:500px">
<br>
<br>
</td>
</tr>
</table>
<center>
<?
}
?>
<hr size=1 width="800" color="green">
<input type="image" src="BotFinalizar.png" border="0">
</form>
<?
}}
ob_flush();
?>
</body>
</html>Significa que está dando erro na query anterior ao fetch_array.
$clientes = mysql_query('SELECT * FROM carrinho,membros JOIN membros ON carrinho.idmembro = membros.id_membro WHERE sessao = "'.$uid.'"') or die(mysql_error());
Vai exibir o erro do mysql. Mas na verdade não precisa fazer isto... Você precisa pegar os dados do usuário do carrinho... Então faz o select ... where idmembro = id_do_membro_que_logou.
Pensa um pouco... Tá quase lá.
Carlos Eduardo
isso está mais pra questão de lógica do que php.
qual a sua dificuldade no uso dos recursos do php ?