Foros del Web » Programando para Internet » PHP »

Tipos de datos en formularios y PHP

Estas en el tema de Tipos de datos en formularios y PHP en el foro de PHP en Foros del Web. Buenas. No sé si el título ayuda mucho para la consulta pero no sabía como ponerlo. A ver, estoy diseñando un pequeño carrito de compra ...
  #1 (permalink)  
Antiguo 11/07/2006, 02:24
 
Fecha de Ingreso: noviembre-2005
Mensajes: 312
Antigüedad: 18 años, 5 meses
Puntos: 1
Tipos de datos en formularios y PHP

Buenas.

No sé si el título ayuda mucho para la consulta pero no sabía como ponerlo. A ver, estoy diseñando un pequeño carrito de compra en php que me trae por la calle de la amargura. Lo que hago es usar un formulario para pasar los datos del producto (id, nombre, cantidad y precio) por "post" a la página php que se encarga de insertar el producto en las variables de sesión. Como variables de sesión tengo 4 arrays que cogen el id, el nombre del producto, la cantidad y el importe (cantidad*precio se entiende). El problema es que yo quiero comprobar que si ese producto ya está en la cesta que no lo añada de nuevo si no que cambie la cantidad y por consiguiente el importe. Pero no lo consigo. Uso el array_search buscando el id del producto en el array de ids y me dice que no lo encuentra. Mi duda es si al pasar el dato a través de post y del formulario puede ser distinto al que estoy almacenando en los arrays con los ids del producto porque incluso uso la función in_array y siempre me dice que no encuentra ese producto. No sé si tiene que ver con el tipo de dato. Incluso uso el tercer argumento "true" en las dos funciones de arrays pero el resultado es el mismo. Espero que puedan orientarme.

Un saludo y gracias. Si necesitais el código decírmelo.
  #2 (permalink)  
Antiguo 11/07/2006, 02:30
Avatar de Azrael666  
Fecha de Ingreso: noviembre-2004
Mensajes: 652
Antigüedad: 19 años, 5 meses
Puntos: 1
un echo es muy util en este caso (en el que no te puedo ayudar mas porque no veo codigo), muestra por pantalla todo lo que te llegue desde el formulario para saber si te lo está enviando bien..
__________________
ALOZORRO v5.0 (ahora en .es)
  #3 (permalink)  
Antiguo 11/07/2006, 02:56
 
Fecha de Ingreso: noviembre-2005
Mensajes: 312
Antigüedad: 18 años, 5 meses
Puntos: 1
Hola Azrael:

Gracias por contestar. He probado lo que me dices y parece que manda bien los datos del formulario y los números parecen números vamos. De todas formas te paso el código del carrito en php y te mando el código de formulario aunque no creo que esto sea relevante:

Carrito (inspirado en un código que ví):

<?php

