entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

2votos

Enviar datos de un table con datos php a otro archivo php

Buenas Tardes, tengo el siguiente codigo que es una tabla html con datos traidos por curl desde una api en php, tengo un boton tipo input el cual al hacer click deberia enviar el tr seleccionado a otro archivo php y mostrar una tabla con los mismos datos del tr que traigo, si pueden darme una mano en como enviar y recibir dicho tr se los agradezco ! Aca les dejo el codigo de la tabla html en el cual el paso los datos que traje desde la api con curl, un saludo!

<td><input type="checkbox" name="cb[]" id="cb[]" value=<?php echo $i; ?>></input></td>
                                    <td><a href="#" onclick="window.open('<?php echo $valor['foto'] ?>','TITULO','width =550,height=400' );"><img  src="<?php echo $valor['foto'] ; $i++ ;?>" border='0' width='50' height='50'> </td>
                                    <td> <?php echo $valor['marca'] ?></td>
                                    <td><?php echo $valor['descripcion']; ?></td>
                                    <td><?php echo $valor['familia'] ;?></td>
                                    <td><?php echo $valor['codigo'] ;?></td>
                                    <td><?php echo $valor['descripcionadicional']; ?></td>
                                    <td><?php if ($valor['precio1'] <= 0)
                                            echo "Sin disponibilidad";
                                        else
                                    echo $valor['precio1']; ?></td>

                                    <td>
                                        <!-- Icons -->
                                     <input type="submit" class="button" method="POST"
                                         value="Agregar" name="Agregar"  id ="Agregar" title="Agregar"> 
                                         </input>

1 Respuesta

2votos

Leonardo-Tadei Puntos227020

Hola @matti,

los únicos datos que se pueden enviar con un formulario HTML son los que están en INPUT, TEXTAREA y SELECT.

La forma más simple que se me ocurre para enviar los datos de una fila a otro script es que cada TR sea un formulario, y que dentro de los TD pongas INPUT con los datos a enviar. De esta manera cada botón de submit te enviará el contenido de la fila.

Decorando los INPUT con CSS, podrás hacer que casi no se vean.

Un refinamiento de esta solución es que en el TD del botón, tengas un formulario y que los datos a enviar estén en INPUT de tipo HIDDEN. Esto no afectará cómo se ven las cosas, genera código HTML válido y luego cada formulario envía los datos.

Estas dos soluciones no sirven para enviar varias filas a la vez (no me queda claro por tu pregunta si hace falta o no)

La tercer solución posible es usando JavaScript: se podría hacer que el botón de enviar busque la fila seleccionada, lea el contenido de los TD, los cargue en un formulario, y que sea este formulario el que se envía. Es un poco más compleja pero más versatil.

Saludos cordiales

0voto

matti comentado

Hola @Leonardo-Tadei mi idea era hacerlo con JavaScript pero se me re complico y no se como hacerlo y ademas no sabia como hacerlo para recibirlo, otra idea que se me ocurrió usando js fue que cada vez que se haga click en el botón enviar se guarde el td en un archivo json y lo levantaba con curl en el otro archivo php pero tampoco me salio la lectura de cada td, si podrás darme una mano con código te lo agradecería!

Saludos !

1voto

Leonardo-Tadei comentado

Tenés que enviar varios TD a la vez o solo uno por vez?

0voto

matti comentado

Mira la primer tabla tiene productos y a donde quiero enviar es otro archivo PHP que recibe los TD que envió y va cargando la tabla con los productos formando un listado, osea se envía de uno pero en el otro archivo PHP están todos les que envías

0voto

Leonardo-Tadei comentado

Hola @matti,

el proceso que describís no tiene sentido usando PHP desde un servidor web: cuando enviás datos, saltás al script PHP de destino, con lo que podés seleccionar muchos, pero después se reciben todos juntos.

Si en el primer script vas seleccionado hasta que se aprieta "enviar", y al enviar se mandan todos los datos juntos, el script PHP de destino recibirá toda la información y podrá mostrar lo seleccionado antes en una tabla, pero no porque lo vaya recibiendo de a pedazos...

0voto

matti comentado

Y como haría con checkbox para seleccionar los productos a enviar, cómo sería para enviarlos y recibirlos? Por ejemplo con ajax

1voto

Leonardo-Tadei comentado

Si usaras AJAX para ir enviando los datos, tendrías que tener algún lugar intermedio en dónde guardarlos (por ejemplo una tabla de base de datos) y luego leerlos de ahí en el script siguiente.
Recordá que los scripts PHP se ejecutan siempre desde principio a fin, y termiman: no queda nada corriendo en memoria como para estar "escuchando" la respuesta.

Te armé un ejemplo de cómo se podría hacer esto, lo más simple posible. Hay código de más, pero es para que quede más claro el funcionamiento:

<!DOCTYPE html>
<html>
<head>
    <title>Enviar filas</title>
    <script>
