Reputation: 411
Trying to retrieve related data from the relationships table, after user clicks on the the bookname on the previous page. Nothing is being printed on the page even though in the database there is data.
The table schema is:
relationshipID,bookone,booktwo,relation,relationlike,relationdislike
<html>
<head>
<title>Retrieve Relationships</title>
</head>
<body>
<dl>
<?php
// Connect to database server
mysql_connect("latcs7.cs.latrobe.edu.au","12ice06","EsnYkuxuwh9RbtQuRcQt") or die (mysql_error ());
// Select database
mysql_select_db("12ice06") or die(mysql_error());
$sTitle=0;
// Get data from the database depending on the value of the id in the URL
$title = (isset($_GET['title']) && is_string($_GET['title'])) ? $_GET['title'] : null;
$sTitle = mysql_real_escape_string($title);
$strSQL = "SELECT R.bookone, B.title, B.author,
R.booktwo, B.title, B.author,
R.relation, R.relationlike, R.relationdislike
FROM relationships R
INNER JOIN books B ON R.bookone = B.bookid";
$rs = mysql_query($strSQL) or die(mysql_error());
// Loop the recordset $rs
while($row = mysql_fetch_array($rs)){
// Write the data of the book
echo "<dt>Book One:</dt><dd>" . $row["bookone"] . "</dd>";
echo "<dt>Title:</dt><dd>" . $row["title"] . "</dd>";
echo "<dt>Author:</dt><dd>" . $row["author"] . "</dd>";
echo "<dt>Book Two:</dt><dd>" . $row["booktwo"] . "</dd>";
echo "<dt>Title:</dt><dd>" . $row["title"] . "</dd>";
echo "<dt>Author:</dt><dd>" . $row["author"] . "</dd>";
echo "<dt>Relationship:</dt><dd>" . $row["relation"] . "</dd>";
echo "<dt>Likes:</dt><dd>" . $row["relationshiplikes"] . "</dd>";
echo "<dt>Dislikes:</dt><dd>" . $row["relationshipdislikes"] . "</dd>";
}
echo $strSQL;
// Close the database connection
mysql_close();
?>
</dl>
<p><a href="search_bookl.php">Return to the list</a></p>
</body>
</html>
Upvotes: 0
Views: 764
Reputation: 16304
My advice:
a) Please reform the variable in your SQL-Statement like this:
$strSQL = "SELECT [...]
WHERE books.bookid=relationships.bookone
AND relationships.bookone='".$sTitle."'";
b) Make sure your variable $sTitle
isn't empty. If it still is an issue, echo the whole SQL-Statement (echo $strSQL;
) for further debugging.
c) While on it, please reform the whole SQL statement. The following statement does the same and is much more readable:
$strSQL = "SELECT R.bookone, R.booktwo,
R.relation,
R.relationlike, R.relationdislike
FROM relationships R
INNER JOIN books B ON R.bookone = B.bookid
WHERE R.bookone='".$sTitle."'";
d) Instead of outputting the data after if($row = mysql_fetch_array($rs)){
, use a while-statement instead, something like
while ($row = mysql_fetch_array($rs)) {
// Write the data of the book
// Insert your echos here
}
e) Question:
Is there a specific reason table books is INNER JOIN
ed, but not used in a condition?
Upvotes: 0
Reputation: 160833
if($row = mysql_fetch_array($rs)){
// Write the data of the book
echo "<dt>Book One:</dt><dd>" . $row["bookone"] . "</dd>";
echo "<dt>Book Two:</dt><dd>" . $row["booktwo"] . "</dd>";
echo "<dt>Relationship:</dt><dd>" . $row["relation"] . "</dd>";
echo "<dt>Likes:</dt><dd>" . $row["relationshiplikes"] . "</dd>";
echo "<dt>Dislikes:</dt><dd>" . $row["relationshipdislikes"] . "</dd>";
}while($row!=0);
Should be
while($row = mysql_fetch_array($rs)){
// Write the data of the book
echo "<dt>Book One:</dt><dd>" . $row["bookone"] . "</dd>";
echo "<dt>Book Two:</dt><dd>" . $row["booktwo"] . "</dd>";
echo "<dt>Relationship:</dt><dd>" . $row["relation"] . "</dd>";
echo "<dt>Likes:</dt><dd>" . $row["relationshiplikes"] . "</dd>";
echo "<dt>Dislikes:</dt><dd>" . $row["relationshipdislikes"] . "</dd>";
}
Upvotes: 2