Foros del Web » Programando para Internet » PHP »

Pasar datos de una función a otra página

Estas en el tema de Pasar datos de una función a otra página en el foro de PHP en Foros del Web. Hola amigos: Tengo un problema que me cuesta resolver. Tengo una página que muestra un carrito de compras y también un formulario donde vienen los ...
  #1 (permalink)  
Antiguo 15/01/2009, 11:45
Avatar de kimmy  
Fecha de Ingreso: julio-2008
Mensajes: 841
Antigüedad: 15 años, 9 meses
Puntos: 15
Pregunta Pasar datos de una función a otra página

Hola amigos:

Tengo un problema que me cuesta resolver. Tengo una página que muestra un carrito de compras y también un formulario donde vienen los datos del cliente. La cuestión es que necesito procesarlo para que se conecte a una interfaz de pago y que al final me genere la factura del cliente y me guarde los datos en la BD. EL proceso sería así:

chequeo.php ----> banco.php ----> factura.php

El problema es que no se como pasar los datos del carrito de compras por el banco y factura. Les voy a colocar el código de chequeo.php:

<?
include ('sc_fns.php');

session_start();

do_html_header("");
if($cart&&array_count_values($cart))
{
display_cart($cart, false, 0);
}
if (isset($_SESSION['user'])) {
display_checkout_form();
}
else {
echo "Debe estar logueado para ir a la caja";
display_button("logueo.php", "log-in", "Loguearse");
}
display_button("mostrar_cart.php", "continue-shopping", "Continue Shopping");
do_html_footer();
?>

aqui se llama a la función del carrito de compras que es quien mantiene los datos que necesito. Esta es la función:

function display_cart($cart, $change = true, $images = 1)
{
// display items in shopping cart
// optionally allow changes (true or false)
// optionally include images (1 - yes, 0 - no)

global $items;
global $total_price;

echo "<table border = 0 width = 100% cellspacing = 0>
<form action = mostrar_cart.php method = post>
<tr><th colspan = ". (1+$images) ." bgcolor=\"#cccccc\">Item</th>
<th bgcolor=\"#cccccc\">Precio</th><th bgcolor=\"#cccccc\">Cantidad</th>
<th bgcolor=\"#cccccc\">Total</th></tr>";

//display each item as a table row
foreach ($cart as $sku => $qty)
{
$product = get_product_details($sku);
echo "<tr>";
if($images ==true)
{
echo "<td align = left>";
if (file_exists("images/$sku.jpg"))
{
$size = GetImageSize("images/".$sku.".jpg");
if($size[0]>0 && $size[1]>0)
{
echo "<img src=\"images/".$sku.".jpg\" border=0 ";
echo "width = ". $size[0]/3 ." height = " .$size[1]/3 . ">";
}
}
else
echo "&nbsp;";
echo "</td>";
}
echo "<td align = left>";
echo "<a href = \"mostrar_product.php?sku=".$sku."\">".$product o["title"]."</a> by ".$product["author"];
echo "</td><td align = center>$".number_format($producto["price"], 2);
echo "</td><td align = center>";
// if we allow changes, quantities are in text boxes
if ($change == true)
echo "<input type = text name = \"$sku\" value = $qty size = 3>";
else
echo $qty;
echo "</td><td align = center>$".number_format($producto["price"]*$qty,2)."</td></tr>\n";
}
// display total row
echo "<tr>
<th colspan = ". (2+$images) ." bgcolor=\"#cccccc\">&nbsp;</td>
<th align = center bgcolor=\"#cccccc\">
$items
</th>
<th align = center bgcolor=\"#cccccc\">
\$".number_format($total_price, 2).
"</th>
</tr>";
// display save change button
if($change == true)
{
echo "<tr>
<td colspan = ". (2+$images) .">&nbsp;</td>
<td align = center>
<input type = hidden name = save value = true>
<input type = image src = \"images/save-changes.gif\"
border = 0 alt = \"Save Changes\">
</td>
<td>&nbsp;</td>
</tr>";
}
echo "</form></table>";
}
?>

Si yo hago echo de las variables en la función si me da el valor de todas, pero al pasarlo a otra página no se como hacerlo pues no las puedo pasar como si fuera un formulario (con $_POST).

Por favor me pueden explicar como paso estos datos a las otras dos páginas.

Gracias
  #2 (permalink)  
Antiguo 15/01/2009, 11:52
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Pasar datos de una función a otra página

Hola kimmy,

Pues veo que ya estas usando sesiones, en ese caso solamente necesitas iniciar la sesion en las otras paginas para que tengas los datos en esas otras paginas.

Saludos
  #3 (permalink)  
Antiguo 15/01/2009, 12:03
Avatar de kimmy  
Fecha de Ingreso: julio-2008
Mensajes: 841
Antigüedad: 15 años, 9 meses
Puntos: 15
Respuesta: Pasar datos de una función a otra página

