PHP inbox script returns 1 row

as4s1n

New Member
Messages
174
Reaction score
4
Points
0
My PHP script for a PM (private message) inbox only returns one row and I am not sure what is wrong.

PHP:
<a href="index.php?p=createMessageForm">Create Message</a>
<table border="0" cellpadding="2" cellspacing="2" id="inbox">
<tr>
<th width="300">From</th><th width="500">Subject</th><th width="200">Date</th>
</tr>
?>
<?php
if(!isset($_SESSION['loggedin'])) 
    echo "<td colspan=\"3\">You must first <a href=\"index.php?p=signInForm\">log in</a> to view your messages</td>\n";
else {
    $curUser = $_SESSION['loggedin'];
    $query = "SELECT id FROM users WHERE username = '$curUser'";
    $result = mysql_query($query);
    
    if(!$result) 
        writeError(mysql_error());
    else {
        while($row=mysql_fetch_array($result, MYSQL_ASSOC)) {
            $curUserId = $row['id'];
        }
    }
    
    $query = "SELECT * FROM mail WHERE toUser = '$curUserId'";
    $result = mysql_query($query);
            
    if(!$result) 
        writeError(mysql_error());
    else {
        while($row=mysql_fetch_array($result, MYSQL_ASSOC)) {
            $id = $row['id'];
            $from = $row['from'];
            echo "<title>$curUser's Inbox</title>";
            $sbj = substr($row['subject'],0, 100);
            $date = $row['date'];            
    
    $query = "SELECT username FROM users WHERE id = '$from'";
    $result = mysql_query($query);
            
    if(!$result)
        writeError(mysql_error());
    else {
        while($row=mysql_fetch_array($result, MYSQL_ASSOC)) {
            $from = $row['username'];
?>
<tr>
<?php echo "<td><a href=\"index.php?p=viewMessage&&id=$id\">$from</a></td><td><a href=\"index.php?p=viewMessage&&id=$id\">$sbj</a></td><td><a href=\"index.php?p=viewMessage&&id=$id\">$date</a></td>"; ?>
</tr>
<?php
                }
            }
        }
    }
}
?>
</table>

Please help.
 

descalzo

Grim Squeaker
Community Support
Messages
9,373
Reaction score
326
Points
83
Quick answer:

PHP:
<a href="index.php?p=createMessageForm">Create Message</a>
<table border="0" cellpadding="2" cellspacing="2" id="inbox">
<tr>
<th width="300">From</th><th width="500">Subject</th><th width="200">Date</th>
</tr>
?>
<?php
if(!isset($_SESSION['loggedin'])) 
    echo "<td colspan=\"3\">You must first <a href=\"index.php?p=signInForm\">log in</a> to view your messages</td>\n";
else {
    $curUser = $_SESSION['loggedin'];
    $query = "SELECT id FROM users WHERE username = '$curUser'";
    $result = mysql_query($query);
    
    if(!$result) 
        writeError(mysql_error());
    else {
        while($row=mysql_fetch_array($result, MYSQL_ASSOC)) {
            $curUserId = $row['id'];
        }
    }
    
    $query = "SELECT * FROM mail WHERE toUser = '$curUserId'";
$result = mysql_query($query);    ### THIS $result IS THE MESSAGES
            
if(!$result) 
 writeError(mysql_error());
 else {
  while($row=mysql_fetch_array($result, MYSQL_ASSOC)) {
    $id = $row['id'];
    $from = $row['from'];
    echo "<title>$curUser's Inbox</title>";
    $sbj = substr($row['subject'],0, 100);
    $date = $row['date'];            
    
    $query = "SELECT username FROM users WHERE id = '$from'";
    $result = mysql_query($query);  ### HEY, YOU JUST CHANGED 
                                       #### $result TO USERNAME(S)
            
    if(!$result)
      writeError(mysql_error());
    else {
      while($row=mysql_fetch_array($result, MYSQL_ASSOC)) {  ### LOOPED THRU $result,
        $from = $row['username'];    ### SO WHEN YOU GET TO THE OUTER
                              ### LOOP, $result will be finished
?>                                               
<tr>
<?php echo "<td><a href=\"index.php?p=viewMessage&&id=$id\">$from</a></td><td><a href=\"index.php?p=viewMessage&&id=$id\">$sbj</a></td><td><a href=\"index.php?p=viewMessage&&id=$id\">$date</a></td>"; ?>
</tr>
<?php
                }
            }
        }
    }
}
?>
</table>

Moral of the story....reusing variable names can lead to problems.
$result_messages $result_username etc.
 
Last edited:
Top