How to add internal lines to a HTML table? - php

This is how my current table looks like:
I would prefer the table has no border but contains internal lines. That means there should only be 8 horizontal lines. How do I achieve this?
Here are my codes:
<table class="table">
<?php
$file = fopen("Book1.csv","r");
$data = array();
while($row = fgetcsv($file)) {
$data[] = $row; //Get all the data
}
if($data){
$n_columns = count($data[0]); //Get number of columns
}
echo '<table border="0">';
for ($col = 0; $col < $n_columns; $col++) {
echo '<tr>';
foreach ($data as $row_k => $row) {
if ($row_k == 0) {
echo '<th>';
} else {
echo '<td>';
}
echo $row[$col] ?? '';
if ($row_k == 0) {
echo '</th>';
} else {
echo '</td>';
}
}
echo '</tr>';
}
echo '</table>';
?>
</table>
<style type="text/css">
table{
border-color: #17a2b8;
}
</style>

Try this:
table {
border-collapse: collapse;
width: 100%;
}
tr {
border-bottom: 1px solid #17a2b8;
}

First make your HTML valid by removing <table class="table"> and </table>.
You can then add a bottom border to every table row but the last one. For this to work you need to have border-collapse:collapse set on the table, else the table rows won't be stylable.
table {
border-collapse: collapse;
}
tr:not(:last-child) {
border-bottom: 1px solid #17a2b8;
}
<table>
<tr>
<td>1</td>
<td>2</td>
<td>3</td>
</tr>
<tr>
<td>1</td>
<td>2</td>
<td>3</td>
</tr>
<tr>
<td>1</td>
<td>2</td>
<td>3</td>
</tr>
<tr>
<td>1</td>
<td>2</td>
<td>3</td>
</tr>
</table>

Related

How to remove the last column border written in php?

I have the following code for the output:
<?php
function HailstoneNumbers($x){
echo '<tbody>';
static $c=0;
echo '<tr style="border-bottom:1px solid black; border-width: medium;"> <tr:last-child style="border-bottom:0;">';
echo '<td>'.$c.'</td>'.'<td>'.$x.'</td>';
echo '</tr>';
if ($x == 1 && $c == 0){
// N is initially 1.
return $c;
}
else if ($x == 1 && $c != 0){
// N is reduced to 1.
$c++;
}
else if ($x % 2 == 0){
// If N is Even.
$c++;
HailstoneNumbers((int)($x / 2));
}
else if ($x % 2 != 0){
// N is Odd.
$c++;
HailstoneNumbers(3 * $x + 1);
}
return $c;
}
$x = $_GET['x'];
if(isset($_GET['x'])){
echo '<table style="border-collapse:collapse; border-width:medium;">
<thead>
<tr style="border-bottom:1px solid black; border-width:medium;">
<th>Iteration</th><th>x</th>
</tr>
</thead>';
HailstoneNumbers($x);
echo '</tbody>'.'</table>';
}
?>
But I want the table that looks something like:
I want border between columns in header and entries, and bottom borders on all rows except for the last row. However, I am stuck on how to do that in php file without writing a css file.
You can use CSS property "border-style:hidden" on table and instead of applying CSS on TR or TH tag you can apply CSS directly on TD, something like:
https://jsfiddle.net/kht8mnLc/6/
<table style="border-collapse:collapse; border-width:medium; border-style:hidden;">
<thead>
<tr>
<th style="border:1px solid black;">Iteration</th>
<th style="border:1px solid black;">x</th>
</tr>
</thead>
<tbody>
<tr>
<td style="border:1px solid black;">aaa</td>
<td style="border:1px solid black;">bbb</td>
</tr>
<tr>
<td style="border:1px solid black;">aaa</td>
<td style="border:1px solid black;">bbb</td>
</tr>
<tr>
<td style="border:1px solid black;">aaa</td>
<td style="border:1px solid black;">bbb</td>
</tr>
</tbody>
</table>

How to display MySql records in a table with multi-level headers in PHP. Dynamic Pivot Table in PHP using MySqli

