Foros del Web » Programando para Internet » PHP »

ayuda con este carro

Estas en el tema de ayuda con este carro en el foro de PHP en Foros del Web. Hola chicos, bajé este script ya ni me acuredo donde, creo que de algo que leí en el foro y estoy plantada en dos situaciones. ...
  #1 (permalink)  
Antiguo 15/11/2005, 16:10
 
Fecha de Ingreso: noviembre-2004
Mensajes: 82
Antigüedad: 19 años, 5 meses
Puntos: 0
ayuda con este carro

Hola chicos, bajé este script ya ni me acuredo donde, creo que de algo que leí en el foro y estoy plantada en dos situaciones. 1º

en la index tengo unos prductos x pero quisiera tomarlos de una bd.
Código PHP:
<?
include("lib_carrito.php");
?>

<html>
<head>
    <title>Trabajando con el carrito</title>
</head>

<body>

<a href="mete_producto.php?id=12&nombre=silla+modelo+jupiter&precio=80">Silla modelo jupiter 80 euros</a>
<br>
<br>
<a href="mete_producto.php?id=16&nombre=mesa+camilla+oferta&precio=29">Mesa camilla en oferta 29 euros</a>
<br>
<br>
<a href="mete_producto.php?id=18&nombre=Silla+oficina&precio=102">Silla oficina 102 euros</a>
<br>
<br>
<a href="mete_producto.php?id=98&nombre=Aparador+cocina+blanco&precio=200">Aparador cocina blanco 200 euros</a>
<br>
<br>
<br>
- <a href="ver_carrito.php">Ver carrito</a>
</body>
</html>
y después cuando lo cargo va todo bien, pero ahí está lo más dificil para una inexperta como yo.

como hago para que esto tenga una opción enviar y que me llegue a mi mail con los datos del que hace lla orden de compra y obvio, los productos seleccionados.

Código PHP:
<?
include("lib_carrito.php");
?>

<html>
<head>
    <title>Introduce Producto</title>
</head>

<body>

<?
$_SESSION
["ocarrito"]->imprime_carrito();
?>
<br>
<br>
<a href="index.php">Volver</a>


</body>
</html>
creo que si no me equivoco y algo tambien lei, esos datos estan guardados en la sesion ocarrito, como hago para introducirlas en un formulario????
  #2 (permalink)  
Antiguo 16/11/2005, 15:51
 
Fecha de Ingreso: mayo-2004
Mensajes: 903
Antigüedad: 19 años, 11 meses
Puntos: 4
hola martina y atodos, casualmente baké ese script y también quedé barado en tu problema, es en si muy básico, pero todos los que visto están igual, nadie termina la parte de enviarlo por mail como nota de pedido o por una pasarela para realizar la compra, igual que extraer los productos de la bd. estoy en eso pero no logro hacerlo.
cuando me salga con gusto te envío el código.
Y si alguien puede clarificar como terminarlo estaría de película, jaja. saludos!!
  #3 (permalink)  
Antiguo 17/11/2005, 06:18
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Si hablan en su código de una tal "lib_carrito.php" sin ver que hace dicha librería (objeto al parecer) ni como se usa (según cierta documentación que debería acompañar desde la web oficial de quien la desarrolló) es complicado dar un "fin feliz" a su película.


