I have looked extensively through the site and have come to the conclusion that I am encountering a problem that many people do, yet none of the answers I have seen seem to work!
Basically, I am trying to populate an HTML table from the data stored in a mySQL table. The data is in a table called "categories". When I load the page, the table headers appear but no table data.
I have written and rewritten my code no less than 4 times - it works fine as an "ul" or when rendered as just plain text, but as soon as I put it into a "table" to seems to stop working!
Here's my code:
<?php
include("includes/dbconnect.php"); //This works fine as tested on the page
$sql = "SELECT * FROM products";
$myData = mysql_query($sql) or die (mysql_error());
$product = mysql_fetch_array($myData);
?>
<html>
<head>
<title></title>
</head>
<body>
//This plain text works
<?php do {
echo $product['title']." <br />";
} while ($product = mysql_fetch_array($myData));
//-----------------------------------------
//Table - doesnt work
echo "<table border=1>
<tr>
<th>Title</th>
<th>Category</th>
<th>Sport</th>
<th>Team</th>
<th>Price</th>
<th>Shipping</th>
</tr>";
while ($product = mysql_fetch_array($myData)) {
echo "<tr>";
echo "<td>".$product['title']."</td>";
echo "<td>" . $product['category'] . "</td>";
echo "<td>" . $product['sport'] . "</td>";
echo "<td>" . $product['team'] . "</td>";
echo "<td>" . $product['price'] . "</td>";
echo "<td>" . $product['shipping'] . "</td>";
echo "</tr>";
}
echo "</table>";
?>
</body>
</html>
I really am at my wits end, Ive worked my way through countless YouTube tutorials and still for some reason the code wont work. Can anyone help?
You've already run mysql_fetch_array in a do while loop at the top of your code. You aren't able to pull a result row more than once. Instead, push all of the the returned rows on to an array:
$products = array();
while ($product = mysql_fetch_array($myData)) {
$products[] = $product;
}
You can then loop through $products as many times as you'd like to build out your page. So for your table, this would look like:
echo "<table border=1>
<tr>
<th>Title</th>
<th>Category</th>
<th>Sport</th>
<th>Team</th>
<th>Price</th>
<th>Shipping</th>
</tr>";
foreach($products as $item) {
echo "<tr>";
echo "<td>" . $item['title'] . "</td>";
echo "<td>" . $item['category'] . "</td>";
echo "<td>" . $item['sport'] . "</td>";
echo "<td>" . $item['team'] . "</td>";
echo "<td>" . $item['price'] . "</td>";
echo "<td>" . $item['shipping'] . "</td>";
echo "</tr>";
}
echo "</table>";
if that code really looks like this remove the do-while loop and everything where you iterate over your $mydata and it will work since you waste the internal mysql-counter
meaning in the second loop your $result is already at the end, either you query again OR you push all the results in an array for multiple use
You have already pulled your data once with this.....$product = mysql_fetch_array($myData);
so just use this array with foreach loop....
foreach($product as $sProduct){
// User $sProduct to access that single product.
}
Your code contains many bugs and implementation
try this if it works for you :
<?php
include("includes/dbconnect.php");
$sql = "SELECT * FROM products";
$myData = mysql_query($sql) or die (mysql_error());
?>
<html>
<head>
<title></title>
</head>
<body>
//This plain text works
<?php
if(mysql_num_rows ($myData) > 0)
{
$html = "<table border=1><tr>
<th>Title</th>
<th>Category</th>
<th>Sport</th>
<th>Team</th>
<th>Price</th>
<th>Shipping</th></tr>";
while ($product = mysql_fetch_array($myData))
{
$html .= "<tr>";
$html .= "<td>".$product['title']."</td>";
$html .= "<td>".$product['category']."</td>";
$html .= "<td>".$product['sport']."</td>";
$html .= "<td>".$product['team']."</td>";
$html .= "<td>" . $product['shipping'] . "</td>";
$html .= "</tr>";
}
$html .= "</table>";
echo $html;
}
else
{
echo "No Product Found";
}
?>
</body>
</html>
If this works for you, you can figure out the problems or I will explain :)
Related
I would like to know how can I display my MySQL result in PHP using tables. I have done a lot of research in this question. However I didn't find a way to solve my question. Here's my code.
<html>
<head>
</head>
<body>
<?php
$con = mysql_connect("localhost","root","123456");
if (!$con) {
die("Cannot Connect: " . mysql_error());
}
mysql_select_db("androidlogin",$con);
$sql = "select id, speed, distance FROM result";
$data = mysql_query($sql,$con);
echo "<table border=1>
<tr>
<th>ID</th>
<th>Speed</th>
<th>Distance</th>
</tr>";
while($record = mysql_fetch_array($data)){
echo "<tr>";
echo "<td>" . $record['ID'] . "</td>";
echo "<td>" . $record['Speed'] . "</td>";
echo "<td>" . $record['Distance'] . "</td>";
echo "</tr>";
}
echo "</table>";
mysql_close($con);
?>
</body>
</html>
It seems that it does not having any problems or I'm just too bad in it.
The output of the web: http://tinypic.com/r/2hdnypd/9
By the way, this code will be change a bit so that it will becomes leaderboard. And I have another problem, how should I do if I want to see where my record ranked, while the code $sql = "select users.username, result.speed, result.distance FROM result, users where result.id = users.id order by result.speed desc limit 10";?
Your db columns are id,speed and distance but while fetching records and displaying you are using it as ID, Speed and Distance.
So please change this part:
while($record = mysql_fetch_array($data)){
echo "<tr>";
echo "<td>" . $record['id'] . "</td>";
echo "<td>" . $record['speed'] . "</td>";
echo "<td>" . $record['distance'] . "</td>";
echo "</tr>";
}
I'm trying to display the results of a database on a webpage. Using this example, I have come up with this piece of php code below:
<?php
$con=mysqli_connect("217.199.187.70","cl52-domains","######","cl52-domains");
// Check connection
if (mysqli_connect_errno())
{
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
$results = mysqli_query($con, "SELECT * FROM domains");
echo "<table border='1'>
<tr>
<th>ID</th>
<th>Domain</th>
<th>Address</th>
<th>Price</th>
</tr>";
while($row = mysqli_fetch_array($result))
{
echo "<tr>";
echo "<td>" . $row['id'] . "</td>";
echo "<td>" . $row['domain_name'] . "</td>";
echo "<td>" . $row['domain_address'] . "</td>";
echo "<td>" . $row['price'] . "</td>";
echo "</tr>";
}
echo "</table>";
mysqli_close($con);
?>
However, when I refresh my webpage, it shows the table header (no errors), but 0 results. Here is my table specifications:
Can someone tell me why I'm not getting any results?
Change
while($row = mysqli_fetch_array($result))
To
while($row = mysqli_fetch_array($results))
You probably made a typo in referencing the $results variable.
I've a php page with embedded HTML and I'm displaying data from a MySQL database. PHP is echoing the html inside the php page. All of the data is being returned; however, the data table is being displayed with an extra column and the data that should be in the last column is displayed in the extra column (e.g. my last name is 'Last Name,' but there is an extra column after 'Last Name' with the 'last name' data).
What am I doing wrong here?
Thanks.
get_records.php
//make connection
$conn = mysql_connect('localhost', 'root', '');
//select db
mysql_select_db('kis');
if (!$conn) {
die("Can not connect: " . mysql_error());
}
//select db and run query
mysql_select_db('kis');
$sql = "SELECT * FROM users";
$records = mysql_query($sql);
?>
<!DOCTYPE html>
<html lang="en">
<head>
<link rel="stylesheet" type="text/css" href="css/TableCSSCode.css" media="all"/>
<title>Volunteer Data</title>
</head>
<body>
<div class="CSSTableGenerator">
<h1>Volunteer Records</h1>
<table>
<tr>
<th>First Name</th>
<th>Middle Name</th>
<th>Last Name</th>
</tr>
<tr>
<?php
//loop through the records and display in page
while ($users = mysql_fetch_assoc($records)) {
echo "<tr>";
echo "<td>" . $users['firstname'] . "</td>";
echo "<td>" . $users['middlename'] . "<td>";
echo "<td>" . $users['lastname'] . "<td>";
echo "</tr>";
}//end while
?>
</tr>
</table>
</div>
<!--end #dr_container-->
</body>
</html>
You need to close the td's
echo "<td>" . $users['middlename'] . "</td>";
echo "<td>" . $users['lastname'] . "</td>";
You have not properly closed your td tags:
echo "<td>" . $users['middlename'] . "<td>";
echo "<td>" . $users['lastname'] . "<td>";
It should be </td> at the end.
You're echoing the row tags (<tr>). So, don't add additional ones in the plain html (just around your PHP code).
Close "td" tag.
Remove "tr" tags before and after where php code start because there are already tr tags inside the php code.
Following is the updated HTML of table:
<table>
<tr>
<th>First Name</th>
<th>Middle Name</th>
<th>Last Name</th>
</tr>
<?php
//loop through the records and display in page
while ($users = mysql_fetch_assoc($records)) {
echo "<tr>";
echo "<td>" . $users['firstname'] . "</td>";
echo "<td>" . $users['middlename'] . "</td>";
echo "<td>" . $users['lastname'] . "</td>";
echo "</tr>";
}//end while
?>
I'm trying to display members from my database using PHP, however the last name goes in with the first name and I'm not quite sure why... Could anyone point me in the right direction?
<?php
$mysql_db_hostname = "localhost";
$mysql_db_user = "alex";
$mysql_db_password="";
$mysql_db_database="gym";
$con = mysql_connect($mysql_db_hostname, $mysql_db_user, $mysql_db_password) or die("Could not connect database");
mysql_select_db($mysql_db_database, $con) or die("Could not select database");
$query = mysql_query("select * from users WHERE Category='Member'");
echo "<table border=1>
<tr>
<th>Users ID</th>
<th>First Name</th>
<th>Last Name</th>
</tr>";
while($row =mysql_fetch_assoc($query))
{
echo "<tr>";
echo "<td>" . $row['user_id']."<br>" . "</td>";
echo "<td>" . $row['First_Name']."<br>" . "</td";
echo "<td>" . $row['Last_Name']."<br>" . "</td";
echo "</tr>";
}
echo "</table";
?>
You aren't closing the tags. Syntax highlighter would show the error.
while($row =mysql_fetch_assoc($query))
{
echo "<tr>";
echo "<td>" . $row['user_id']."<br>" . "</td>";
echo "<td>" . $row['First_Name']."<br>" . "</td"; <-----------
echo "<td>" . $row['Last_Name']."<br>" . "</td"; <------------
echo "</tr>";
}
You are not closing your <td> tags properly
echo "<td>" . $row['First_Name']."<br>" . "</td>";
//^here
echo "<td>" . $row['Last_Name']."<br>" . "</td>";
//^and here
So the output is all one cell with both variables printed inside
You forgot to close the td on your first name field.
Just change
</td
to
</td>
Im building a web site that will return results from mysql and display them on a web page.
I have no problem with storing the data in mysql or retrieving the data
and displaying it on the web page.
When the data is returned to the page I want to store it in a table and run a loop so that for each record there will be a number incremented down the side like a list number.
Any help would be appreciated.
I keep running into errors with my code:
<?php
$con = mysql_connect("localhost","root","");
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
mysql_select_db("forloops", $con);
$result = mysql_query("SELECT * FROM userinfo ORDER BY age DESC");
echo "<table border='1'>
<tr>
<th>Position</th>
<th>Firstname</th>
<th>Lastname</th>
<th>Age</th>
</tr>";
$counter = 0;
$position= 0;
$row = mysql_fetch_array($result);
if($counter <=10){
echo "<tr>";
echo "<td>" . $position . "</td>";
echo "<td>" . $row['firstname'] . "</td>";
echo "<td>" . $row['lastname'] . "</td>";
echo "<td>" . $row['age'] . "</td>";
echo "</tr>";
$counter++;
}
echo "</table>";
mysql_close($con);
?>
The problem with your current code is that you're only fetching the first row from the query, take a look at how I've down it below:
echo "<table border='1'>
<tr>
<th>Position</th>
<th>Firstname</th>
<th>Lastname</th>
<th>Age</th>
</tr>";
$counter = 0;
$position= 0;
while ($row = mysql_fetch_array($result)) { // This is new code
if($counter <=10){
echo "<tr>";
echo "<td>" . $position . "</td>";
echo "<td>" . $row['firstname'] . "</td>";
echo "<td>" . $row['lastname'] . "</td>";
echo "<td>" . $row['age'] . "</td>";
echo "</tr>";
$counter++;
}
} // This is new code
echo "</table>";
mysql_close($con);
?>
If you notice, I've created a loop around the echoing of the table's rows <tr> and cells <td>.
This while loop will go through each row returned from the query.
If you have more then one result from database, you should use:
while ($row = mysql_fetch_array($result)) {
//process one row
}
Using your way, $row is always the same.
And secondly, if i saw right, you dont increase $position variable.