function enviar(){
    // Carga lo seleccionado a un FORM y lo envía
    var cb = document.getElementsByClassName('cb');
    // Recorre los checkbox
    for(var i=0; i < cb.length; i++){
        // Obtiene el valor de los seleccionados que estén chequeados
        if( cb[i].checked) {
            var id = cb[i].value;       
            // con el valor como referencia, obtiene los datos de los TD
            var mar = document.getElementById('m'+id).innerHTML
            var des = document.getElementById('d'+id).innerHTML
            var fam = document.getElementById('f'+id).innerHTML
            var cod = document.getElementById('c'+id).innerHTML
            var adi = document.getElementById('a'+id).innerHTML
            var pre = document.getElementById('p'+id).innerHTML
            // Agrega los datos al form, como un vector HTML
            var imar = document.createElement("input");
            imar.type = "hidden"; imar.name = "marca[]"; imar.value = mar;
            document.getElementById('formenviar').appendChild(imar);
            var ides = document.createElement("input");
            ides.type = "hidden"; ides.name = "descripcion[]"; ides.value = des;
            document.getElementById('formenviar').appendChild(ides);
            var ifam = document.createElement("input");
            ifam.type = "hidden"; ifam.name = "familia[]"; ifam.value = fam;
            document.getElementById('formenviar').appendChild(ifam);
            var icod = document.createElement("input");
            icod.type = "hidden"; icod.name = "codigo[]"; icod.value = cod;
            document.getElementById('formenviar').appendChild(icod);
            var iadi = document.createElement("input");
            iadi.type = "hidden"; iadi.name = "adicionales[]"; iadi.value = adi;
            document.getElementById('formenviar').appendChild(iadi);
            var ipre = document.createElement("input");
            ipre.type = "hidden"; ipre.name = "precio[]"; ipre.value = pre;
            document.getElementById('formenviar').appendChild(ipre);
        }
    }
    // Envía los datos
    document.getElementById('formenviar').submit();
}
    </script>
</head>
<body>

<table>
    <tr>
        <td><input type="checkbox" id="cb1" value="1" class="cb"></input></td>
        <td id="m1">Marca 1</td>
        <td id="d1">Descripcion 1</td>
        <td id="f1">Familia 1</td>
        <td id="c1">Codigo 1</td>
        <td id="a1">Descripcion Adicional 1</td>
        <td id="p1">Sin disponibilidad<td>
    </tr>
    <tr>
        <td><input type="checkbox" id="cb3" value="3" class="cb"></input></td>
        <td id="m3">Marca 3</td>
        <td id="d3">Descripcion 3</td>
        <td id="f3">Familia 3</td>
        <td id="c3">Codigo 3</td>
        <td id="a3">Descripcion Adicional 3</td>
        <td id="p3">123<td>
    </tr>
</table>

<form method="post" id="formenviar" action="recibir.php">
    <input type="button" value="Enviar" onclick="enviar();">
</form>

</body>
</html>

Fijata que agregué unos ID para poder acceder vía JavaScript a los elementos de forma directa, basados en reglas de tu variable $i, para que te sea simple generar el código programáticamente.

Si creás un script llamado recibir.php que contenga:

<?php
var_dump($_POST);
?>

verás que se reciben los datos seleccionados en vectores HTML, que podrás recorrer para armar una tabla HTML o lo que te haga falta para hacer algo con lo seleccionado.

Saludos cordiales!

0voto

matti comentado

Te hago una consulta, la tabla que creastes no la entiendo para que es, si podras decirme eso, y otra consulta aca


// con el valor como referencia, obtiene los datos de los TD
            var mar = document.getElementById('m'+id).innerHTML

'm' seria el id del td marca? me perdi un poco ahi.

Un saludo

0voto

Leonardo-Tadei comentado

Hola @matti,

creé una tabla porque tu pregunta es sobre datos en una tabla... la creé estática porque al no tener el resto de tu código, no puedo hacerte un ejemplo que funcione: en tu caso deberías generar la misma tabla pero programáticamente.

Respecto a los ID, los creo para poder acceder fácil a cada elemento. Uso tu propio $i para generarlos basados en reglas y poder accederlos luego.

Por ejemplo si $i = 4, el TD con la marca se va a llamar "m4", y para $i = 22, el TD con la marca se va a llamar "m22". Los ID en HTML no pueden repetirse.

Saludos cordiales.

PD: poné tus dudas como comentarios a esta respuesta y no como una respuesta a la pregunta, así no se pierde el hilo de la conversación.

0voto

matti comentado

Probe poniendo como vos me decias modifique todo y no funciono, te dejo el codigo aver si vos ves algun error, porque me canse de releer el codigo aver si encuentro algo mal!

            <script>