class carrito {
var $libroscomprados;
var $camisetascompradas;
var $productoscomprados;
var $gastosdeenvio;
var $importetotal;
// Arrays donde vamos almacenando los datos de los productos del carrito.
var $ids=array();
var $productos=array();
var $cantidades=array();
var $importes=array();

// Función con la que inicializamos las variables generales.

function carrito () {
$this->libroscomprados=0;
$this->camisetascompradas=0;
$this->productoscomprados=0;
$this->gastosdeenvio=3;
$this->importetotal=0;
}

// Función con la que calculamos el importe total.

function calcularImporteTotal() {
$importe=0;
//for ($clave = 0; $clave <= $this->productoscomprados; $clave++)
foreach ($this->ids as $clave => $valor) {
if ($this->ids[$clave] !=0) {
$importe += $this->importes[$clave];
}
}
$this->importetotal=$importe;
}

// Función con la que añadimos los datos del producto en el carrito de compra.

function anadirAlCarrito($id, $producto, $cantidad, $precio) {
//$pos = array_search($id, $this->ids, true);
if (in_array($id, $this->ids)) {
echo "si";
} else { echo "no"; }
/*foreach ($this->ids as $clave => $valor) {
if ($this->ids[$clave] == $id)
$pos = $clave;
}*/

/*echo "VALOR DE POS: " . $pos;

if ($pos == 0) {
$this->ids[$this->productoscomprados]=$id;
$this->productos[$this->productoscomprados]=$producto;
$this->cantidades[$this->productoscomprados]=$cantidad;
$this->importes[$this->productoscomprados]=($cantidad * $precio);
} else {
$this->cantidades[$this->pos] += $cantidad;
$this->importes[$this->pos] += ($cantidad * $precio);
}*/

//$this->importetotal += $this->importes[$this->productoscomprados];

if ($id == 'c1' || $id == 'c2' || $id == 'c3' || $id == 'c4' || $id == 'c5') {
$this->camisetascompradas++;
} else {
$this->libroscomprados++;
}

$this->productoscomprados++;

if ($this->libroscomprados >= 5) {
$this->gastosdeenvio=0;
}

$this->calcularImporteTotal();
}

// Función con la que quitamos un producto del carrito de compra.

function quitarDelCarrito($posicion) {
if ($this->ids[$posicion] == 'c1' || $this->ids[$posicion] == 'c2' || $this->ids[$posicion] == 'c3' || $this->ids[$posicion] == 'c4' || $this->ids[$posicion] == 'c5') {
$this->camisetascompradas--;
} else {
$this->libroscomprados--;
}

$this->productoscomprados--;

if ($this->libroscomprados >= 5) {
$this->gastosdeenvio=0;
}

$this->ids[$posicion]=0;
/*unset($this->productos[$posicion]);
unset($this->cantidades[$posicion]);
unset($this->importes[$posicion]);*/

$this->calcularImporteTotal();
}

// Función con la que vacíamos el carrito de compra.

function vaciarCarrito() {
foreach ($this->ids as $clave => $valor) {
$this->ids[$clave]=0;
/*unset($this->productos[$clave]);
unset($this->cantidades[$clave]);
unset($this->importes[$clave]);*/
}
$this->productoscomprados=0;
$this->camisetascompradas=0;
$this->libroscomprados=0;
$this->calcularImporteTotal();
}

// Función con la que visualizamos el carrito en cada página.

function verCarrito() {
if ($this->productoscomprados == 0) {
echo "Carrito vacío.";
} else {
echo "Libro/s: " . $this->libroscomprados . "<br>";
echo "Camiseta/s: " . $this->camisetascompradas . "<br>";
/*echo "Productos: " . $this->productoscomprados . "<br>";*/
echo "Total: " . $this->importetotal . " €";
}
}

// Función con la que visualizamos con detalle el carrito de compra para su confirmación.

function verDetalleDelCarrito(){
if ($this->productoscomprados == 0) {
echo "Carrito vacío.";
} else {
/*echo "<script language='javascript'>";
echo "function esNumero(numero) {";
echo "if (!) {";
echo "window.alert('Introduce un número entero.');";
echo "window.document.carrito.ejemplares.focus();";
echo "} else { refrescar la página. }";
echo "}</script>";*/
echo "<form name='carrito' method='post' action='pedido.php'>";
echo "<table border='0' cellpadding='1' cellspacing='5'>
<tr>
<td>&nbsp;</td>
<td>Producto:</td>
<td>Cantidad:</td>
<td>Importe:</td>
</tr>";
//for ($clave = 0; $clave <= $this->productoscomprados; $clave++) {
foreach ($this->ids as $clave => $valor) {
if ($this->ids[$clave] != 0) {
echo "<tr>";
echo "<td align='left' width='100'>" . $this->productos[$clave] . "</td>";
//echo '<td>' . $this->cantidades[$clave] . '</td>';
echo "<td align='left' width='50'><input type='text' size='5' name='ejemplares' value='" . $this->cantidades[$clave] . "'></td>";
echo "<td><input type='button' value='Actualizar' onclick='javascript:esNumero(window.document.carri to.ejemplares.value);'></td";
echo "<td>" . $this->importes[$clave] . "</td>";
echo "<td><a href='quitarlibro.php?id=$clave&url=" . $_SERVER["PHP_SELF"] . "'>Quitar</td>";
echo "</tr>";
//$this->importetotal += $this->importes[$clave];
}
}
$this->calcularImporteTotal();
echo "<tr><td colspan='3'>&nbsp;</td></tr>";
echo "<tr><td colspan='2'>Importe total:</td><td>" . $this->importetotal . "</td></tr></table>";
echo "<br><div align='right'><input type='submit' value='Confirmar pedido'></div>";
echo "</form>";
}
}
}
//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();
}
?>

Formulario:
...
<form name="carrito" method="post" action="../../../comprar.php">
<input type="hidden" name="id" value="1"><input type="hidden" name="producto" value="Por qué se perdió la República: Memorias 1916-1939">
<input type="hidden" name="cantidad" value="1"><input type="hidden" name="precio" value="12">
<input type="hidden" name="url" value="<?php echo $_SERVER['PHP_SELF']; ?>"><a href="#" onclick="window.document.carrito.submit();" title="Añadir al carrito">Comprar</a>
</form>
...

En comprar.php hay esto básicamente:
...
$_SESSION["ocarrito"]->anadirAlCarrito($_POST["id"], $_POST["producto"], $_POST["cantidad"], $_POST["precio"]);
...

No sé si será mucho código de momento me estoy centrado en la inserción de los datos en el carrito me faltan funciones para otras cosas.

Un saludo y muchas gracias.
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 21:40.