Hola GatorV:

Gracias por tu ayuda. Pero igual no me los pasa. Te muestro la prueba que hice:

<?
include ('sc_fns.php');

session_start();

echo $producto["price"];
echo $sku;

?>


<?
include ('sc_fns.php');

session_start();

if (isset($_SESSION['user'])) {
echo $producto["price"];
echo $sku;
}
?>

Y no me lo muestra. Qué estoy haciendo mal?
  #4 (permalink)  
Antiguo 15/01/2009, 12:20
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Pasar datos de una función a otra página

Pues no se que variables uses en la sesion, trata de hacer un var_dump($_SESSION) para que veas que variables usas.

Saludos.
  #5 (permalink)  
Antiguo 15/01/2009, 12:22
Avatar de kimmy  
Fecha de Ingreso: julio-2008
Mensajes: 841
Antigüedad: 15 años, 9 meses
Puntos: 15
Respuesta: Pasar datos de una función a otra página

al hacer esta prueba:

<?
include ('../func/book_sc_fns.php');

session_start();

var_dump($_SESSION);
?>

Me dio este resultado:

array(4) { ["cart"]=> &array(1) { ["Straw_Handbag"]=> int(1) } ["items"]=> &int(1) ["total_price"]=> &float(130.8) ["user"]=> &string(4) "lola" }

No entiendo...
  #6 (permalink)  
Antiguo 15/01/2009, 12:30
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Pasar datos de una función a otra página

Pues solo tienes registrado un objeto $cart en la sesion, si quieres pasar los otros los debes de registrar tambien, esto lo haces anexando a $_SESSION otro index, por ejemplo:
Código php:
Ver original
  1. $_SESSION['foo'] = 'bar';
  2. // o
  3. $_SESSION['algo'] = array( 'uno', 'dos', 'tres');

Saludos
  #7 (permalink)  
Antiguo 15/01/2009, 12:36
Avatar de kimmy  
Fecha de Ingreso: julio-2008
Mensajes: 841
Antigüedad: 15 años, 9 meses
Puntos: 15
Respuesta: Pasar datos de una función a otra página

GatorV no entiendo.

Donde debo colocar esto?

Yo pensé que ya eso se guardaba con la function display_cart($cart, $change = true, $images = 1) y luego todo pasaba. Esta instruccion no recopila eso? o alguna otra del código?

if($cart&&array_count_values($cart))

Por favor estoy perdida en este punto. No entiendo que hacer, ni cómo, ni donde ponerlo.

Agradezco tu valiosa ayuda.
  #8 (permalink)  
Antiguo 15/01/2009, 13:21
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Pasar datos de una función a otra página

La funcion display_cart, por lo que veo solo dibuja el carro de compras, tu debes de implementar la logica para guardar los datos en caso de que cambien, la forma correcta es guardarlos en una sesion, asi los tienes disponibles en las paginas que crees la sesion.

Saludos
  #9 (permalink)  
Antiguo 15/01/2009, 13:44
Avatar de kimmy  
Fecha de Ingreso: julio-2008
Mensajes: 841
Antigüedad: 15 años, 9 meses
Puntos: 15
Respuesta: Pasar datos de una función a otra página

Pero lo que no entiendo es donde ponerlo en mi código pues si yo tengo la función display_cart que es donde se construye el carro y cuando agrego los productos llamo a lo siguiente:

<?
include ('sc_fns.php');

session_start();

if($new)
{
//nuevo artículo seleccionado
if(!session_is_registered("cart"))
{
$cart = array();
session_register("cart");
$items = 0;
session_register("items");
$total_price = "0.00";
session_register("total_price");
}
if($cart[$new])
$cart[$new]++;
else
$cart[$new] = 1;
$total_price = calculate_price($cart);
$items = calculate_items($cart);

}
if($save)
{
foreach ($cart as $sku => $qty)
{
if($$sku=="0")
unset($cart[$sku]);
else
$cart[$sku] = $$sku;
}
$total_price = calculate_price($cart);
$items = calculate_items($cart);
}

do_html_header("Tu carro de compras");

if($cart&&array_count_values($cart))
display_cart($cart);
else
{
echo "<p>No hay artículos en tu carro";
echo "<hr>";
}
$target = "index.php";
// si hemos añadido un artículo al carro, continuar comprando en esa categoría
?>
<br>
<table width="450" border="0" align="right">
<tr>
<td><? display_button("checkout.php", "go-to-checkout", "Go To Checkout"); ?>
<div align="right"></div>
<div align="right"></div>
<div align="center"></div>
<div align="center"></div></td>
</tr>
<tr>
<td><? display_button($target, "continue-shopping", "Continue Shopping");
$path = $PHP_SELF;
$path = str_replace("mostrar_cart.php", "", $path);
?>
<div align="right"></div>
<div align="right"></div>
<div align="center"></div>
<div align="center"></div></td>
</tr>
</table>
<?
do_html_footer();
?>