function enviar(){
    // Carga lo seleccionado a un FORM y lo envía
    var cb = document.getElementsByClassName('cb');
    // Recorre los checkbox
    for(var i=0; i < cb.length; i++){
        // Obtiene el valor de los seleccionados que estén chequeados
        if( cb[i].checked) {
            var id = cb[i].value;       
            // con el valor como referencia, obtiene los datos de los TD
            var fot = document.getElementById('fo'+id).innerHTML
            var des = document.getElementById('d'+id).innerHTML
            var fam = document.getElementById('f'+id).innerHTML
            var cod = document.getElementById('c'+id).innerHTML
            var adi = document.getElementById('da'+id).innerHTML
            var pre = document.getElementById('p'+id).innerHTML
            // Agrega los datos al form, como un vector HTML
            var imar = document.createElement("input");
            imar.type = "hidden"; imar.name = "foto[]"; imar.value = fam;
            document.getElementById('formenviar').appendChild(imar);
            var ides = document.createElement("input");
            ides.type = "hidden"; ides.name = "descripcion[]"; ides.value = des;
            document.getElementById('formenviar').appendChild(ides);
            var ifam = document.createElement("input");
            ifam.type = "hidden"; ifam.name = "familia[]"; ifam.value = fam;
            document.getElementById('formenviar').appendChild(ifam);
            var icod = document.createElement("input");
            icod.type = "hidden"; icod.name = "codigo[]"; icod.value = cod;
            document.getElementById('formenviar').appendChild(icod);
            var iadi = document.createElement("input");
            iadi.type = "hidden"; iadi.name = "adicionales[]"; iadi.value = adi;
            document.getElementById('formenviar').appendChild(iadi);
            var ipre = document.createElement("input");
            ipre.type = "hidden"; ipre.name = "precio[]"; ipre.value = pre;
            document.getElementById('formenviar').appendChild(ipre);
        }
    }
    // Envía los datos
    document.getElementById('formenviar').submit();
}
    </script>
    $data =  json_decode($response,true);    
    $i=0;
    $count = count($data);
    // recorre el array con el contador para mostrar todos
    // los productos activados
    if ($i <= $count){
    foreach($data as $k => $valor){
        if(($valor['tipodeproducto'] == 'MAYORISTA') OR ($valor['tipodeproducto'] == 'AMBOS') && ($valor['activo'] != 0))
                                    { 
    ?>  

                            <tr id="prueba2">   

                                    <td><input type="checkbox" id="cb1" value="1" class="cb"></input></td>
                                    <td id="fo$i"><a href="#" onclick="window.open('<?php echo $valor['foto'] ?>','TITULO','width =550,height=400' );"><img  src="<?php echo $valor['foto'] ; $i++ ;?>" border='0' width='50' height='50'> </td>
                                    <td id="d + $i"><?php echo $valor['descripcion']; ?></td>
                                    <td id="f + $i"><?php echo $valor['familia'] ;?></td>
                                    <td id="c + $i"><?php echo $valor['codigo'] ;?></td>
                                    <td id="da + $i"><?php echo $valor['descripcionadicional']; ?></td>
                                    <td id="p + $i"><?php if ($valor['precio1'] <= 0)
                                            echo "Sin disponibilidad";
                                        else
                                    echo $valor['precio1']; ?></td>

                                    <td>
                                        <!-- Icons -->

                                        <!-- <a href="#" title="Delete"><img src="resources/images/icons/cross.png" alt="Delete" /></a> 
                                         <a href="#" title="Edit Meta"><img src="resources/images/icons/hammer_screwdriver.png" alt="Edit Meta" /></a>
                                    --></td>
    </tr>       <?php   }
                                }

                    }?>
                    </tbody>

                        </table>
                    <form method="post" id="formenviar" action="pedido.php">
                                        <input type="button" value="Enviar" onclick="enviar();">
                                        </form>

0voto

Leonardo-Tadei comentado

Cambiase la Marca por la Imagen?

Las imágenes no se acceden vía innerHTML sino vía su SRC. De ser posible, dejá la imagen para luego de que te funcionen el resto de las cosas, porque tiene algunas diferencias de uso.

Estás incrementando mal $i: lo tenés que hacer antes de que sea usada en el foreach y al final del todo, no en entra parte.

También estás poniendo IDs inválidos a las etiquetas: el no poner el valor que tiene PHP de $i, la etiqueta te queda con id="d + $i" en vez de con id="d3" por ejemplo.
Tenés que poner:

<td id="d<?php echo $i; ?>"><?php echo $valor['descripcion']; ?></td>

o con los más cortos print implícitos:

<td id="d<?=$i?>"><?=$valor['descripcion']?></td>

Cuando tengas problemas así, lo mejor es apretar Ctrl + U en el navegador y ver qué código generaste para que le llegara al browser. Ahí se ven este tipo de inconsistencias y errores, que hacen que el JavaScript no se pueda ejecutar.

Saludos cordiales

0voto

matti comentado

Hice las modificaciones que me dijistes pero nada aun, hago un <?php var_dump($_POST); ?> en la pagina donde recibiria el table pero nada, muestra 0 directamente el array array(0) { }

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta