Autor Tema: Introducir datos número variable desde tabla HTML y hacer query en mysql  (Leído 4342 veces)

suketere

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 9
    • Ver Perfil
Hola, soy nuevo en el foro, y estoy haciendo mis primeros desarrollos en html - php - mysql para hacer una web.

He conseguido introducir datos en un formulario y hacer query en mysql, pero lo que necesito hacer ahora no se como hacerlo:

Desde una web,en la que aparece un tabla con varias filas y 2 campos (ISIN e Importe) solicito al usuario que introduzca datos ella . La tabla está vacía, y el usuario puede rellenar las filas que el quiera (1, 2, 3..). Con la información que introduce, yo tengo que hacer después una query a la bd para extraer el resto de campos que tengo en ella, con el campo ISIN como primary key, y realizar una operación matemática con otros campos de cada registro y el importe introducido.

Lo que no se hacer es como recorrer las filas de la tabla HTML de la web inicial para ver cuantas filas hay rellenas de datos,controlar que estén rellenas y posteriormente hacer la/las querys necesarias en mysql.

Espero haberme explicado correctamente.

He buscado en el foro algún otro post similar, pero no lo he encontrado (no he podido mirar todos :-) ). Si alguien sabe que hay un hilo abierto sobre esto por favor que me lo indique

Gracias por la ayuda.

« Última modificación: 03 de Diciembre 2016, 20:08 por Alex Rodríguez »

suketere

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 9
    • Ver Perfil
Re:Introducir datos desde tabla HTML y hacer query en mysql
« Respuesta #1 en: 21 de Noviembre 2016, 13:42 »
Se me olvidaba.
este es el código de la pagina web que tiene la tabla para recibir los datos:
Código: [Seleccionar]
<!DOCTYPE html 5>
<html lang="es">
<head>
<title>HTML con PHP – Análisis Rebates</title>
<meta charset="utf-8" />
</head>
<body>
<br />

<br />
Esto es una p&aacute;gina para auditar su cartera.


<br />

<br />


 </table>


 <table border="1">

  <caption>Introduzca importe en euros e ISIN</caption>
<br />

<br />

    <thead>
        <tr>
           <th>Importe en euros</th>
           <th>ISIN</th>
         </tr>
    </thead>

    <tbody>

        <tr>
           <td><input type="num" name="importe" /td>
           <td><input type="text(12)" name="isin" /td>
        </tr>
<tr>
           <td><input type="num" name="importe" /td>
           <td><input type="text(12)" name="isin" /td>
        </tr>
<tr>
           <td><input type="num" name="importe" /td>
           <td><input type="text(12)" name="isin" /td>
        </tr>
<tr>
           <td><input type="num" name="importe" /td>
           <td><input type="text(12)" name="isin" /td>
        </tr>
<tr>
           <td><input type="num" name="importe" /td>
           <td><input type="text(12)" name="isin" /td>
        </tr>
   

    </tbody>

 </table>

<br />

<br />
 <form name="web-rebates_frm" action="archivo_destino.php" method="post" enctype="application/x-www-form-urlencoded">


 <input type="submit" name="Auditar_bnt" value ="Auditar">

<br />
<br />
</body>
</html>

Alex Rodríguez

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2050
    • Ver Perfil
Re:Introducir datos número variable desde tabla HTML y hacer query en mysql
« Respuesta #2 en: 03 de Diciembre 2016, 20:08 »
Hola suketere

Si tienes un formulario (o tabla) en html donde el número de datos que pueden ir es variable, lo primero que tienes que ver es si por variable entendemos que hay un máximo (por ejemplo 10 filas) o si no hay máximo.

Si hay un máximo por ejemplo de 10 filas, en PHP tendrás que recibir los datos por ejemplo en un array de 10 elementos (o un array de objetos de 10 elementos) y para cada uno de ellos comprobar si el dato introducido por el usuario está relleno o está vacío. Si está relleno, entonces hacer la consulta a la base de datos. Si está vacío, no habrá nada que hacer.

En esta dirección tienes cursos de HTML, CSS, JavaScript, PHP y Ajax muy útiles para desarrollos web: http://aprenderaprogramar.com/index.php?option=com_content&view=article&id=57&Itemid=86

Saludos

suketere

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 9
    • Ver Perfil
Re:Introducir datos número variable desde tabla HTML y hacer query en mysql
« Respuesta #3 en: 05 de Diciembre 2016, 16:19 »
Hola Alex.
muchas gracias por la aclaración.

si, en principio tengo que definir el numero máximo de filas (creo que serán 15).
ya he conseguido saber como identificar las variables en el html para recibir tantos datos que  se introduzcan ( en mi caso seria <input name="isin[]" ...)
Lo que no se es como recorrer la tabla de introducción de datos para comenzar a comparar con los que hay en la bd. He encontrado el condicional if (isset($_POST['isin[]']) && !empty($_POST['isin[]']) &&  isset($_POST['importe']) && !empty($_POST['importe'])) para chequear que tanto isin como importe no estan vacios, pero solo soy capaz de ver el primer dato introducido, ya que no se como meter este if en un bucle que recorra la tabla, y que vaya incrementando isin[] para que cambie de registro (ese array de n elementos que comentabas)