Mi pregunta es: Estas son las sesiones del carrito? Cómo las llamó después en otras páginas para que me lleve los valores.

Gracias
  #10 (permalink)  
Antiguo 15/01/2009, 13:46
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Pasar datos de una función a otra página

Te recomiendo no usar session_register, es peligroso, lee esto: http://www.php.net/register_globals.

Mejor usa $_SESSION y como te indique en un post mas arriba usa $_SESSION['items'] = $items; por ejemplo para guardar en la sesion los items, luego los puedes leer usando $items = $_SESSION['items'].

Saludos
  #11 (permalink)  
Antiguo 15/01/2009, 13:56
Avatar de kimmy  
Fecha de Ingreso: julio-2008
Mensajes: 841
Antigüedad: 15 años, 9 meses
Puntos: 15
Respuesta: Pasar datos de una función a otra página

Hola lo cambié como me señalaste, pero al tratar de llamar alguno de los valores, así:

<?
include ('../func/book_sc_fns.php');

session_start();
$items = $_SESSION['items'];
$sku = $_SESSION['cart'];
$product["price"] = $_SESSION['cart'];

echo $items;
echo $product['price'];
echo $sku;
?>

me muestra esto:

1ArrayArray

o sea que si me muestra el items pero no los otros valores.

Disculpa sinceramente mi gran ignorancia pero estoy aprendiendo esta parte. Como puedo mostrar los valores de la sesion cart?

Gracias
  #12 (permalink)  
Antiguo 15/01/2009, 14:17
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Pasar datos de una función a otra página

Con var_dump puedes ver el contenido del array, entonces puedes llamar a cada parte por ejemplo $items[0] etc.

Saludos
  #13 (permalink)  
Antiguo 20/01/2009, 13:49
Avatar de kimmy  
Fecha de Ingreso: julio-2008
Mensajes: 841
Antigüedad: 15 años, 9 meses
Puntos: 15
Respuesta: Pasar datos de una función a otra página

Hola:

He logrado pasar todos los datos menos los de la cantidad de productos que es el valor $qty. No se como guardarlos dentro del array. Lo que comentaba iba asi.

Esta es la funcion del carrito

function display_cart($cart, $change = true, $images = 1)
{
// display items in shopping cart
// optionally allow changes (true or false)
// optionally include images (1 - yes, 0 - no)

global $items;
global $total_price;

echo "<table border = 0 width = 100% cellspacing = 0>
<form action = mostrar_cart.php method = post>
<tr><th colspan = ". (1+$images) ." bgcolor=\"#cccccc\">Item</th>
<th bgcolor=\"#cccccc\">Precio</th><th bgcolor=\"#cccccc\">Cantidad</th>
<th bgcolor=\"#cccccc\">Total</th></tr>";

//display each item as a table row
foreach ($cart as $sku => $qty)
{
$product = get_product_details($sku);
echo "<tr>";
if($images ==true)
{
echo "<td align = left>";
if (file_exists("images/$sku.jpg"))
{
$size = GetImageSize("images/".$sku.".jpg");
if($size[0]>0 && $size[1]>0)
{
echo "<img src=\"images/".$sku.".jpg\" border=0 ";
echo "width = ". $size[0]/3 ." height = " .$size[1]/3 . ">";
}
}
else
echo "&nbsp;";
echo "</td>";
}
echo "<td align = left>";
echo "<a href = \"mostrar_product.php?sku=".$sku."\">".$product o["title"]."</a> by ".$product["author"];
echo "</td><td align = center>$".number_format($producto["price"], 2);
echo "</td><td align = center>";
// if we allow changes, quantities are in text boxes
if ($change == true)
echo "<input type = text name = \"$sku\" value = $qty size = 3>";
else
echo $qty;
echo "</td><td align = center>$".number_format($producto["price"]*$qty,2)."</td></tr>\n";
}
// display total row
echo "<tr>
<th colspan = ". (2+$images) ." bgcolor=\"#cccccc\">&nbsp;</td>
<th align = center bgcolor=\"#cccccc\">
$items
</th>
<th align = center bgcolor=\"#cccccc\">
\$".number_format($total_price, 2).
"</th>
</tr>";
// display save change button
if($change == true)
{
echo "<tr>
<td colspan = ". (2+$images) .">&nbsp;</td>
<td align = center>
<input type = hidden name = save value = true>
<input type = image src = \"images/save-changes.gif\"
border = 0 alt = \"Save Changes\">
</td>
<td>&nbsp;</td>
</tr>";
}
echo "</form></table>";
}
?>

Esta es la página que lo muestra

<?
include ('sc_fns.php');

session_start();

if($new)
{
//nuevo artículo seleccionado
if(!session_is_registered("cart"))
{
$cart = array();
session_register("cart");
$items = 0;
session_register("items");
$total_price = "0.00";
session_register("total_price");
}
if($cart[$new])
$cart[$new]++;
else
$cart[$new] = 1;
$total_price = calculate_price($cart);
$items = calculate_items($cart);

}
if($save)
{
foreach ($cart as $sku => $qty)
{
if($$sku=="0")
unset($cart[$sku]);
else
$cart[$sku] = $$sku;
}
$total_price = calculate_price($cart);
$items = calculate_items($cart);
}

do_html_header("Tu carro de compras");

if($cart&&array_count_values($cart))
display_cart($cart);
else
{
echo "<p>No hay artículos en tu carro";
echo "<hr>";
}
$target = "index.php";
// si hemos añadido un artículo al carro, continuar comprando en esa categoría
?>
<br>
<table width="450" border="0" align="right">
<tr>
<td><? display_button("checkout.php", "go-to-checkout", "Go To Checkout"); ?>
<div align="right"></div>
<div align="right"></div>
<div align="center"></div>
<div align="center"></div></td>
</tr>
<tr>
<td><? display_button($target, "continue-shopping", "Continue Shopping");
$path = $PHP_SELF;
$path = str_replace("mostrar_cart.php", "", $path);
?>
<div align="right"></div>
<div align="right"></div>
<div align="center"></div>
<div align="center"></div></td>
</tr>
</table>
<?
do_html_footer();
?>

Cómo hago para que se arrastre la variable $qty; dentro del array $cart. No se como ponerlo. Por favor me pueden ayudar a solucionarlo pues llevo como una semana tratando y no lo logro.

Gracias.
  #14 (permalink)  
Antiguo 20/01/2009, 15:13
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Pasar datos de una función a otra página

Lo que tienes que hacer si modificas la cantidad es enviar por POST a la misma pagina para recapturar los valores y guardarlos en la sesión luego ya en las demás paginas vas a poder leer el valor con la llave que lo guardes en la sesión.

Saludos
  #15 (permalink)  
Antiguo 20/01/2009, 16:00
Avatar de kimmy  
Fecha de Ingreso: julio-2008
Mensajes: 841
Antigüedad: 15 años, 9 meses
Puntos: 15
Respuesta: Pasar datos de una función a otra página

Gracias GatorV siempre tan atento. Pero sigo sin entender la construcción del array del carrito pues cuando muestro lo que contiene con var_dump solo conserva esto que son los valores de la variable $sku:

array(2) { ["Straw_Handbag"]=> int(1) ["Fashion_Necklace"]=> int(1) }

y yo quiero que además, conserve dentro del array la variable $qty; y no se como hacerlo.

Se que estoy repetida con esto pero no entiendo. como meto esa variable en el array cart.
  #16 (permalink)  
Antiguo 20/01/2009, 16:14
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Pasar datos de una función a otra página

Pues si te fijas el foreach te lo esta diciendo: foreach($arreglo as $sku => $qty, es decir las llaves de tu carrito es el producto y el valor es la cantidad del carrito.

Por eso ese int(1) es que solo hay 1 cantidad de ese SKU.

Saludos
  #17 (permalink)  
Antiguo 20/01/2009, 16:27
Avatar de kimmy  
Fecha de Ingreso: julio-2008
Mensajes: 841
Antigüedad: 15 años, 9 meses
Puntos: 15
Respuesta: Pasar datos de una función a otra página

ahhhhh ok. Entonces como lo tomo para guardarlo al final en la base de datos pues con la variable $qty no lo toma. cómo puedo hacerlo.
  #18 (permalink)  
Antiguo 20/01/2009, 16:30
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Pasar datos de una función a otra página

Pues en el foreach puedes hacerlo ya estas ciclando:
Código php:
Ver original
  1. foreach ($cart as $sku => $qty) {
  2.         // Aqui puedes insertar $sky y $qty
  3. }

Si lo quieres hacer fuera del foreach tendrías que conocer el SKU por ejemplo:
Código php:
Ver original
  1. $qty = $cart[$sku];

Saludos
  #19 (permalink)  
Antiguo 20/01/2009, 16:34
Avatar de kimmy  
Fecha de Ingreso: julio-2008
Mensajes: 841
Antigüedad: 15 años, 9 meses
Puntos: 15
Respuesta: Pasar datos de una función a otra página

Uff GatorV eres lo máximo!!! si no fuese por gente tan generosa como tú no se que haríamos en este mundo.

Mil gracias siempre...
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 06:11.