Multiplicare randuri in tabel html din select mysql

Discutii despre script-uri si coduri PHP-MySQL, precum si lucru cu XML in PHP.
sterica
Mesaje: 272

Multiplicare randuri in tabel html din select mysql

Salutare,
Am urmatoare variabila:

Cod: Selectaţi tot

$tbl_chest = "<table class='table table-bordered table-striped'><thead><tr><th>NUME</th>";
si urmatoarele selecturi

Cod: Selectaţi tot

$sql_intrebari = "SELECT ...";
$result_intrebari = $conn->query($sql_intrebari);
if ($result_intrebari->num_rows > 0) {
  while($row = $result_intrebari->fetch_assoc()) {
  	$tbl_chest .= '<th>' . $row['INTREBARE'] . '</th>';
  }
}

$tbl_chest .= '</tr></thead><tbody>';


$sql_personal = "SELECT ....";
$result_personal = $conn_lmd->query($sql_personal);

if ($result_personal->num_rows > 0) {
  while($row = $result_personal->fetch_assoc()) {
  	$tbl_chest = '<tr><td>' . $row['NUME'] . ' ' . $row['PRENUME'] . '</td><td>he he</td>';
  }
}

$tbl_chest .= '</tbody></table>';
echo $tbl_chest;
In forma aceasta $tbl_chest din interiorul al doilea while imi gnereaza foarte multe linii de tabel (le multipla de cateva ori bune). Ce imi cauzeaza multiplicarea aceasta

Multumesc!

MarPlo
Salut
In codul pt adaugare randuri in tabelul html din al doilea while() lipseste tag-ul de inchidere rand (</tr>). In rest, multiplicarea poate fi de la Select-ul in mysql, daca asa e rezultatul returnat de select.

misat
Secventa de cod pe care ai publicat-o, afisa doar o frintura de tabel (deoarece in "al doilea while" de fiecare data variabilei $tbl_chest i se atribuie o valoare noua):

Cod: Selectaţi tot

<tr><td>Nume</td><td>he he</td></tr></thead><tbody>
Totusi daca ar exista concatenarea, tabelul care se obtine va fi "incorect". Pe prima linie se genereaza mai multe celule (in thead se genereaza mai multe th), iar pe urmatoarele linii ai doar o singura celula (corect ar fi sa indici atributul colspan).
Chear daca tabelul ar fi corect nu observ vreo problema care ar provoca generarea liniilor de citeva ori.

sterica
revin cu ajustarile mentionate mai sus:

Cod: Selectaţi tot

$tbl_chest = "<table class='table table-bordered table-striped'><thead><tr><th>NUME</th>";
din sql, SELECT cu primul while, imi sunt generate 7 randuri

Cod: Selectaţi tot

while($row = $result_intrebari->fetch_assoc()) {
  	$tbl_chest .= '<th>' . $row['INTREBARE'] . '</th>';
  }

Cod: Selectaţi tot

$tbl_chest .= '</tr></thead><tbody>';
al doilea while (aici daca inlocuiesc variabila cu echo, imi sunt generate corect liniile din sql)

Cod: Selectaţi tot

while($row = $result_personal->fetch_assoc()) {
  	$tbl_chest .= '<tr><td>' . $row['NUME'] . ' ' . $row['PRENUME'] . '</td><td>1</td><td>2</td><td>3</td><td>4</td><td>5</td><td>6</td><td>7</td></tr>';
  }

Cod: Selectaţi tot

$tbl_chest .= '</tbody></table>';
echo $tbl_chest;
Cand se executa codul in al doilea while valorile sunt multiplicate de 8 ori.

Multumesc!

misat
Nu exista un motiv din care s-ar multiplica liniile care se genereaza in tabel.
Codul de mai jos genereaza un tabel corect:

Cod: Selectaţi tot

$tbl_chest = "<table class='table table-bordered table-striped'><thead><tr><th>NUME</th>";
$result = [
    ['INTREBARE'=>'i1'],
    ['INTREBARE'=>'i2'],
    ['INTREBARE'=>'i3'],
    ['INTREBARE'=>'i4'],
    ['INTREBARE'=>'i5'],
    ['INTREBARE'=>'i6'],
    ['INTREBARE'=>'i7'],
];
$i_count = count($result);

foreach ($result as $row) {
    $tbl_chest .= '<th>' . $row['INTREBARE'] . '</th>';
}

$result = [
    ['NUME' => 'Popescu', 'PRENUME' => 'Ion'],
    ['NUME' => 'Popescu', 'PRENUME' => 'Ion'],
    ['NUME' => 'Popescu', 'PRENUME' => 'Ion'],
    ['NUME' => 'Popescu', 'PRENUME' => 'Ion'],
    ['NUME' => 'Popescu', 'PRENUME' => 'Ion'],
];

$_td = '';
for ($i = 0; $i < $i_count; ++$i) {
    $_td .= '<td>'.($i+1).'</td>';
}

foreach ($result as $row) {
    $tbl_chest .= '<tr><td>' . $row['NUME'] . ' ' . $row['PRENUME'] . '</td>' . $_td . '</tr>';
}
$tbl_chest .= '</tbody></table>';
echo $tbl_chest;
Unicul lucru care poate provoca multiplicarea unei linii de citeva ori este datele din db. Esti sigur ca in db nu ai un nume repetat de mai multe ori?
Sigur nu se mai executa alt cod pentru generarea tabelului?

sterica
@misat, intredevar ai avut dreptate tbody era multiplicat din cauza unui script pe care il aveam in fisier.

Cod: Selectaţi tot

  <script>
    // adding filler rows
    for(var i = 0; i < 3; i++){
      $('tbody tr').clone().appendTo('table');
    }
    var offset = $('.navbar').height();
    $("html:not(.legacy) table").stickyTableHeaders({fixedOffset: offset});
  </script>
 
Multumesc de ajutor!

Subiecte similare