PDA

Ver la Versión Completa : Como mandar una fila completa para procesarla con php


lucasarts_18
02-01-2007, 13:42:07
Hola:

¿Cómo se puede enviar el contenido de una fila completa de una determinada tabla html, para poder procesarla a través de post en php?

Gracias....:)

kayetano
02-01-2007, 19:24:00
Hola

La verdad es que no entiendo tu pregunta. Voy por partes:
1. Queres mandar el contenido de una fila de una tabla en HTML.
¿Mandarla como? ¿Donde? ¿No tendrás los datos en una base de datos?
Si los datos los tienes en una base de datos es muy facil mandarlos donde tu quieras, En caso contrario te tocaría pasarlos a un formulario o crearte un script para "parsear" la tabla HTML y obtener los datos de forma que puedas manipularlos.

2. Quieres procesarla a través de post en php.
Supongo que con esto te refieres a que debes mandar los datos a un script PHP por metodo POST. Esto es muy facil el problema es que no entiendo donde ni como tienes almacenados esos datos.

Proporcona un poco mas de información y un poco mas clara.

lucasarts_18
02-01-2007, 21:07:25
Hola

La verdad es que no entiendo tu pregunta. Voy por partes:
1. Queres mandar el contenido de una fila de una tabla en HTML.
¿Mandarla como? ¿Donde? ¿No tendrás los datos en una base de datos?


Claro, mandar el contenido de todas las filas de una tabla a través de POST, es decir a través de un formulario, de hecho la tabla está "embebida" dentro de un formulario.


En caso contrario te tocaría pasarlos a un formulario o crearte un script para "parsear" la tabla HTML y obtener los datos de forma que puedas manipularlos.
Exacto, como dije anteriormente la tabla está dentro del formulario.
Espero que se entienda, la idea es tomar los valores de cada celda de la tabla html y pasarla por POST, y esto me complica ya que no sé como tomar esos valores que se encuentran en cada celda..
Con un mensaje de roman logré algo similar, pero la diferencia es que capturo los valores en un arreglo que se encuentran en un checkbox dentro de una columna y aquí la diferencia es que no hay controles de por medio, solo celdas...
Gracias....

Ñuño Martínez
03-01-2007, 10:41:19
Lo que puedes hacer es duplicar los valores de las celdas en campos "hidden". Así sí los puedes mandar fácilmente.

dec
03-01-2007, 10:49:06
Hola,

Yo lo que no entiendo muy bien es porqué es necesario enviar la información de las tablas a otro lugar... si es que esa información que se muestra en las tablas ha salido de nosotros... no sé si me explico.

Si se trata de conseguir los datos de "otra página Web" que muestra los mismos en una tabla, pues entonces no creo que quede otra: parsear el HTML de modo que nos hagamos de los datos que necesitemos.

Pero, si fuera el caso que habláramos de nuestro sitio Web (que no me queda claro) y fuéramos nosotros quienes recuperáramos de la base de datos X información que mostráramos luego en una tabla...

¿Para qué necesitamos recuperar la información de las tablas HTML? ¿Es que no contamos ya con dicha información en la base de datos? En fin. No me queda claro el asunto. A ver si dándole otra vuelta de tuerca...

Supóngase que mostramos los usuarios registrados en nuestra aplicación en una tabla HTML. Queremos poder "editar" dichos datos, así que nos gustaría incluir dicha tabla dentro de un formulario que luego podremos procesar.

Pues bien, la cosa (tal como yo la veo) sería mostrar los datos de los usuarios en la tabla HTML, pero, en una de sus "columnas" podríamos situar una casilla "CheckBox" de formulario, cuyo "valor" sería el ID del registro que la fila de la tabla está mostrando, es decir, el ID que identifica a un usuario de nuestra aplicación.

En ese caso no tendríamos que recuperar datos de la tabla, ni tendríamos que envíar los datos de la tabla a ningún lado... bastaría con procesar el formulario de marras y recoger los "IDs" de los "CheckBox" seleccionados y a partir de ahí a correr...

Ya podríamos recuperar los datos de los usuarios "seleccionados", en base a su ID. Pero ya he hablado demasiado, y no estoy seguro de que lo que estoy diciendo tenga algún sentido para el compañero Lucas. :)

kayetano
03-01-2007, 11:52:18
Hola

Al igual que dec sigo confuso al respecto de como y donde están almacenados los datos.

Voy a suponer que tienes almacenados los datos en algún tipo de base de datos y que lo que buscas es hacer algo parecido a un grid de delphi, pues tu solución podría ser esta:
http://www.senzalimiti.sk/slgrid/

lucasarts_18
03-01-2007, 13:50:16
Lo que puedes hacer es duplicar los valores de las celdas en campos "hidden". Así sí los puedes mandar fácilmente.
Lo he resuelto de esta manera, por ahora...gracias...


