user1509217
user1509217

Reputation: 1

IF and ELSE IF statements within a WHILE loop not working properly

I'm trying to create notification system for my community website, am trying to use a while loop to get data, when ever a condition in the if statement is met within the while loop, it should display/print data to the page. For some reason it's only displaying one result, dunno why.

The structure of my database:

CREATE TABLE IF NOT EXISTS `notifications` (
  `notification_id` int(11) NOT NULL AUTO_INCREMENT,
  `user_id` int(11) NOT NULL,
  `to_id` int(11) NOT NULL,
  `notification_identifier` enum('1','2','3','4','5','6') NOT NULL,
  `notify_id` int(11) NOT NULL,
  `opened` enum('0','1') NOT NULL,
  `timestamp` datetime NOT NULL,
  PRIMARY KEY (`notification_id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=4 ;

The notification_identifier tell me what type of notification it is(e.g. profile comment, status update, likes) and the notify_id tells me id of each specific table i need to check with.

My code:

<?
$DisplayNotification ="";

$unread = "0";

$mynotify = mysql_query("SELECT * FROM notifications WHERE to_id='$logOptions_id' AND opened='$unread'") or die (mysql_error());
$notify_Count = mysql_num_rows($mynotify);

if($notify_Count>0){

        while($row = mysql_fetch_array($mynotify)){
        $notification_id = $row["notification_id"];
        $memb_id = $row["user_id"];
        $identifier = $row["notification_identifier"];
        $notify_id =$row["notify_id"];
        $timestamp = $row["timestamp"];
        $convertedTime = ($myObject -> convert_datetime($timestamp));
        $when_notify = ($myObject -> makeAgo($convertedTime));


        if($identifier == 1){// condition 1

            $DisplayNotification ='user added you as a friend';

        }else if ($identifier == 2) {//condition 2

            $DisplayNotification ='user commented on your post';
        }


        }



 }else{// End of $notify
    $DisplayNotification ='You have no new notifications.';
 }



?>

any help appreciated

Upvotes: 0

Views: 598

Answers (2)

Marco Aur&#233;lio Deleu
Marco Aur&#233;lio Deleu

Reputation: 4367

It looks like you run the while statement fully before actually dumping the variable $DisplayNotification. If that is the case, you're just switching values on the variable during the loop. You either need to store the values to be dumped inside an Array or just dump them inside the loop.

Upvotes: 0

VoteyDisciple
VoteyDisciple

Reputation: 37803

Where is $DisplayNotification actually displayed? It's certainly not within the body of your loop.

Each time through the loop you assign $DisplayNotification a new value, which of course replaces the old value. By the time you get done, no matter what's happened, the most recent change is the only one left.

Most likely I suspect you meant to do something like

$DisplayNotification .= "User added you as a friend\n";

The .= will continue adding new text to the same variable throughout the loop.

Or perhaps you could use an array, in which case you'd do

$DisplayNotifications[] = "User added you as a friend";

Then you could display all the items at the end however you'd like.

Upvotes: 3

Related Questions