Foros del Web » Programando para Internet » PHP »

¿ayuda al Guardar contenido de sesion?

Estas en el tema de ¿ayuda al Guardar contenido de sesion? en el foro de PHP en Foros del Web. Hola, estoy desarrollando un pequeño carro de compras en php, el problema es que quiero ver si puedo guardar todo el contenido del carrito en ...
  #1 (permalink)  
Antiguo 08/09/2006, 14:40
 
Fecha de Ingreso: septiembre-2006
Mensajes: 18
Antigüedad: 17 años, 7 meses
Puntos: 0
¿ayuda al Guardar contenido de sesion?

Hola, estoy desarrollando un pequeño carro de compras en php, el problema es que quiero ver si puedo guardar todo el contenido del carrito en una tabla, como para poder tener un historial de pedidos y de ahi poder hacer un reporte para despacharlos, el problema es que no se como guardar todo el contenido en una tabla, si alguien sabe de alguna manera de hacerlo porfa ayudenme...

Gracias.
  #2 (permalink)  
Antiguo 08/09/2006, 14:43
Avatar de Bellenger  
Fecha de Ingreso: noviembre-2004
Ubicación: En un lugar del Mundo...
Mensajes: 599
Antigüedad: 19 años, 5 meses
Puntos: 4
Sonrisa Lee este manualito...

hola, darte una orientacion, seria de mucho tiempo creo, pero si puedes revisa este link
http://www.programacion.com/php/articulo/php_mysql/
espero te sirva, es de php4, como aun se sigue utilizando, jeje
nos vemos
  #3 (permalink)  
Antiguo 08/09/2006, 14:53
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Cita:
Iniciado por astaroth250581 Ver Mensaje
Hola, estoy desarrollando un pequeño carro de compras en php, el problema es que quiero ver si puedo guardar todo el contenido del carrito en una tabla, como para poder tener un historial de pedidos y de ahi poder hacer un reporte para despacharlos, el problema es que no se como guardar todo el contenido en una tabla, si alguien sabe de alguna manera de hacerlo porfa ayudenme...

Gracias.
Tu tendrías claro ya como recorrer tu carrito? (supongo que será un array que propagas en una variable de sesión) .. Tienes el código a mano? (indicalo)

Tienes claro ya que tipo de estructura de la tabla deberías tener para almacenar esa información? ..

Es necesario que indiques más información sobre el problema y sobre lo -que no sabes hacer- exactamente .. De momento ves viendo el tutorial que te pasaron el link sobre uso de Msyql+PHP en general.

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #4 (permalink)  
Antiguo 08/09/2006, 14:53
 
Fecha de Ingreso: septiembre-2006
Mensajes: 18
Antigüedad: 17 años, 7 meses
Puntos: 0
Gracias .... esta chevere......
  #5 (permalink)  
Antiguo 09/09/2006, 10:06
 
Fecha de Ingreso: septiembre-2006
Mensajes: 18
Antigüedad: 17 años, 7 meses
Puntos: 0
mas datos

si, es un array el cual se propaga mediante una variable de sesion, tengo el codigo a la mano , pero he tratado de ponerlo pero me dice que tengo que poner 15 mensajes antes de mostrar enlaces, es que tiene los enlaces de paso de sesion.

la estructura de la tabla la cual va a ser almacenada seria mas o menos asi,
id(autonimerico)
id_pedido(autonumerico)
id_cliente(el resto de datos estarian en la base de datos en la tabla clientes)
id_prod(el resto de datos estarian en la base de datos en la tabla productos)
cantidad(seria la cantidad pedida)
valor(precio de venta de los productos, sacado de la tabla productos y almacenado en la variable de sesion)
fecha(la fecha actual del pedido)

es decir quisiera que se genere un registro por cada producto agregado al carro.

si existe alguna otra forma en la cual me pueda funcionar asi o por ejemplo esta otra

id_pedido(autonumerico)
pedido (todo el contenido por ejemplo un solo reg. de todo el pedido por ejemplo que diga 5unidades condones a .25+6unidades cerillos a .10+....)

fecha(fecha del pedido)
id_cliente( que sera utilizado para obtener los datos del cliente reg. desde la tabla clientes. )

puede ser algo asi....

o tambien puede ser que se genere un archivo pdf con el contenido del carro el cual puede ser enviado a una direccion de correo de los despachadores de la tienda y al cliente. o simplemente que se guarde en alguna parte en el servidor y pueda ser visualizada luego por el personal que trabaja en la empresa...

no se algo asi...