Yo lo que no entiendo muy bien es porqué es necesario enviar la información de las tablas a otro lugar... si es que esa información que se muestra en las tablas ha salido de nosotros... no sé si me explico.

Es necesario, a ver si me explico, es como el carrito de compras, uno va agregando información de productos a la grilla (tabla html), ¿pero como hago para no perder los datos que me tienen ingresado y aún no lo han enviado a la base de datos?, es decir aún no lo han grabado. De ahí mi idea de mandar toda la información a la otra página para ir acumulando la información en un arreglo, entonces cuando el usuario me presione el botón grabar, en realidad mando un arreglo de todos los datos que se encuentra en la grilla (tabla html).



¿Para qué necesitamos recuperar la información de las tablas HTML? ¿Es que no contamos ya con dicha información en la base de datos?

No, no se encuentra en la base de datos ya que el usuario la va agregando a la grilla y aún no ha presionado el botón grabar.
Todo lo demás que indicas , es correcto en el caso de que los datos estén almacenados en la base de datos y quieras modificarlos, es lo que generalmente se usa, ¿cierto?.



Al igual que dec sigo confuso al respecto de como y donde están almacenados los datos.

Como dije anteriormente los datos no se encuentran en la base de datos, sino que están en "memoria", es como una cotización o mejor aún como el tipico carrito de compra, es decir la compra no está hecha hasta que finalice la transacción.

Ahora toda este enredo es solo por el hecho si es que al agregar un item al detalle se pierden los datos, ¿o no?.
Ya que ir a otra página para seleccionar un producto, en este caso asociar un perfil a un usuario, y al momento de regresar a la página donde se encuentra el detalle, ese detalle se perderá, de ahí mi idea de pasar toda la información a la otra página con el fin de agregar el item al final del arreglo y luego con ese arreglo vuelvo a "Fabricar las filas del detalle nuevamente".

Bueno, cualquier cosa, de no entender podría poner algunas capturas de pantallas :D.

Nos vemos....

dec
03-01-2007, 13:59:44
Hola,

Yo creo que podrías utilizar "tablas temporales" o "registros temporales" (en una base de datos) o, acaso más práctico y menos complicado utilizar Sesiones o Cookies.

El tema está en que no deberías recuperar datos de una tabla HTML "parseando" su HTML, puesto que al fin y al cabo es tu página Web, y eres tú mismo el que construye dicha tabla HTML.

Es al momento de su construcción que deberías utilizar variables de sesión, Cookies o la base de datos, de modo que sepas qué debes imprimir en la tabla HTML, y qué has imprimido ya... no sé si me explico.

¿Conoces las variables de Sesión? Échalas un vistazo. Para que te hagas una idea:


session_start();

if(!isset($_SESSION['contador']))
$_SESSION['contador'] = 0;
$_SESSION['contador']++;


Cada vez que se carge el Script anterior la variable de sesión "contador" se irá incrementando en una unidad. Esto, independientemente de en qué página de tu sitio esté el usuario, es decir, la sesión del usuario se mantendrá hasta que este cierre el navegador.

Pues bien, en una variable (o varias) de Sesión podrías guardar los datos que fueran menester: podrías conformar el carrito de compra. Aquí ya no sé si te convendría guardar los "IDs" de productos, o los nombres, precios, descripción, etc., de los mismos. Pero, en todo caso, ya digo, creo que por ahí pueden ir los tiros... variables de sesión, cookies o base de datos.

lucasarts_18
03-01-2007, 14:11:19
Hola,
Yo creo que podrías utilizar "tablas temporales" o "registros temporales" (en una base de datos) o, acaso más práctico y menos complicado utilizar Sesiones o Cookies.

Sesiones, parece interesante, claro así me puedo pasear de una página a otra sin perder los datos, y una sesión debe ser similar a un arreglo, al fin de cuentas php se maneja en puros arreglos..


El tema está en que no deberías recuperar datos de una tabla HTML "parseando" su HTML
Disculpa la ignorancia, pero a que te refieres específicamente a parsear su Html.


Pues bien, en una variable (o varias) de Sesión podrías guardar los datos que fueran menester: podrías conformar el carrito de compra. Aquí ya no sé si te convendría guardar los "IDs" de productos, o los nombres, precios, descripción, etc., de los mismos. Pero, en todo caso, ya digo, creo que por ahí pueden ir los tiros... variables de sesión, cookies o base de datos.
Gracias....parece ser la solución efectiva...

dec
03-01-2007, 14:16:08
Hola,

Bueno. Antes me referí al "parseo" del HTML porque en este Hilo se ha tocado el tema... pero a lo peor lo hize un poco precipitadamente. En todo caso, aun pensando que las varibles de sesión pueden servir para el caso, lo cierto es que hay que ver (saber) cómo se está construyendo el asunto, puesto que aunque "la solución" fueran las variables de sesión sin duda tiene que haber unas cuantas formas de basarse en ellas para lograr el objetivo...