Sólo les puedo recomendar que se fijen bien en lo que hace dicha classe y en sus métodos . .por ahí se vé un tal "imprime_carrito()" que supongo que se debe encargar de extraer los datos del carrito para su presentación (en HTML) .. ahora UDs, vean como quieren generar su "e-mail" para genear un pedido o llevar esos datos a una BD .. Tan sólo es VER ese código y ver como gestiona la obtención de esos datos .. en función de eso ya pueden "replicar" ese método (creando otro) para crear su método "guardar en BD" .. o "enviar por e-mail" o lo que quieran. (De hecho si gestionan los datos sobre una BD .. lo lógico sería que sólo generasen ese método para almacenar los datos en la BD y para envios de e-mail y demás .. consultar a esa BD (donde se puede generar n° de orden de pedido secuenciales y únicas entre otras cosas para su seguimiento ...).

Un saludo,
  #4 (permalink)  
Antiguo 17/11/2005, 07:33
 
Fecha de Ingreso: mayo-2004
Mensajes: 903
Antigüedad: 19 años, 11 meses
Puntos: 4
Hola martina y cluster al menos yo tengo esta librería
Código PHP:
<?
class carrito {
    
//atributos de la clase
       
var $num_productos;
       var 
$array_id_prod;
       var 
$array_nombre_prod;
       var 
$array_precio_prod;

    
//constructor. Realiza las tareas de inicializar los objetos cuando se instancian
    //inicializa el numero de productos a 0
    
function carrito () {
           
$this->num_productos=0;
    }
    
    
//Introduce un producto en el carrito. Recibe los datos del producto
    //Se encarga de introducir los datos en los arrays del objeto carrito
    //luego aumenta en 1 el numero de productos
    
function introduce_producto($id_prod,$nombre_prod,$precio_prod){
        
$this->array_id_prod[$this->num_productos]=$id_prod;
        
$this->array_nombre_prod[$this->num_productos]=$nombre_prod;
        
$this->array_precio_prod[$this->num_productos]=$precio_prod;
        
$this->num_productos++;
    }

    
//Muestra el contenido del carrito de la compra
    //ademas pone los enlaces para eliminar un producto del carrito
    
function imprime_carrito(){
        
$suma 0;
        echo 
'<table border=1 cellpadding="3">
              <tr>
                <td><b>Nombre producto</b></td>
                <td><b>Precio</b></td>
                <td>&nbsp;</td>
              </tr>'
;
        for (
$i=0;$i<$this->num_productos;$i++){
            if(
$this->array_id_prod[$i]!=0){
                echo 
'<tr>';
                echo 
"<td>" $this->array_nombre_prod[$i] . "</td>";
                echo 
"<td>" $this->array_precio_prod[$i] . "</td>";
                echo 
"<td><a href='eliminar_producto.php?linea=$i'>Eliminar producto</td>";
                echo 
'</tr>';
                
$suma += $this->array_precio_prod[$i];
            }
        }
        
//muestro el total
        
echo "<tr><td><b>TOTAL:</b></td><td> <b>$suma</b></td><td>&nbsp;</td></tr>";
        
//total más IVA
        
echo "<tr><td><b>IVA (21%):</b></td><td> <b>" $suma 1.21 "</b></td><td>&nbsp;</td></tr>";
        echo 
"</table>";
    }
    
    
//elimina un producto del carrito. recibe la linea del carrito que debe eliminar
    //no lo elimina realmente, simplemente pone a cero el id, para saber que esta en estado retirado
    
function elimina_producto($linea){
        
$this->array_id_prod[$linea]=0;
    }

//inicio la sesión
session_start();
//si no esta creado el objeto carrito en la sesion, lo creo
if (!isset($_SESSION["ocarrito"])){
    
$_SESSION["ocarrito"] = new carrito();
}
?>
y sinceramente no encuentro la forma de enviar por mail lo "almacenado en la sesión" estoy desorientado en si hay que hacer uso de la funcion mail() en un script aparte o que?
  #5 (permalink)  
Antiguo 17/11/2005, 08:32
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
En tu caso es que usas un objeto .. (el cual se propaga (sus datos) vía sesión para ir añadiendo productos) así que para leer lo que tenga tu carrito y así poder componer un e-mail tendrás que usar SUS métodos o crearlos (por qué no los tiene).

Este método ya hace casi todo lo que necesitas:

Código PHP:
 function imprime_carrito(){ 
        
$suma 0
        echo 
'<table border=1 cellpadding="3"> 
              <tr> 
                <td><b>Nombre producto</b></td> 
                <td><b>Precio</b></td> 
                <td>&nbsp;</td> 
              </tr>'

        for (
$i=0;$i<$this->num_productos;$i++){ 
            if(
$this->array_id_prod[$i]!=0){ 
                echo 
'<tr>'
                echo 
"<td>" $this->array_nombre_prod[$i] . "</td>"
                echo 
"<td>" $this->array_precio_prod[$i] . "</td>"
                echo 
"<td><a href='eliminar_producto.php?linea=$i'>Eliminar producto</td>"
                echo 
'</tr>'
                
$suma += $this->array_precio_prod[$i]; 
            } 
        } 
        
//muestro el total 
        
echo "<tr><td><b>TOTAL:</b></td><td> <b>$suma</b></td><td>&nbsp;</td></tr>"
        
//total más IVA 
        
echo "<tr><td><b>IVA (21%):</b></td><td> <b>" $suma 1.21 "</b></td><td>&nbsp;</td></tr>"
        echo 
"</table>"
    } 
El detalle es que directamente genera la salida (hace un "echo") .. si en lugar de eso .. acumulas todo su salida en una variable podrías usar ese mismo código para hacer dos cosas: enviar un e-mail (en HTML justo como lo ves en "pantalla" ahora) y para verlo en tu navegador (en "pantalla").

¿entiendes lo que hace ese método? .. trabaja todo con arrays (independientes paralelos para almacenar sus datos de tus productos). Lamentablemente es "Programación orientada a objetos" .. la cual para aplicarla en PHP primero tendrías que saber hacer de foma "clásica" lo que te propongas (a base de funciones sólo por ejemplo). De hecho esta classe tiene poco más que un "encapsulamiento" de esas pocas funciones (métodos) sin embargo cumple su función pero por lo mismo se hace complicado "extenderla" para crear nuevas funcionalidades así como está.

Un saludo,
  #6 (permalink)  
Antiguo 17/11/2005, 08:50
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Lo que te he comentado anteriormente sería:
(disculpen separar los mensajes .. pero se me fué la LUZ! cuando lo tenía ya casi todo escrito!!!, me dió miedo!, no tengo UPS'ssss ;(


Aprovechando tu método imprime_carrito() que lo que hace en el fondo es generar HTML .. (leyendo los datos del objeto que los gestiona):

Código PHP:
function _genera_carrito(){ 
        
$suma 0
        
$carrito '<table border=1 cellpadding="3"> 
              <tr> 
                <td><b>Nombre producto</b></td> 
                <td><b>Precio</b></td> 
                <td>&nbsp;</td> 
              </tr>'

        for (
$i=0;$i<$this->num_productos;$i++){ 
            if(
$this->array_id_prod[$i]!=0){ 
                
$carrito .= '<tr>'
                
$carrito .= "<td>" $this->array_nombre_prod[$i] . "</td>"
                
$carrito .= "<td>" $this->array_precio_prod[$i] . "</td>"
                
$carrito .= "<td><a href='eliminar_producto.php?linea=$i'>Eliminar producto</td>"
                
$carrito .= '</tr>'
                
$suma += $this->array_precio_prod[$i]; 
            } 
        } 
        
//muestro el total 
        
$carrito .= "<tr><td><b>TOTAL:</b></td><td> <b>$suma</b></td><td>&nbsp;</td></tr>"
        
//total más IVA 
        
$carrito .= "<tr><td><b>IVA (21%):</b></td><td> <b>" $suma 1.21 "</b></td><td>&nbsp;</td></tr>"
        
$carrito .= "</table>"

   
// devolver el resultado al llamarse.
   
return $carrito;
    } 
De esta forma "separamos" un poco la "presentación de la lógica" (no del todo pero algo es algo por el momento y a la rápida).

Así .. puedo crear un método como el que tenías ya:

Código PHP:
function imprime_carrito(){
   echo 
$this->_genera_carrito();

Y bajo la misma filosofía podemos generar otro método para enviar el e-mail (en formato HTML):
Código PHP:
function enviar_email($de,$para,$asunto){

// Componer el cuerpo del mensaje .. añade tus "cabeceras y pié" del mismo si corresponde + lo que el método "_genera_carrito()" ya hace por sí solo.
$msg "<b>Solicitud Cotización</b><br><br>";
$msg .= $this->_genera_carrito()."<br><br>";
$msg .= "Fecha solicitud: ".date ("d/m/Y H:i:s")."<br>";
$msg .= "Desde IP:".$_SERVER['REMOTE_ADDR']."<br>";

// Cabeceras que definen que el e-mail es de formato HTML.
$cabeceras  'MIME-Version: 1.0' "\r\n";
$cabeceras .= 'Content-type: text/html; charset=iso-8859-1' "\r\n";

$cabeceras .= 'From: '$de "\r\n";

mail($para,$asunto,$msg,$cabeceras);

Y usas estos métodos como usabas los otros (sobre todo el de imprime_carrito() por qué tras el cambio "interno" hará lo mismo que hacía antes).

Código PHP:
$_SESSION["ocarrito"]->enviar_email("[email protected]","[email protected]","Solicitud cotización desde la web"); 
El método nuevo "enviar_email()" requiere de los parámetros que ahí ves descritos. Puedes trabajar más el método ..por ejemplo para enviar una copia al solicitante y otra a quien lo tenga que atender .. etc .. etc ..

Por su puesto faltan muchas validaciones (sobre todo con respecto al envio del e-mail .. ) entre otras cosas.

Un saludo,

PD: (pensamiento interno) me parece que ya esto lo he hecho alguna vez más en el foro .. ?¡?'

Última edición por Cluster; 29/11/2005 a las 13:04
  #7 (permalink)  
Antiguo 17/11/2005, 08:59
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Ups .. se me pasó un detalle.

El método "nuevo" _genera_carrito() tiene un link ahí para borrar el producto .. como veras a la hora de enviar por e-mail dicha información ese link no corresponde. Puedes controlar este evento secillamente: usa un parámetro que pasar por tu función "true" -> genera el link de borrado .. "false" no imprimirlo y aplica un IF() en consecuencia en esa linea.

Un saludo,
  #8 (permalink)  
Antiguo 17/11/2005, 12:35
 
Fecha de Ingreso: mayo-2004
Mensajes: 903
Antigüedad: 19 años, 11 meses
Puntos: 4
Gracias cluster, voy a ponerme a ver como me sale, sos un genio realmente, y sobre todo admiro tu buena voluntad y predisposición.
  #9 (permalink)  
Antiguo 28/11/2005, 06:43
 
Fecha de Ingreso: septiembre-2005
Mensajes: 27
Antigüedad: 18 años, 7 meses
Puntos: 0
wenassss
os explico, me he metido en un embolado al comprometerme a hacer una web con carrito de compra sin saber hacerla . Ahora ni me puedo echar atrás ni puedo pedir tiempo porque me están metiendo una prisa que paqué.

Gracias a maestrosdelweb tengo este código y me falta saber lo que a todos, cómo enviarlo. Me da vergüenza preguntarlo, pero es lo que hay.

Cluster -o cualquier otro que pueda echarme un cable-, lo que pretendo es poner tres campos (email del cliente, teléfono y notas) en la página donde se muestra el carrito junto con un botón de enviar. La gente ve el carro, introduce sus datos y envia. Supongo que debe ser una gilipollez, pero llevo ya un rato buscando y no se cómo hacerlo. (meter aunque sea el email del cliente en $_SESSION["ocarrito"]->enviar_email("[email protected]","[email protected]","S olicitud cotización desde la web"); antes de enviar)

Todos los códigos son idénticos a los que habeis puesto por ahí. Como viene siendo habitual, me urge un poquito, la tengo que tener subida el miércoles

wenga muchas gracias y a ver si logro poner esto en linea y ya sin prisas entender como funciona
  #10 (permalink)  
Antiguo 28/11/2005, 07:38
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Usa variables .. De tu formulario la envias al script que envia tu e-mail:

Código PHP:
$_SESSION["ocarrito"]->enviar_email("[email protected]",$_POST['para'],"Solicitud cotización desde la web"); 
Fijate que en el fondo "enviar_email()" es una función .. intenta comprenderla. Más no puedo hacer .. si tu te manejas con formularios y conoces como recoger esos datos en tu script de proceso .. se trata sólo de pasarle esos datos a ese método.

Un saludo,
  #11 (permalink)  
Antiguo 28/11/2005, 09:30
 
Fecha de Ingreso: septiembre-2005
Mensajes: 27
Antigüedad: 18 años, 7 meses
Puntos: 0
gracias por la rapidez cluster
estoy en la parra. que mala es la ignorancia por favor. Muchas gracias, arreglando la función ya funciona. [modo vergüenza]encima no sabía como funcionaban los formularios [/modo vergüenza]
  #12 (permalink)  
Antiguo 28/11/2005, 13:04
 
Fecha de Ingreso: febrero-2004
Ubicación: España. Madrid
Mensajes: 454
Antigüedad: 20 años, 2 meses
Puntos: 0
ups...... pues a ver si yo soy capaz de entenderlo...

$_SESSION["ocarrito"]->enviar_email("[email protected]","[email protected]","S olicitud cotización desde la web");
el pq de $_SESSION["ocarrito"]->enviar_email

saludos
  #13 (permalink)  
Antiguo 28/11/2005, 13:11
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 cyborg
ups...... pues a ver si yo soy capaz de entenderlo...

$_SESSION["ocarrito"]->enviar_email("[email protected]","[email protected]","S olicitud cotización desde la web");
el pq de $_SESSION["ocarrito"]->enviar_email

saludos
Cyborg ..

Estas trabajando con un objeto (->) .. "enviar_email(...parametros...)" es un método de ese objeto.

Si te confunde $_SESSION['ocarrito'] .. hazte la idea que hizieses:

Código PHP:
$carrito=new carrito();
$carrito->enviar_email($de,$para,$asunto); 
Un saludo,
  #14 (permalink)  
Antiguo 28/11/2005, 17:01
 
Fecha de Ingreso: septiembre-2005
Mensajes: 27
Antigüedad: 18 años, 7 meses
Puntos: 0
buenas otra vez, ya tengo esto casi a punto (!!). Estoy ya con pijaditas, a lo mejor esto no se puede, por intentar que no quede.
Qué tendría que poner donde pone XXXXX para que no me llegasen los mails de pedido con remitente [email protected]? (la guinda sería que el remitente fuese el email del cliente (pasado desde compra.php como "email")

pd, si se puede poner "Gracias por confiar en nosotros, [NOMBRE] ya sería la ostia (el nombre lo paso aqui como "nombre")

wenga muchas gracias, parece que esto tira para adelante

edit, ya lo he conseguidooooooo. gracias por vuestra ayuda

Código:
<?
include("lib_carrito.php");
?>

<html>
<head>
	<title>Envio realizado correctamente</title>
    <style type="text/css">
<!--
.style1 {
	font-family: "Comic Sans MS";

	font-size: 14px;
}
-->
    </style>
</head>

<body>

<div align="center">
  <p>
    <?
$_SESSION["ocarrito"]->enviar_email("XXXXXXX","[email protected]","Pedido desde la web"); 
?>
    <br>
  </p>
  <p class="style1">Gracias por confiar en nosotros, tu envio se ha realizado correctamente, en breve recibiras respuesta</p>
  <p>&nbsp;</p>
  <p><br>
    <a href="index.php">Ir al inicio</a>
    
    
      </p>
</div>
</body>
</html>

Última edición por epiky; 29/11/2005 a las 04:56
  #15 (permalink)  
Antiguo 29/11/2005, 01:18
 
Fecha de Ingreso: febrero-2004
Ubicación: España. Madrid
Mensajes: 454
Antigüedad: 20 años, 2 meses
Puntos: 0
Cita:
Iniciado por Cluster
Cyborg ..

Estas trabajando con un objeto (->) .. "enviar_email(...parametros...)" es un método de ese objeto.

Si te confunde $_SESSION['ocarrito'] .. hazte la idea que hizieses:

Código PHP:
$carrito=new carrito();
$carrito->enviar_email($de,$para,$asunto); 
Un saludo,
gracias
me temo que no he llegado a la parte de programacion orientada a objetos de php

Saludos y gracias, nuevamente
  #16 (permalink)  
Antiguo 29/11/2005, 12:09
 
Fecha de Ingreso: septiembre-2005
Mensajes: 27
Antigüedad: 18 años, 7 meses
Puntos: 0
Una última cosa (aparte de un problema con los popups que están tramitando en el foro correspondiente)
Si quiero que el cliente reciba una copia del email que me ha llegado a mi, como lo haría? he echo mil pruebas y no sale ni una. Me gustaría utilizar otra función (envia_copia) que ya he copiado/modificado en lib_carrito.php
un saludo y zankuis
  #17 (permalink)  
Antiguo 29/11/2005, 13:04
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 epiky
Una última cosa (aparte de un problema con los popups que están tramitando en el foro correspondiente)
Si quiero que el cliente reciba una copia del email que me ha llegado a mi, como lo haría? he echo mil pruebas y no sale ni una. Me gustaría utilizar otra función (envia_copia) que ya he copiado/modificado en lib_carrito.php
un saludo y zankuis
No crees otra función (mejor dicho "método") .. usa el mismo enviar_mail() pero pasale algún parametro tipo "flag" algo tipo:

$_SESSION["ocarrito"]->enviar_mail($de,$para,$asundo);

y en dicho método .. haces algo tipo:

Código PHP:
function enviar_email($de,$para,$asunto,$copia=true){ 
// $copia=true en una función significa que ese será el valor por defecto si no indicas uno expresamente (true o false en este caso).

Código PHP:
if($copia){
// generas las cabeceras para enviar una copia en el mail.
$cabeceras .= 'CC: '$para "\r\n"

Creo que son esas las cabeceras .. de todas formas revisa la documentación oficial de mail() y sus ejemplos:

http://www.php.net/manual/en/function.mail.php

Un saludo,
  #18 (permalink)  
Antiguo 29/11/2005, 13:17
 
Fecha de Ingreso: septiembre-2005
Mensajes: 27
Antigüedad: 18 años, 7 meses
Puntos: 0
no sabía eso que decías del CC (estoy ya revisando la doc oficial)

Respecto al tema de utilizar el mismo "método" ;)... Había creado-modificado otro para que al cliente le llegasen otros datos, como los bancarios, la forma de realizar el pago... todo eso. Pero siguiendo la linea que dices, de redactar el mensaje con if's, me vale.
Muchas gracias!

edit, escribo antes de pensar, nose ni lo que he dicho pero no funcionaría.
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.
Tema Cerrado




La zona horaria es GMT -6. Ahora son las 10:16.