How do I generate Dynamic Pivot table in PHP using MySqli
I have records in MySql Database. Table structure is shown here
Now, I want to display the records in a table with multi-level headers., Like
Multi-level table, how I want to display the record.
How do I solve this issue? Please help. Thanks in advance
I have found this code, but does not appear as I want.
<?php
$output = array();
$c=1;
while($result = mysqli_fetch_array( $res ))
{
$output[$c]['headname'] = $result['headname'];
$output[$c]['accyear'] = $result['accyear'];
$output[$c]['fundamt'] = $result['fundamt'];
$output[$c]['fundutiamt'] = $result['fundutiamt'];
$c++;
}
?>
<table border="1">
<tr>
<th></th>
<?php
foreach ($output as $key => $html)
{
echo "<th>Solution ".$key."</th>";
}
?>
</tr>
<tr>
<td>Shipping Line</td>
<?php
foreach ($output as $key => $html)
{
echo "<td>".$html['accyear']."</td>";
}
?>
</tr>
<tr>
<?php
foreach ($output as $key => $html)
{
echo "<td>".$html['headname']."</td>";
}
?>
<td>POL</td>
</tr>
</table>
You can create a new array using the mysql result
<?php
$output = array();
while($result = mysqli_fetch_array( $res ))
{
$key=$result['accyear'];
if(!array_key_exists($key,$output)){
$output[$key]=array();
array_push($output[$key],array(
$result['headcode'] =array(
"fundamt" => $result['fundamt'],
"fundutiamt" => $result['fundutiamt'],
)
));
}
}
?>
print_r($output);
Result
2019 => [ 061182 => [fundamt => 12, fundutiamt => 23] ]
[ 961182 => [fundamt => 2, fundutiamt => 23] ]
You can use this array to make the table in HTML
Use the colspan attribute.
td,
th {
border: 1px solid rgb(190, 190, 190);
padding: 10px;
}
td {
text-align: center;
}
tr:nth-child(even) {
background-color: #eee;
}
th[scope="col"] {
background-color: #696969;
color: #fff;
}
th[scope="row"] {
background-color: #d7d9f2;
}
caption {
padding: 10px;
caption-side: bottom;
}
table {
border-collapse: collapse;
border: 2px solid rgb(200, 200, 200);
letter-spacing: 1px;
font-family: sans-serif;
font-size: .8rem;
}
<table>
<caption>Alien football stars</caption>
<tr>
<th scope="col">Player</th>
<th scope="col" colspan=2>Gloobles</th>
<th scope="col" colspan=2>Za'taak</th>
</tr>
<tr>
<th scope="col"></th>
<th scope="col">2016</th>
<th scope="col">2017</th>
<th scope="col">2016</th>
<th scope="col">2017</th>
</tr>
<tr>
<th scope="row">TR-7</th>
<td>7</td>
<td>4,569</td>
<td>7</td>
<td>4,569</td>
</tr>
<tr>
<th scope="row">Khiresh Odo</th>
<td>7</td>
<td>7,223</td>
<td>7</td>
<td>7,223</td>
</tr>
<tr>
<th scope="row">Mia Oolong</th>
<td>9</td>
<td>6,219</td>
<td>9</td>
<td>6,219</td>
</tr>
</table>
(original table from https://developer.mozilla.org/en-US/docs/Web/HTML/Element/td)

What's going wrong with my code

I am targeting a table in the database where the data is stored using serialize() function. So I am trying to unserialize the data & fetching in order to display in the HTML Table. The first row in the table, i.e, table data () is somehow displaying properly. But, the next data (coming through looping ) will be showing on the same line instead of next . Please help me out with this. Also if I am wrong in my explanation, please edit it. Here is my code...
<body style="font-family: verdana; letter-spacing: 2px">
<br><br>
<style>
table, td, th {
border: 1px solid #ddd;
text-align: left;
font-size: 14px;
}
table {
border-collapse: collapse;
width: 90%;
margin: 0 auto;
}
th, td {
padding: 10px;
}
</style>
<table style="border-collapse: collapse; margin: 0 auto" cellpadding="13" border="1" width="80%">
<tr>
<th>Status</th>
<th>Company Name</th>
<th>Address</th>
<th>Your Name</th>
<th>Email</th>
<th>Phone</th>
<th>Website</th>
<th>Software Link</th>
</tr>
<tr>
<?php
$con = mysqli_connect("localhost", "ghgh", "1223546", "rererer");
$que = "SELECT * FROM wp_db7_forms WHERE form_post_id = 6167";
$run = mysqli_query($con, $que);
while ($row = mysqli_fetch_array($run)) {
$form_value = $row['2'];
$form_date = $row['3'];
$array = unserialize($form_value);
$expire = date("Y-m-d", strtotime("+90 days"));
while (list($key, $value) = each($array)) {
?>
<td style="text-align: center;"><?php echo $value; ?></td>
<?php
}
}
?>
</tr>
</table>
</body
You are managing the tr tags wrongly. You really put all dynamic content in one row, since you only generate one opening and one closing tr tag for it -- outside of all loops you have.
So put them inside the outer loop:
<table style="border-collapse: collapse; margin: 0 auto" cellpadding="13" border="1" width="80%">
<tr>
<th>Status</th>
<th>Company Name</th>
<th>Address</th>
<th>Your Name</th>
<th>Email</th>
<th>Phone</th>
<th>Website</th>
<th>Software Link</th>
</tr>
<?php
$con = mysqli_connect("localhost", "ghgh", "1223546", "rererer");
$que = "SELECT * FROM wp_db7_forms WHERE form_post_id = 6167";
$run = mysqli_query($con, $que);
while ($row = mysqli_fetch_array($run))
{ ?>
<tr>
<?php
$form_value = $row['2'];
$form_date = $row['3'];
$array = unserialize($form_value);
$expire = date("Y-m-d", strtotime("+90 days"));
while (list($key, $value) = each($array)) {
?>
<td style="text-align: center;"><?php echo $value; ?></td>
<?php } ?>
</tr>
<?php } ?>
</table>
as #trincot said, you are managing the tr tags wrong, here's a cleaner version of the code separating the php and HTML to keep your code clean and more readable :
<?php
$connection = mysqli_connect('','','','');
$result = mysqli_query($connection,'SELECT .... ');
$rows = [];
while($row = mysqli_fetch_array($result))
{
$rows[] = [
'value' => $row['2'],
'date' => $row['3'],
'expire' => date("Y-m-d", strtotime("+90 days")),
'data' => unserialize($row['2'])
];
}
?>
<table style="border-collapse: collapse; margin: 0 auto" cellpadding="13" border="1" width="80%">
<tr>
<th>Status</th>
<th>Company Name</th>
<th>Address</th>
<th>Your Name</th>
<th>Email</th>
<th>Phone</th>
<th>Website</th>
<th>Software Link</th>
</tr>
<?php foreach($rows as $row) : ?>
<tr>
<?php foreach ($row['data'] as $key => $value) : ?>
<td style="text-align: center;"><?= $value; ?></td>
<?php endforeach; ?>
</tr>
<?php endforeach; ?>
</table>

How to create horizontal scroller inside table?

I have create a table where I have retrieve data from database and put into table. I have a column in my database which is duration. for example duration is 10 so, number of weeks are week1,week2,week3 and so on in the table format. Now, I want to give horizontal scroller of weeks. So, How can I do this ?Please help me.
code:
<table class="table table-bordered">
<thead>
<th>A1</th>
<th>A2</th>
<th>A3</th>
<th>A4</th>
<?php
foreach ($prop as $row)
{
$duration = $row['duration'];
for($i=1; $i<=$duration; $i++)
{
echo "<th>week".$i."</th>";
}
}
?>
<th>A5</th>
<th>Total</th>
</thead>
<tbody>
<?php
foreach ($prop as $row)
{
$duration = $row['duration'];
$role = explode(",", $row['role']);
foreach ($role as $key)
{
$this->db->select('*');
$this->db->from('designation_master');
$where = "id = '".$key."'";
$this->db->where($where);
$sql = $this->db->get();
$res = $sql->result_array();
foreach ($res as $rows)
{
$rol = $rows['designation_name'];
}
?>
<tr>
<td id="s-some"><?php echo $rol; ?></td>
<td id="s-some"></td>
<td id="s-some"></td>
<td id="s-some"></td>
<?php
$duration = $row['duration'];
for($i=1; $i<=$duration; $i++)
{
echo "<td>
<input type='text' name='a' id='a".$i."' style='width: 40px;'/>
</td>";
}
?>
<td id="s-some"></td>
<td id="s-some"></td>
</tr>
<?php
}
}
?>
</tbody>
</table>
Thank You
You can make a holder for your table. and place your table inside.
Use overflow and place the table inside an holder. You can check the code below for reference.
.table-box{
max-width: 100px;
overflow-x: scroll;
}
.table-holder{
overflow: hidden;
}
/* Not important -> table styling */
table {
font-family: arial, sans-serif;
border-collapse: collapse;
width: 100%;
}
td, th {
border: 1px solid #dddddd;
text-align: left;
padding: 8px;
}
tr:nth-child(even) {
background-color: #dddddd;
}
<div class="table-holder">
<div class="table-box">
<table >
<tr>
<th>Company</th>
<th>Contact</th>
<th>Country</th>
</tr>
<tr>
<td>Alfreds Futterkiste</td>
<td>Maria Anders</td>
<td>Germany</td>
</tr>
<tr>
<td>Centro comercial Moctezuma</td>
<td>Francisco Chang</td>
<td>Mexico</td>
</tr>
<tr>
<td>Ernst Handel</td>
<td>Roland Mendel</td>
<td>Austria</td>
</tr>
<tr>
<td>Island Trading</td>
<td>Helen Bennett</td>
<td>UK</td>
</tr>
<tr>
<td>Laughing Bacchus Winecellars</td>
<td>Yoshi Tannamuri</td>
<td>Canada</td>
</tr>
<tr>
<td>Magazzini Alimentari Riuniti</td>
<td>Giovanni Rovelli</td>
<td>Italy</td>
</tr>
</table>
</div>
</div>

In TCPDF how to tell if my table will be bigger than the page because in this case I would have to add a custom header for it

In TCPDF how can I tell if my table will be bigger than the page because in this case I would have to add a custom header for it. If I use $pdf->getAliasNumPage() to compare before I start the table and at the beginning of each row don't seem to work. $pdf->getAliasNumPage() if used second time return something like {:pnp:}
my code looks like this:
$table="";
$islasttable = 0;
for ($i = 0; $i<sizeof($ar); $i++) {
for ($j = 0; $j<3; $j++) {
if (isset ($ar[$i][$j])) {
if ($j == 0) {
if ($islasttable == 1) {
$table .= '</table><table border="1" style="text-align:center; vertical-align:middle; padding:5;border-bottopm:1px solid black;">';
$islasttable = 0;
} else {
$table .= '<table border="1" style="text-align:center; vertical-align:middle; padding:5;">';
}
$table .= '<tr>
<td colspan="3">Gefehrdungsfaktor</td>
<td colspan="8">'.$ar[$i][$j].'</td>
</tr>';
}
if ($j == 1) {
$table .= ' <tr >
<td colspan="3">gefahrebquelle</td>
<td colspan="8">'.$ar[$i][$j].'</td>
</tr>';
$flag = 1;
}
if ($j == 2) {
if ($flag == 1) {
$level = " top level2 with: ".$ArrayToGenerateTable[$i].' childs';
$table.='<tr>
<td colspan="11">Risiko</td>
</tr>';
$table.='<tr >
<td colspan="1" style="font-size: xx-small; background-color:#F3A505">GK </td>
<td colspan="5" style="background-color:#F3A505">(n)</td>
<td colspan="2" style="background-color:#F3A505"> ?</td>
<td colspan="2" style="background-color:#F3A505"></td>
<td colspan="1" style="font-size: xx-small; background-color:#F3A505">GK </td>
</tr>';
$table.='<tr >
<td colspan="1" rowspan="'.(($ArrayToGenerateTable[$i])*2).'" style="background-color:grey">0</td>
<td colspan="5" rowspan="2">'.$ar[$i][$j].'</td>
<td colspan="1" rowspan="1">ja</td>
<td colspan="1" rowspan="1">X</td>
<td colspan="2" rowspan="2"> </td>
<td colspan="1" rowspan="'.(($ArrayToGenerateTable[$i])*2).'" style="background-color:grey;">0</td>
</tr>
<tr >
<td colspan="1">nein'.'</td>
<td colspan="1">X</td>
</tr>';
} else {
$table.='<tr >
<td colspan="5" rowspan="2">'.$ar[$i][$j].'</td>
<td colspan="1">ja</td>
<td colspan="1">X</td>
<td colspan="2" rowspan="2"> </td>
</tr>
<tr >
<td>nein</td>
<td>X</td>
</tr>';
}
$level = '';
$flag=0;
$islasttable = 1;
}
}
}
}
$table.='</table>';
$pdf->AddPage();
$pdf->writeHTML($table, true, false, true, false, '');
One solution I have:
<style>
table{
table-layout: fixed;
}
td{
max-height:20px;
}
</style>
and with this I can calculate the number of lines.

Categories