kayetano
03-01-2007, 14:42:01
Hola

Yo siempre utilizo sesiones para programar un carrito de compra.

Sesiones, parece interesante, claro así me puedo pasear de una página a otra sin perder los datos, y una sesión debe ser similar a un arreglo, al fin de cuentas php se maneja en puros arreglos..
La variable $_SESSION que es donde se almacenan los valores de una sesion no es "como un arreglo", ES UN ARREGLO (array), además los array en PHP son muy flexibles ya que no hay que definir tipo ni en el valor ni en el indice, esto quiere decir que se pueden hacer cosas como esta:

<?php
$miArray = array( 3=>"texto", "indice"=>20 );
...
echo $miArray[3]; // Esto muestra la palabra "texto"
echo $miArray["indice"]; // Esto muestra el número "20";
?>

dec
03-01-2007, 15:00:22
Hola,

Está hecho a bote pronto, y bueno, no he querido ir más allá de dar una idea aunque sea por encima de cómo podrían usarse las variables de sesión para construir el carrito de la compra. Seguro hay cien mil ejemplos mejores por Internet, pero, en fin, se ve que no pude resistirme. El código es todo un plato de espaguetis, pero, ya digo, la intención es que se tome alguna que otra idea y nada más que eso. :)

Los dos archivos "inicio.php" y "comprar.php" en el mismo directorio, por favor. :D

Ah, por cierto, aquí el "invento" funcionando (http://dec.clubdelphi.com/php/carrito/inicio.php)...


<?php
// inicio.php

session_start();

if(!isset($_SESSION['carrito'])){
$_SESSION['carrito'] = array();
}

if(isset($_POST['ids-productos'])) {
$_SESSION['carrito'] = $_POST['ids-productos'];
}

if(isset($_POST['vaciar']) && $_POST['vaciar'] == 1){
$_SESSION['carrito'] = array();
}

?>
<html>
<head>
<title>ClubDelphi.com</title>
<style type="text/css">
table { width: 100%; }
td { border: Silver Solid 1px; }
</style>
</head>
<body>
<h1>
Lista de productos
</h1>
<form action="" method="post">
<table>
<tr>
<td>Comprar</td>
<td>Nombre</td>
<td>Descripción</td>
<td>Precio</td>
</tr>
<tr>
<td>
<?php
if(!in_array(1, $_SESSION['carrito']))
echo '<input type="checkbox" name="ids-productos[]" value="1" />';
else
echo '<input checked="true" type="checkbox" name="ids-productos[]" value="1" />';
?>
</td>
<td>Componentes Pérez</td>
<td>Los mejores componentes sin duda</td>
<td>10</td>
</tr>
<tr>
<td>
<?php
if(!in_array(2, $_SESSION['carrito']))
echo '<input type="checkbox" name="ids-productos[]" value="2" />';
else
echo '<input checked="true" type="checkbox" name="ids-productos[]" value="2" />';
?>
</td>
<td>Componentes Rodríguez</td>
<td>Que tiemblen los componentes Pérez</td>
<td>20</td>
</tr>
<tr>
<td>
<?php
if(!in_array(3, $_SESSION['carrito']))
echo '<input type="checkbox" name="ids-productos[]" value="3" />';
else
echo '<input checked="true" type="checkbox" name="ids-productos[]" value="3" />';
?>
</td>
<td>Componentes Martínez</td>
<td>Estos son los mejores, por dios</td>
<td>30</td>
</tr>
</table>
<p><input type="submit" value="Añadir" /> a tu carrito los productos seleccionados</p>
<?php
if(!empty($_SESSION['carrito'])) {
echo '
<p>
<input type="hidden" name="vaciar" value="0" />
<input type="button" value="Vaciar" onclick="javascript:this.form.vaciar.value = 1;this.form.submit();" /> tu carrito de la compra
</p>
<p>
<a href="comprar.php" title="Haz clic aquí para completar tu compra">Haz clic aquí para completar tu compra</a>
</p>
';
}
else {
echo '<h4>Todavía no tienes nada en tu carrito de la compra</h4>';
}
?>
</form>
</body>
</html>



<?php
// comprar.php

session_start();
if(isset($_SESSION['carrito'])){
if(!empty($_SESSION['carrito'])) {
echo '<p>IDs de los productos añadidos al carrito:</p>';
print_r($_SESSION['carrito']);
echo '<p><a href="inicio.php" title="Haz clic aquí para comprar algo más">Haz clic aquí para comprar algo más</a>.</p>';
} else {
echo '<p>El carrito está vacío. <a href="inicio.php" title="Haz clic aquí para comprar algo">Haz clic aquí para comprar algo</a>.</p>';
}
}

?>

lucasarts_18
03-01-2007, 18:03:59
Dec...exacto, lo de las sesiones se ve que sirve para estos asuntos...

Gracias....:cool: