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 Puntos227320

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

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