si tiene alguien alguna forma de hacer cualquiera de las tres cosas se los agradeceria mucho.
  #6 (permalink)  
Antiguo 11/09/2006, 08:02
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Cita:
pero he tratado de ponerlo pero me dice que tengo que poner 15 mensajes antes de mostrar enlaces,
Pega el código aquí .. resumelo y centra el problema en el manejo de la sesión.

Link's también puedes poner .. los pones sin www o sin http y lo entenderemos (no quedará "clickeable" pero eso es lo de menos).

Sobre tus soluciones. Yo haría:

Tabla Pedidos
id_pedido (autonumerico
id_cliente (relacionado con tu tabla de clientes)
fecha_pedido

Tabla Detalle_Pedido
id_detalle_pedido (autonumerico)
id_pedido ---> (tabla pedidos)
id_prod
valor
cantidad

Primero creas el registro del "Pedido" .. con los datos del cliente y fecha del pedido .. etc. Ahí obtendras tu n° de pedido único y autoincremental. Obtienes ese ID generado (mysql_insert_id()) y luego creas tantos registros como "items" tiene tu array de tu carrito en la tabla "detalle_pedido" donde relacionas el "pedido" con esos items (del detalle).

De esta forma no creas "redundancia" al repetir ese "ID" de cliente ni complicarte generando ese "id pedido" tantas veces como "items" tenga tu carrito (o productos adquiridos en esa compra).

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.

Última edición por Cluster; 11/09/2006 a las 08:21
  #7 (permalink)  
Antiguo 11/09/2006, 12:26
 
Fecha de Ingreso: septiembre-2006
Mensajes: 18
Antigüedad: 17 años, 7 meses
Puntos: 0
lo de la estructura de las tablas esta super bien y me ayudaria para hacer algunas cosas mas...
Cita:
Tabla Pedidos
id_pedido (autonumerico
id_cliente (relacionado con tu tabla de clientes)
fecha_pedido

Tabla Detalle_Pedido
id_detalle_pedido (autonumerico)
id_pedido ---> (tabla pedidos)
id_prod
valor
cantidad
este es el codigo del carro de compras....

catalogo.php
Cita:
<style type="text/css">
<!--
.encabezados{
font-family: Geneva, Arial, Helvetica, sans-serif;
font-size: 24px;
font-weight: bold;
color: #9999FF;
}
-->
</style>
<p align="center" class="encabezados">Selecciona una Categoria<br>Para iniciar la Compra</p>
<p>
<?

function conectar()
{
$base_de_datos = "cybernegocio";
$db_usuario = "root";
$db_password = "";

if (!($link = mysql_connect("localhost", $db_usuario, $db_password)))
{
echo "Error conectando a la base de datos.";
exit();
}
if (!mysql_select_db($base_de_datos, $link))
{
echo "Error seleccionando la base de datos.";
exit();
}
return $link;
}

$db = conectar();


$registros = 10;

if (!$pagina) {
$inicio = 0;
$pagina = 1;
}
else {
$inicio = ($pagina - 1) * $registros;
}


?>
<?
$resultados = mysql_query("SELECT * FROM categorias WHERE categoria<>'----Seleccione Una----' order by categoria");
$total_registros = mysql_num_rows($resultados);
$resultados = mysql_query("SELECT * FROM categorias WHERE categoria<>'----Seleccione Una----' ORDER BY categoria ASC LIMIT $inicio, $registros");
$total_paginas = ceil($total_registros / $registros);

if($total_registros) {

while($row=mysql_fetch_array($resultados)) {
?>
<style type="text/css">
<!--
.Estilo1 {
font-family: Geneva, Arial, Helvetica, sans-serif;
font-weight: bold;
color: #9999FF;
font-size: 24px;
}
-->
</style>

<table width="200" border="0" align="center">
<tr>
<td>
<fieldset><legend font color="blue"><?php echo '<a href="index.php?mostrar=select_cat.php&id='.$row["categoria"].'">'.$row["categoria"].'<br>'; ?></legend>
<table width="407" height="46" border="0" align="center">
<tr>
<td width="96"><img src="imagenes/categorias/<?php echo $row['foto']; ?>" width="96" height="64" /></td>
<td width="295" valign="top"></a>
<?php echo $row['descripcion']; ?> </td>
</tr>
</table>





</fieldset>
</td>
</tr>
</table>



<?

}
if($total_registros) {

echo "<center>";

if(($pagina - 1) > 0) {
echo "<a href='index.php?mostrar=cat_index.php&pagina=".($p agina-1)."'>< Anterior</a> ";
}

for ($i=1; $i<=$total_paginas; $i++){
if ($pagina == $i)
echo "<b>".$pagina."</b> ";
else
echo "<a href='index.php?mostrar=cat_index.php&pagina=$i'>$ i</a> ";
}

if(($pagina + 1)<=$total_paginas) {
echo " <a href='index.php?mostrar=cat_index.php&pagina=".($p agina+1)."'>Siguiente ></a>";
}

echo "</center>";

mysql_free_result($resultados);
}
}

mysql_close($db);?>
  #8 (permalink)  
Antiguo 11/09/2006, 12:29
 
Fecha de Ingreso: septiembre-2006
Mensajes: 18
Antigüedad: 17 años, 7 meses
Puntos: 0
este en cambio es de la categoria seleccionada nos muestra los productos que contiene

Cita:
<p align="center" class="cabeza">Catalogo de Productos</p>
<table width="164" border="0">
<tr>
<td>
<fieldset>
<?php echo $paso ?><a href="index.php?mostrar=vercarrito.php<?php echo SID ?>">Ver el contenido del Carro</a>
</fieldset></td>
</tr>
</table>
<p>




<?
//session_start();
$paso=$_GET["id"];
//ob_start("ob_gzhandler");
//Las funciones ob_start y ob_end_flush te permiten escojer en qué momento enviar el resultado
// de un script al navegador. Si no las utilizamos estamos
//obligados a que nuestra primera línea de código sea session_start() u obtendremos un error

//conectamos a la base de datos
function conectar()
{
$base_de_datos = "cybernegocio";
$db_usuario = "root";
$db_password = "";

if (!($link = mysql_connect("localhost", $db_usuario, $db_password)))
{
echo "Error conectando a la base de datos.";
exit();
}
if (!mysql_select_db($base_de_datos, $link))
{
echo "Error seleccionando la base de datos.";
exit();
}
return $link;
}
//rescatamos los valores guardados en la variable de sesión (si es que hay alguno) y los
//asignamos a $carro
$carro=$_SESSION['carro'];
//y hacemos la consulta

$db = conectar();


$registros = 10;

if (!$pagina) {
$inicio = 0;
$pagina = 1;
}
else {
$inicio = ($pagina - 1) * $registros;
}


?>
<?
$resultados = mysql_query("SELECT * FROM productos WHERE categoria='$paso' order by producto");
$total_registros = mysql_num_rows($resultados);
$resultados = mysql_query("SELECT * FROM productos WHERE categoria='$paso' ORDER BY producto ASC LIMIT $inicio, $registros");
$total_paginas = ceil($total_registros / $registros);

if($total_registros) {

while($row=mysql_fetch_array($resultados)) {
?>

<table width="454" border="0" align="center">
<tr>
<td width="600" height="0"> <fieldset style=" border-color: #CCCCCC"><legend><?php echo $row['id_prod'] ?>-<?php echo $row['producto'] ?></legend>
<table width="448" height="0" border="0" align="center">
<tr>
<td width="94" valign="top"><?php echo '<img src="imagenes/productos/'.$row['foto'].'" width="95" height="60"></td>';?> </td>
<td width="76" valign="top"><div align="right" class="legal">Descripcion : </div></td>
<td colspan="3" valign="top" class="promo"><?php echo $row['descripcion'] ?></td>
</tr>
<tr>
<td valign="top"><form name="form1" method="post" action="index.php?mostrar=agregacar.php<?php echo SID ?>&id=<?php echo $row['id_prod']; ?>">
<div align="center">
<input type="submit" name="Submit" value="Comprar">
</div>
</form></td>
<td width="76" valign="top"><div align="right"><span class="legal">Precio :</span></div></td>
<td width="52" valign="top" class="promo"><?php echo $row['precio'] ?></td>
<td width="102" valign="top" class="promo"><div align="right"><span class="legal">Disponibilidad : </span></div></td>
<td width="102" valign="top" class="promo"><?php echo $row['estado'] ?>
<div align="left"></div></td>
</tr>
</table>
</fieldset>

</td>
</tr>
</table>
<?php
ob_end_flush();
}?>

<?


} else {
echo "<font color='#663300'>(No se ha encontrado resultados para esta categoria.)</font>";
}
?>

<?


if($total_registros) {

echo "<center>";

if(($pagina - 1) > 0) {
echo "<a href='index.php?mostrar=prod_index.php&pagina=".($ pagina-1)."'>< Anterior</a> ";
}

for ($i=1; $i<=$total_paginas; $i++){
if ($pagina == $i)
echo "<b>".$pagina."</b> ";
else
echo "<a href='index.php?mostrar=prod_index.php&pagina=$i'> $i</a> ";
}

if(($pagina + 1)<=$total_paginas) {
echo " <a href='index.php?mostrar=prod_index.php&pagina=".($ pagina+1)."'>Siguiente ></a>";
}

echo "</center>";

mysql_free_result($resultados);
}
?>
<?


mysql_close($db);?>
  #9 (permalink)  
Antiguo 11/09/2006, 12:39
 
Fecha de Ingreso: septiembre-2006
Mensajes: 18
Antigüedad: 17 años, 7 meses
Puntos: 0
ahora esta el codigo de agregar al carro

agregacar.php
Cita:
<?php
session_start();
//con session_start() creamos la sesión si no existe o la retomamos si ya ha sido creada
extract($_REQUEST);
//la función extract toma las claves de una matriz asoiativa y las convierte en nombres de variable,
//asignándoles a esas variables valores iguales a los que tenía asociados en la matriz. Es decir, convierte a $_GET['id'] en $id,
//sin que tengamos que tomarnos el trabajo de escribir $id=$_GET['ID'];
mysql_connect("localhost","root","");
mysql_select_db("cybernegocio");
//incluímos la conexión a nuestra base de datos
if(!$cantidad){$cantidad=1;}
//Como también vamos a usar este archivo para actualizar las cantidades,
//hacemos que cuando la misma no esté indicada sea igual a 1
$qry=mysql_query("select * from productos where id_prod='".$id."'");
$row=mysql_fetch_array($qry);
//Si ya hemos introducido algún producto en el carro lo tendremos guardado temporalmente
//en el array superglobal $_SESSION['carro'], de manera que rescatamos los valores de dicho array
//y se los asignamos a la variable $carro
$carro=$_SESSION['carro'];
//Ahora introducimos el nuevo producto en la matriz $carro, utilizando como índice el id del producto
//en cuestión, encriptado con md5. Utilizamos md5 porque genera un valor alfanumérico que luego,
//cuando busquemos un producto en particular dentro de la matriz, no podrá ser confundido con la posición
//que ocupa dentro de dicha matriz, como podría ocurrir si fuera sólo numérico.
//Cabe aclarar que si el producto ya había sido agregado antes, los nuevos valores que le asignemos reemplazarán
//a los viejos.
//Al mismo tiempo, y no porque sea estrictamente necesario sino a modo de ejemplo, guardamos más de un valor
//en la variable $carro, valiéndonos de nuevo de la herramienta array.
$carro[md5($id)]=array('identificador'=>md5($id),'cantidad'=>$cant idad,'producto'=>$row['producto'],'precio'=>$row['precio'],'foto'=>$row['foto'],'id_prod'=>$id);
//Ahora dentro de la sesión ($_SESSION['carro']) tenemos sólo los valores que teníamos (si es que teníamos alguno) antes de ingresar
//a esta página y en la variable $carro tenemos esos mismos valores más el que acabamos de sumar. De manera que
//tenemos que actualizar (reemplazar) la variable de sesión por la variable $carro.
$_SESSION['carro']=$carro;
//Y volvemos a nuestro catálogo de artículos. La cadena SID representa al identificador de la sesión, que, dependiendo
//de la configuración del servidor y de si el usuario tiene o no activadas las cookies puede no ser necesario pasarla por la url.
//Pero para que nuestro carro funcione, independientemente de esos factores, conviene escribirla siempre.
?>
<script>window.location.href='index.php?mostrar=ve rcarrito.php';</script>
aqui esta el del borrador del carrito
borrarcar.php
Cita:
<?php
session_start();
//con session_start() creamos la sesión si no existe o la retomamos si ya ha sido creada
extract($_GET);
//Como antes, usamos extract() por comodidad, pero podemos no hacerlo tranquilamente
$carro=$_SESSION['carro'];
//Asignamos a la variable $carro los valores guardados en la sessión
unset($carro[md5($id)]);
//la función unset borra el elemento de un array que le pasemos por parámetro. En este
//caso la usamos para borrar el elemento cuyo id le pasemos a la página por la url
$_SESSION['carro']=$carro;
//Finalmente, actualizamos la sessión, como hicimos cuando agregamos un producto y volvemos al catálogo
//header("Location:index.php?mostrar=catalogo.php".S ID);
?>
<!-- este script nos permite redireccionarnos a la pagina anterior -->
<script>
window.location.href='index.php?mostrar=vercarrito .php';
</script>
este esl de ver el contenido del carrito
vercarrito.php

Cita:
<?php
session_start();

?>
<title>PRODUCTOS AGREGADOS AL CARRITO</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<style type="text/css">
<!--
.tit {
font-family: Verdana, Arial, Helvetica, sans-serif;
font-size: 9px;
color: #FFFFFF;
}
.prod {
font-family: Verdana, Arial, Helvetica, sans-serif;
font-size: 9px;
color: #333333;
}
h1 {
font-family: Verdana, Arial, Helvetica, sans-serif;
font-size: 20px;
color: #990000;
}
.Estilo1 {
color: #000000;
font-weight: bold;
}
.Estilo2 {color: #FFFFFF}
.Estilo3 {color: #FFFFFF; font-weight: bold; }
-->
</style>
</head>
<body>
<h1 align="center">Carrito</h1>
<?php
if($carro){
?>
<table width="497" border="0" cellspacing="0" cellpadding="0" align="center">
<tr bgcolor="#000000" class="tit">
<td width="77"><div align="center" class="Estilo1 Estilo2">Foto</div></td>
<td width="174"><div align="center" class="Estilo3">Producto</div></td>
<td width="66"><div align="center" class="Estilo3">Precio</div></td>
<td width="72" align="center"><div align="center" class="Estilo3">Cantidad </div></td>
<td width="54" align="center"><div align="center" class="Estilo3">Borrar</div></td>
<td width="54" align="center"><div align="center" class="Estilo3">Actualizar</div></td>
</tr>
<?php
$color=array("#ffffff","#F0F0F0");
$contador=0;
$suma=0;
foreach($carro as $k => $v){
$subto=$v['cantidad']*$v['precio'];
$suma=$suma+$subto;
$contador++;
?>
<form name="a<?php echo $v['identificador'] ?>" method="post" action="index.php?mostrar=agregacar.php<?php echo SID ?>" id="a<?php echo $v['identificador'] ?>">
<tr bgcolor="<?php echo $color[$contador%2]; ?>" class='prod'>
<td align="center" valign="middle"><?php echo '<img src="imagenes/productos/'.$v['foto'].'" width="60" height="40">';?></td>
<td valign="top"><?php echo $v['id_prod'] ?><br>
<?php echo $v['producto'] ?></td>
<td align="center"><?php echo $v['precio'] ?>
<div align="center"></div></td>
<td align="center"> <div align="center">
<input name="cantidad" type="text" id="cantidad" value="<?php echo $v['cantidad'] ?>" size="4">
<input name="id" type="hidden" id="id" value="<?php echo $v['id_prod'] ?>">
</div></td>
<td align="center"><a href="index.php?mostrar=borracar.php<?php echo SID ?>&id=<?php echo $v['id_prod'] ?>"><img src="imagenes/carrito/trash.gif" width="12" height="14" border="0"></a></td>
<td align="center" bgcolor="<?php echo $color[$contador%2]; ?>"><input name="imageField" type="image" src="imagenes/carrito/actualizar.gif" width="20" height="20" border="0"></td>
</tr></form>
<?php }?>
</table>
<div align="center"><span class="prod">Total de Artículos: <?php echo count($carro); ?></span>
</div><br>
<div align="center"><span class="prod">Total: $<?php echo number_format($suma,2); ?></span></div>
<div align="center" class="prod">

<A HREF="" onClick="abrirVentana('$VENTANA);">Imprimir</A>



</div>
<div align="center"><span class="prod">Continuar la selección de productos</span> <a href="index.php"><img src="imagenes/carrito/continuar.gif" width="13" height="13" border="0" align="absmiddle"></a>
<a href="index.php?mostrar=regpago.php<?php echo SID;?>&costo=<?php echo number_format($suma,2); ?>"><img src="imagenes/carrito/finalizarcompra.gif" width="135" height="16" border="0" align="absmiddle"></a>
</div>
<?php }else{ ?>
<p align="center"> <span class="prod">No hay productos seleccionados</span> <a href="index.php"><img src="imagenes/carrito/continuar.gif" width="13" height="13" border="0"></a>
<?php }?>
</p>
</body>
</html>
  #10 (permalink)  
Antiguo 11/09/2006, 12:47
 
Fecha de Ingreso: septiembre-2006
Mensajes: 18
Antigüedad: 17 años, 7 meses
Puntos: 0
ahora el problema que tengo es el siguiente, si se pueden fijar el carrito al momento de registrar el pago genera un mini reporte de los productos agregados al carro, el problema es que quisiera esos datos guardarlos en una tabla, pero no se como hacer que al momento de agregar al carro o realizar el pago se vayan creando esos registros.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:11.