Preluare si salvare date din tabel HTML in baza de date

Discutii si intrebari legate de scripturi si functii JavaScript, jQuery si Ajax, cod JavaScript in general.
andras
Mesaje: 430

Preluare si salvare date din tabel HTML in baza de date

Salut,
Cum salvez datele dintr-un tabel html (sa zicem ca are 10 linii si 5 coloane) in baza de date folosind PHP (si js sau jQuery)?
Tabelul l-am incadrat intr-un <form> si trebuie sa parcurg fiecare linie, sa salvez toate datele din linie in variabile sau array apoi cumva sa le duc intr-un fisier.php de unde sa le preiau in variabile PHP. Daca ar fi o singura linie ar fi simplu cu <form>, dar sint mai multe linii. Se recomanda sa am <form> pentru fiecare linie din <tbody>? Am auzit ca nu.

Ma intereseaza partea din html-> javascript-> fisier.php. De acolo cunosc partea php de salvare din PHP in MYSQL.

Si inca o intrebare tot aici: daca pun ceva de genul

Cod: Selectaţi tot

<td name="celula1"> xxx </td>
este recunoscuta valoarea xxx in: $_POST['celula1'] sau $_GET['celula1']?
Multumesc.

MarPlo Mesaje: 4343
Salut
Doar elemente de formular pot avea atribut "name" pentru a fi trimise la un script pe server.

Uite o functie JavaScript care returneaza un array 2-dimensional cu datele din <td> din fiecare rand.
Cu JSON.stringify(array) se transforma array-ul intr-un sir cu format JSON.
Apoi, sirul il adaugi in GET sau POST in Ajax si-l trimiti la PHP.
In PHP se aplica json_decode(); ca sa transformi sirul inapoi in array utilizabil in PHP.

Cod: Selectaţi tot

<script>
function getTableData(id) {
 // function to get table cells data (from: https://coursesweb.net/ )
 // receives table ID. Returns 2 dimensional array with TD data in each row
  var t_rows = document.getElementById(id).querySelectorAll('tbody tr');    // rows from tbody
  var t_data = [];    // will store data from each TD of each row
  var ix = 0;    // index of rows in t_data

  // gets and dds td data in t_data
  for(var i=0; i<t_rows.length; i++) {
    var row_tds = t_rows[i].querySelectorAll('td');
    if(row_tds.length > 0) {
      t_data[ix] = [];
      for(var i2=0; i2<row_tds.length; i2++) t_data[ix].push((row_tds[i2].innerText || row_tds[i2].textContent));
      ix++;
    }
  }
  return t_data;
}

  /* USAGE */
var get_table_tds = getTableData('t_id');    // get the array with table data
var json_sr_tds = JSON.stringify(get_table_tds);    // JSON string with table data

// console.log(json_sr_tds);   // for debug
// result: [["156","2668","100.95","1.82"],["256","618","10.35","1.82"],["789","28","105.8","15.89"]]
</script>
Tabel de test:

Cod: Selectaţi tot

<table id="t_id">
<tbody>
  <tr>
    <th>col_1</th>
    <th>col_2</th>
    <th>col_3</th>
    <th>col_4</th>
  </tr>
  <tr>
    <td>156</td>
    <td>2668</td>
    <td>100.95</td>
    <td>1.82</td>
  </tr>
  <tr>
    <td>256</td>
    <td>618</td>
    <td>10.35</td>
    <td>1.82</td>
  </tr>
  <tr>
    <td>789</td>
    <td>28</td>
    <td>105.8</td>
    <td>15.89</td>
  </tr>
</tbody></table>

andras Mesaje: 430
MarPlo, o sa studiez pe indelete.
Dar ceva de genul :

Cod: Selectaţi tot

<form method="post" action="fisier.php">
<table><thead><th>coloana</th></thead><tbody><tr>
<td name="celula1"> xxx </td>
</tr></tbody>
</table>
</form>
pot folosi pentru preluarea xxx in $_POST['celula1']?

MarPlo Mesaje: 4343
Nu
Probabil aflai mai repede daca incercai.
Doar elementele speciale de formular pot avea atribut "name" pentru a fi trimise la un script pe server (input, select, textarea).
Dar ca idee, ai putea sa adaugi in celula un <input> ascuns.

Cod: Selectaţi tot

<form method="post" action="fisier.php">
<table><thead><th>coloana</th></thead><tbody><tr>
<td>valoare <input type="hidden" name="celula1" value="valoare" /></td>
</tr></tbody>
</table>
</form>

andras Mesaje: 430
Am incercat cu "hidden" dar n-am reusit pentru ca nu stiu sa pun din jQuery in hidden. Nu-i nimic, mai sap, poate reusesc.

Edit:
- Am rezolvat-o pana la urma, Preiau datele celulei in functia Ajax. In stop: se pune

Cod: Selectaţi tot

var g = ui.item[0].cells[1].innerHTML;
Si apoi variabila "g" se preia in ajax().
Salut!

Subiecte similare