I'm trying to display data from different mysql tables in an html table. The problem I have is that it currently displays both in the same column. I'd like to have two separate columns in the table one for each of the sql data.
This is my code:
global $wpdb;
$centr = $wpdb->get_results('SELECT meta_value FROM `wp__frm_item_metas` WHERE `item_id` = 2');
$namelist = $wpdb->get_results('SELECT name FROM `wp__frm_fields` WHERE form_id = 2');
echo "<table>";
if ( !empty( $centr ) ) {
foreach ($namelist as $key) {
# code...
echo "<tr><td>" . $key->name . "</tr></td>";
}
foreach ( $centr as $r ) {
echo"<tr><td>" . $r->meta_value . "</tr></td>";
}
}
echo "</table>";
I'd like the second echo to start in a new column, instead of displaying more rows in the same one.
I guess this is what you want
echo "<table>";
if ( !empty( $centr ) ) {
echo "<tr><td>";
foreach ($namelist as $key) {
echo "<table><tr><td>" . $key->name . "</td></tr></table>";
}
echo "</td><td>";
foreach ( $centr as $r ) {
echo"<table><tr><td>" . $r->meta_value . "</td></tr></table>";
}
echo "</td></tr>";
}
echo "</table>";
Related
So I'm new to coding and I was looking at arrays and I want to know if it's possible to display the last piece of data from an array first and the first piece of data to be last. This is the code I have.
<?php
$trans = array
(
array("10/3/22",1,54),
array("10/48/32", 54,54),
array("3/29/2018", 54, 128.84)
);
echo '<table border="1">';
echo '<tr><th>Date</th><th>Before Balance</th><th>After Balance</th></tr>';
foreach ($trans as $tran) {
echo '<tr>';
foreach( $tran as $data ) {
echo '<td>' . $data . '</td>';
}
echo '</tr>';
}
echo '</table>';
Use
array_reverse($array);
For more info http://php.net/manual/en/function.array-reverse.php
use array_reverse as follows in your forloop
foreach (array_reverse($trans) as $tran) {
echo '<tr>';
foreach( $tran as $data ) {
echo '<td>' . $data . '</td>';
}
echo '</tr>';
}
My query selects all columns from my table
$spool = $wpdb->get_results('SELECT * FROM `tablename`');
then I display the results in a table. I need to display all columns. This is the way I do it.
echo "<table>";
if ( !empty( $spool ) ) {
echo "<tr><th> header </th></tr>";
foreach ( $spool as $a ) {
echo "<tr><th>" . $a->columnname1 . "</th><th>" .$a->columnnameN . "</th></tr>";
}
}
echo "</table>";
Now since I have around 40 columns, I'd like to ask if there is a more intelligent and less tedious way of displaying them.
probably you need nested loops, you are getting result probably like this
array(
0:{column1:test,column2:test . . . },
1:{column1:test,column2:test . . . }
)
so you can try this way
echo "<table>";
if ( !empty( $spool ) ) {
echo "<tr><th> header </th></tr>";
foreach ( $spool as $key => $value ) {
echo '<tr>';
foreach ( $value as $a ) {
echo "<th>" . $a. "</th>";
}
echo '</tr>';
}
}
echo "</table>";
As you have objects you could cast them to arrays and use implode.
(But attribute order could be different from what you want.)
<?php
class A
{
public $foo = 'bing';
public $bar = 'bang';
public $baz = 'bong';
}
$spool = [new A, new A];
echo '<table>';
foreach($spool as $a) {
echo '<tr>';
echo '<td>' . implode('</td><td>', (array) $a) . '</td>';
echo '</tr>';
}
echo '</table>';
Output:
<table><tr><td>bing</td><td>bang</td><td>bong</td></tr><tr><td>bing</td><td>bang</td><td>bong</td></tr></table>
Ive got a pretty basic table named 'customers' with four columns:
ID (primary Auto Increment)
businessName
contactName
contactEmail
I call it with:
$result = mysqli_query($con, "SELECT * FROM customers");
and was using mysqli_fetch_array to display it on the page with a foreach loop:
while ($row = mysqli_fetch_array($result, MYSQLI_ASSOC))
{
echo "<tr>";
foreach ($row as $value) {
echo "<td>" . $value . "</td>";
}
echo "<td><a href='updateform.php?id=" . $row['id'] . "'>Edit</a></td>";
echo "</tr>";
}
Which gives you an array like:
Array ( [id] => 1 [businessName] => Microsoft [contactName] => Bill Gates [contactEmail] => bill#microsoft.com ) Array ( [id] => 2 [businessName] => Amazon [contactName] => Jeff Bezos [contactEmail] => jeff#amazon.com )
Is it possible to display results differently based on which column (technically now position in the array) they are in? I would like to make a
a href="mailto:bill#microsoft.com"
link when it gets to contactEmail.
What if I wanted to display just one key or value instead of using foreach?
It doesn't seem possible to call
$row['contactEmail']
in the foreach loop
which confuses me since below that I am able to create a link to
$row['id']
If anyone has any ideas how to do this, or if there is a better way to be displaying this information, I'm open to suggestions, as I'm not very good at programming, especially PHP.
Yes! you can just add like this:
while ($row = mysqli_fetch_array($result, MYSQLI_ASSOC))
{
echo "<tr>";
foreach ($row as $key => $value) {
if($key == "contactEmail"){
$mailUrl = "mailto:".$value;
echo "<td>".$value."";
}
else{
echo "<td>" . $value . "</td>";
}
}
echo "<td><a href='updateform.php?id=" . $row['id'] . "'>Edit</a></td>";
echo "</tr>";
}
Yes, You can able to mysqli_fetch_array retrieve data directly using foreach loop. like bellow :
<?php
$result = mysqli_query($con, "SELECT * FROM customers");
?>
<table>
<tr>
<td>Business Name</td>
<td>Contact Name</td>
<td>#</td>
</tr>
<?php
while ($row = mysqli_fetch_array($result, MYSQLI_ASSOC))
{
echo "<tr>";
echo "<td>".$row['businessName']."</td>";
foreach ($row as $key => $value) {
$newValue = $key == "contactEmail" ? ''.$value.'' : $value;
echo "<td>" . $newValue . "</td>";
}
echo "<td><a href='updateform.php?id=" . $row['id'] . "'>Edit</a></td>";
echo "</tr>";
}
?>
</table>
The following code generate the result(one record) in a vertical table is there any way to convert to horizontal like with a nice styling.. in addition if possible to get certain column in a popup window using the parameter in the query, using jquery or CSS
<html>
<head>
<link rel="stylesheet" href="style.css" type="text/css" />
</head>
<body>
<?
$table = $_GET["table"];
$lon = $_GET["lon"];
$lat = $_GET["lat"];
$sql = "select
st_geometrytype(geom) as geometrytype,
st_area(geom) as area, *
from $table
where
st_contains(
geom,
st_transform(
st_setsrid(
st_makepoint($lon, $lat),
4326),
2276))";
$db = pg_connect("dbname=db user=user password=pass");
$result = pg_query($db, $sql);
while( $row = pg_fetch_assoc($result) )
{
print "<table>";
foreach ( array_keys($row) as $column_name )
{
if ( $column_name <> "geom" )
{
print "<tr>";
print "<th>" . $column_name . "</th>";
print "<td>" . $row[$column_name] . "</td>";
print "</tr>";
}
}
print "</table>";
}
?>
</body>
</html>
so far I am using this CSS to style my table.
th
{
text-align:right;
padding-right:0.5em;
}
td
{
text-align:center;
}
many thanks..
Your are printing the tr at the same time the loop runs, so it will make trs and obviously it will be vertical, to make it horizontal , your loop will be like this;
while( $row = pg_fetch_assoc($result) )
{
print "<table>";
print "<tr>";
foreach ( array_keys($row) as $column )
{
if ( $column_name <> "geom" )
{
print "<th>" . $column . "</th>";
}
}
print "</tr>";
print "<tr>"; <-- this one here opening tag
foreach ( array_keys($row) as $column_name )
{
if ( $column_name <> "geom" )
{
print "<td>" . $row[$column_name] . "</td>";
}
}
print "</tr>"; <-- this one here closing tag
print "</table>";
}
code for display 8 elements horizontally.
<table>
<?if($c==8){echo "<tr >";$c=0; }<td> ?>
// your elements
<? echo "</td>";
$c++;?>
</tr>
</table>
Hi all i'm not very experienced with programming so this is probably easy to achieve.
I am pulling data from a mysql table using php i want to display the output like so:
$row[1] $row[2] Line break
$row[3] $row[4] Line break
$row[5] $row[6] Line break
And so on
Any help would be appreciated thanks
$user_table = select_table( "users", "user_name ASC" );
$rows = array( );
while( $row = mysqli_fetch_assoc( $user_table ) ) {
$rows[] = $row;
}
$user_groups = array_chunk( $rows, 2 );
foreach ( $user_groups as $user_group ) {
echo "<tr>";
foreach( $user_group as $row ) {
echo "<td class=\"user-box\">{$row["user_name"]}</td>";
}
echo "</tr>";
}
This is my working code. Thanks Tim
Loop through your results and start counting again after 2.
here's an example using a simple array and a table so you can see how it works
<?php
$results = array('one','two','three','four');
echo '<table border="1">';
foreach(array_chunk($results,2) as $row) {
echo '<tr>';
foreach($row as $value) {
echo '<td>'.$value.'</td>';
}
echo '</tr>';
}
echo '</table>';