Un saludo

Alex Rodríguez

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2050
    • Ver Perfil
Re:Introducir datos número variable desde tabla HTML y hacer query en mysql
« Respuesta #4 en: 18 de Diciembre 2016, 12:16 »
Hola, habría dos situaciones a contemplar para recorrer las filas de una tabla html.

El primer caso, sería que la tabla fuera una tabla estática que se carga en una dirección web, en ese caso lo único que necesitamos es recorrerlas cargándola usando php por ejemplo. El código que puede servir para tomar la idea puede ser este:

Código: [Seleccionar]
$DOM = new DOMDocument();
$DOM->loadHTMLFile("file path or url");
$rows = $DOM->getElementsByTagName("tr");
for ($i = 0; $i < $rows->length; $i++) {
    $cols = $rows->item($i)->getElementsbyTagName("td");
    for ($j = 0; $j < $cols->length; $j++) {
        echo $cols->item($j)->nodeValue, "\t";
        // you can also use DOMElement::textContent
        // echo $cols->item($j)->textContent, "\t";
    }
    echo "\n";
}

El segundo caso, sería recorrer una tabla que fuera dinámica que es manipulada por el usuario y en un momento dado se necesita procesar del lado del servidor. Esto podría hacerse con JavaScript y Ajax (ver los cursos de referencia) pero hay más opciones.

Voy a citar la opción jquery que llevaría estos pasos

1) Usar jquery para leer los valores en la tabla html. El ejemplo se refiere a una tabla que tiene 4 columnas que son task no., date, description y task.

Código: [Seleccionar]
$('#sampleTbl tr').each(function(row, tr){
    TableData = TableData
        + $(tr).find('td:eq(0)').text() + ' '  // Task No.
        + $(tr).find('td:eq(1)').text() + ' '  // Date
        + $(tr).find('td:eq(2)').text() + ' '  // Description
        + $(tr).find('td:eq(3)').text() + ' '  // Task
        + '\n';
});

2) Guardar los valores html leídos de la tabla en un array multidimensional javascript

Código: [Seleccionar]
var TableData = new Array();
   
$('#sampleTbl tr').each(function(row, tr){
    TableData[row]={
        "taskNo" : $(tr).find('td:eq(0)').text()
        , "date" :$(tr).find('td:eq(1)').text()
        , "description" : $(tr).find('td:eq(2)').text()
        , "task" : $(tr).find('td:eq(3)').text()
    }
});
TableData.shift();  // first row is the table header - so remove

3) Convertir el array javascript a formato json

Código: [Seleccionar]
var TableData;
TableData = storeTblValues()
TableData = $.toJSON(TableData);

function storeTblValues()
{
    var TableData = new Array();

    $('#sampleTbl tr').each(function(row, tr){
        TableData[row]={
            "taskNo" : $(tr).find('td:eq(0)').text()
            , "date" :$(tr).find('td:eq(1)').text()
            , "description" : $(tr).find('td:eq(2)').text()
            , "task" : $(tr).find('td:eq(3)').text()
        }   
    });
    TableData.shift();  // first row will be empty - so remove
    return TableData;
}

4) Enviar los datos json

Código: [Seleccionar]
var TableData;
TableData = $.toJSON(storeTblValues());
               
 $.ajax({
    type: "POST",
    url: "processJSONarray.php",
    data: "pTableData=" + TableData,
    success: function(msg){
        // return value stored in msg variable
    }
});

En este último paso los datos se envían al servidor con el método POST, y la respuesta obtenida vienen en la variable msg

5) Procesar los datos json con php

Código: [Seleccionar]
// Unescape the string values in the JSON array
$tableData = stripcslashes($_POST['pTableData']);

// Decode the JSON array
$tableData = json_decode($tableData,TRUE);

// now $tableData can be accessed like a PHP array
echo $tableData[1]['description'];

Una vez que el array ha sido procesado por la función json_decode, el array puede accederse como un array php cualquiera. Por ejemplo  $tableData[1]['description']; nos devolverá el valor de la descripción de una fila de la tabla.

Saludos

suketere

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 9
    • Ver Perfil
Re:Introducir datos número variable desde tabla HTML y hacer query en mysql
« Respuesta #5 en: 22 de Diciembre 2016, 17:50 »
Hola Alex, muchas gracias por tus explicaciones.

La situación seria como indicas en el primer caso:
yo creo un formulario web, con x filas y columnas (creo que dejaré 20 filas x 2 columnas), y el usuario meterá datos en las filas que necesite. Yo tendré que recorrer dichas filas hasta que no haya texto, y haré las querys necesarias para comparar lo introducido co lo que tengo en mi db.

Graicas por el resto de opciones de código a través de Javascript y JSON,  pero soy principiante en esto, y lo único que conozco un poco es PHP.

De hecho, dentro del código que indicas en php, no había intentado trabajar aun con clases (entiendo que DOMDocument lo es, asi como getElementsByTagName)
Voy a ver si soy capaz de adaptar el código que indicas a mi desarrollo para ver si consigo recorrer la tabla.

Os comento los resultados.
Y gracias de nuevo Alex por tu tiempo.

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".