Foros del Web » Programando para Internet » PHP »

PHP OO Carrito de compras básico

Estas en el tema de Carrito de compras básico en el foro de PHP en Foros del Web. Hola gente, como estan? Necesito una mano con esto. Se me pidio hacer un carro de compras en PHP simple, sin MYSQL ni sesiones para ...
  #1 (permalink)  
Antiguo 07/05/2011, 13:17
 
Fecha de Ingreso: mayo-2011
Mensajes: 5
Antigüedad: 12 años, 11 meses
Puntos: 0
Carrito de compras básico

Hola gente, como estan? Necesito una mano con esto.

Se me pidio hacer un carro de compras en PHP simple, sin MYSQL ni sesiones para un final de una materia de la facultad. La cosa es que de php tuvimos una clase solamente, donde vimos lo mas basico de todo y encima mal explicado... hace un tiempo ya que estoy tratando de aprender solo (leyendo del foro) pero me di cuenta que no me da.

Como les dije, no se me permite utilizar bases de datos, sesiones ni cookies; tengo que reemplazar eso con archivos o variables de sesion ocultas. Mi idea del carrito es bastante simple, es un formulario con un codigo de producto y una casilla para ingresar la cantidad deseada del producto.

Lo que puntualmente necesito saber es como crear un array que se vaya llenando con el codigo de producto y la cantidad del mismo a medida que el usuario va agregando cosas al carrito, para luego poder mostrarlo en pantalla y permitir hacer un check out.

Este seria el formulario para cada uno de los productos:
Código HTML:
<form action="agregar.php" method="post">
<input type="hidden" name="Producto_1" value="P1">
<Cantidad <input type="text" name="CP1">
<input type="submit" name="Agregar">
</form> 
La idea es con agregar.php informar que se agrego el producto al carrito y actualizar el array de productos y cantidades.


Código PHP:
echo "Se agregaron" $_POST['CP1'] . "unidades al carrito"
Espero me puedan ayudar, estoy perdidisimo. Gracias!

Última edición por underbeats; 07/05/2011 a las 13:24
  #2 (permalink)  
Antiguo 07/05/2011, 13:26
(Desactivado)
 
Fecha de Ingreso: abril-2011
Mensajes: 153
Antigüedad: 13 años
Puntos: 236
Respuesta: Carrito de compras básico

Hola,
Al menos muestra el código fuente html de tu formulario para el carrito de compras.
Si nó, no podemos ayudarte.
Saludos
  #3 (permalink)  
Antiguo 07/05/2011, 13:32
 
Fecha de Ingreso: mayo-2011
Mensajes: 5
Antigüedad: 12 años, 11 meses
Puntos: 0
Respuesta: Carrito de compras básico

Ahi agregue lo que seria el formulario para cada producto individual.
  #4 (permalink)  
Antiguo 07/05/2011, 14:00
 
Fecha de Ingreso: mayo-2011
Mensajes: 5
Antigüedad: 12 años, 11 meses
Puntos: 0
Respuesta: Carrito de compras básico

Gente esta bien esto? Envio cantidad de producto como "Cantidad" y el codigo de producto como "ID", luego con agregar.php creo un archivo donde almaceno esos valores.

Código HTML:
<form action="agregar.php" method="post">
<input type="hidden" name="ID" value="Producto_1">
Cantidad <input type="text" name="Cantidad">
<input type="submit" name="Agregar">
</form> 

agregar.php
Código PHP:
<?php
  $ar
=fopen("Productos.txt","a") or die("Problemas en la creacion");
  
fputs($ar,$_REQUEST['ID']);
  
fputs($ar," ");
  
fputs($ar,$_REQUEST['Cantidad']);
  
fputs($ar,"\n");
  
fclose($ar);
  echo 
"Los datos se cargaron correctamente.";
?>
  #5 (permalink)  
Antiguo 07/05/2011, 14:07
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Carrito de compras básico

Teoricamente esta bien, el problema es que para todos los usuarios del sitio estaras creando el mismo archivo de texto y si no puedes usar ni sesiones ni cookies, lo veo muy complicado de resolver.
__________________
- León, Guanajuato
- GV-Foto
  #6 (permalink)  
Antiguo 07/05/2011, 18:10
(Desactivado)
 
Fecha de Ingreso: abril-2011
Mensajes: 153
Antigüedad: 13 años
Puntos: 236
Respuesta: Carrito de compras básico

Que tal!,

Para tu suerte ahorita ando prácticando casi todo el día hehe, por lo que tú tarea ya la he hecho haha, espero y te agrede, te dejo el código fuente:
Código PHP:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml/DTD/xhtml1-transitional.dtd">
<html>
<head>
<title></title>
<script src="jquery.js"></script>
<style type="text/css">
</style>
</head>
<body>
<div style="width:420px;background:#adf;border:2px solid #00f">
<?php
 $patron
="/ -> Cantidad: [0-9]*/i";
 
$IP=$_SERVER["REMOTE_ADDR"];
 
$ruta="productos/".$IP.".txt";
 
$nItem=rand(10000,99999);
 
$reload="<script>location.href='html.php'</script>";
 if(!
file_exists("productos"))
  
mkdir("productos");
 if(!
file_exists($ruta)){
  
$f=fopen($ruta,"w");
  
fclose($f);
  echo 
"<script type='text/javascript'>if(!(usuario=prompt(\"Bienvenido!\\r\\n¿Cuál es su nombre?\")))usuario='desconocido';location='?nombre='+usuario;</script>";
 }
 elseif(
filesize($ruta)>0){
  
$divArticulos="<div style='margin:0px auto;font-weight:bold;width:400px;background:orange;border:1px solid black'>";
  
$f=fopen($ruta,"r");$i=0;
  while(!
feof($f)){
    
$linea=fgets($f);
    
$item=str_replace(" #",",",preg_replace($patron,"",$linea));
    
$spanQuitar="<a href='?quitar=".$item."&ruta=".urlencode($ruta)."'>Quitar</a>";
    if(!
$i)
      echo 
"<h2>Bienvenido ".$linea."</h2>";
    elseif(
$i===1)$divArticulos.="Tu lista de articulos es:<ol><li style='border-bottom:1px solid black'>".$linea.$spanQuitar."</li>";
    else 
$divArticulos.="<li style='border-bottom:1px solid black'>".$linea.$spanQuitar."</li>";
    
$i++;
  }
  if(
$i>=2)$divArticulos.="</ol></div>";
  else 
$divArticulos.="Aún no tienes articulos</div><br />";
  
fclose($f);
 }
 else{
   
$i=1;
   
$nombre=$_GET[nombre];
   
$f=fopen($ruta,"w");
   
fputs($f,$nombre);
   
fclose($f);
   echo 
$reload;
 }

 if(isset(
$_POST["agregar"])){
    
$ruta=$_POST["ruta"];
    
$f=fopen($ruta,"a");
    if(!
$f)echo $reload;
    
fputs($f,"\r\n".$_POST['ID']." -> Cantidad: ".$_POST['cantidad']);
    
fclose($f);
    echo 
$reload;
 }
 else{ 
?>
<form action="#" method="post">
<div style="background:white;font-weight:bold">
<input type="hidden" name="ruta" value="<?=$ruta?>" />
<input type="hidden" name="ID" value="Producto #<?=$nItem?>" />
Articulo #<?=$nItem?> | Cantidad <input type="text" name="cantidad" onkeyup="if(!(this.value>=0)){alert('Sólo números');this.value='';return false;}" />
<input type="submit" name="agregar" value="Agregar!">
</div>
</form>
<?php
 
}
echo 
$divArticulos;
 if(isset(
$_GET["quitar"])){
   
$ruta=urldecode($_GET["ruta"]);
    
$item=$_GET["quitar"];
    
$f=fopen($ruta,"r");
    
$l=fread($f,filesize($ruta));
    
fclose($f);
    if(!
$f)echo $reload;$x=0;
    
$item=$item." -> Cantidad:";
    
$item=str_replace(","," #",$item);
    
$l=preg_replace("/(\r\n)?".$item." [0-9]*/i","",$l);
    
$f=fopen($ruta,"w");
    
fwrite($f,$l);
    
fclose($f);
    echo 
$reload;
 }
?>
</div>
</body>
</html>
Sólo guardalo con extensión .php

Saludos!
  #7 (permalink)  
Antiguo 08/05/2011, 00:00
Avatar de zerpico_01  
Fecha de Ingreso: enero-2008
Ubicación: Wilde - Avellaneda -
Mensajes: 421
Antigüedad: 16 años, 3 meses
Puntos: 13
Respuesta: Carrito de compras básico

Pero esto lo vas a usar on-line?

pues deberias hacer algo con los datos via get, a como esta pueden hacerte las mil unas.
En el mejor de los casos seria xss, a un que creo que da para mucho mas si escriben al archivo...

saludos!!
  #8 (permalink)  
Antiguo 08/05/2011, 10:58
 
Fecha de Ingreso: mayo-2011
Mensajes: 5
Antigüedad: 12 años, 11 meses
Puntos: 0
Respuesta: Carrito de compras básico

Hola! Gracias por responder ante todo. Angelfcm ahora me pongo a ver y entender bien tu codigo, muchas gracias! Si zerpico, el proyecto para entregarlo tiene que estar subido a un hosting, igualmente te digo es una materia que me quiero sacar de encima asi que la pagina va a tener lo minimo e indispensable para aprobar y punto jajaj.

Lo que pude hacer en todo el santo dia de ayer fue poder crear un archivo txt donde se almacenan en lineas separadas ID de producto y cantidad del mismo, por ejemplo

P1
2
P2
4
P1
4


El problema como se ve es que obviamente si se ingresa de nuevo P1 se vuelve a escribir el valor, ademas de que como no puedo usar sesiones es un unico archivo de texto que se puede crear, o sea inviable realmente pero bueno yo no puse las condiciones.

Lo que estaba pensando ahora es como tratar los elementos del archivo de texto. Es posible para evitar que se repitan productos hacer una comparacion al momento de escribir en el archivo para ver si la ID del producto ya esta en el archivo, y si ese es el caso directamente sumarle la cantidad ingresada a la preexistente? Estaba pensando en que cada vez q se escriba en el archivo de texto, primero pasar todos los elementos a un array (usando el /r/n como corte) para que quede de esta manera

Productos.txt
P1
2
P4
4

-> array_prod=(P1,2,P4,4)

ahora lo que hago es comparar el ID del producto nuevo con los indices pares (incluido el 0) del vector, y en caso de que ya exista, le sumo la cantidad nueva a array_prod[i+1], luego sobreescribo el archivo de texto con los elementos nuevos y listo. Esta bien pensado de esta manera? creo que se facilita todo el manejo de los productos, como eliminar, etc.
  #9 (permalink)  
Antiguo 08/05/2011, 12:08
(Desactivado)
 
Fecha de Ingreso: abril-2011
Mensajes: 153
Antigüedad: 13 años
Puntos: 236
Respuesta: Carrito de compras básico

Holas!,
Bueno hize ése script para convinar los productos con el mismo nombre, aquí te lo dejo:
Código PHP:
Ver original
  1. <?php
  2.   $texto="USUARIO\r\nP1\r\n4\r\nP2\r\n2\r\nP1\r\n2\r\nP2\r\n2";/* Aquí es el contenido del archivo de texto */
  3.   $array=explode(",",$texto);
  4.   $sum=0;
  5.   for($x=0;$x<=sizeof($array);$x++){
  6.     for($i=0;$i<=sizeof($array);$i++){
  7.      if($array[$x]==$array[$i] && $x!=$i && $array[$x][0]=="P"){
  8.       $p=$array[$x];
  9.       $sum=$array[$x+1]+$array[$i+1];
  10.       $array[$x+1]=$sum;
  11.       unset($array[$i]);unset($array[$i+1]);
  12.      }
  13.     }
  14.   }
  15. $nuevo_contenido=implode($array,"\r\n");
  16. echo $nuevo_contenido; // Lo imprimimos para comprobar su resultado.
  17. ?>
Pruebalo y luego buscas la forma de aplicarlo a tu proyecto, saludos!

Etiquetas: carrito, compras
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 17:18.