Hey folks,

I have made an image-based shoutbox and now users can view older and newer message on the shoutbox depending on the $_GET - pagination - that works. However, since it's image based and can be linked in forums etc. on the Internet I only want it to save the gif image if $page == 1, so the newest shouts are saved onto the image. Yet the users can still view the other messages on site without it changing the saved gif image.

What I've tried so far is this:

<?php

if (isset($_GET['page']) && is_numeric($_GET['page'])) {

    $page = mysql_real_escape_string(htmlspecialchars($_GET['page']));

} else {
    $page = 1;
}

//other code - not relevant for this purpose

if ($page == 1) {
	imagegif($image); // paint the image in browser
    imagegif($image, "user/" . $user . ".gif"); //export as gif file
} elseif(!isset($filter) && $page == 1) {
	imagegif($image); // paint the image in browser
	imagegif($image, "user/" . $user . ".gif"); //export as gif file
} elseif($page != 1) {
	imagegif($image); // paint the image in browser
} elseif(isset($filter)) {
	imagegif($image); // paint the image in browser
} else {
	
}
?>

Which, to me means that when $page == 1 then it loads the image in the browser and also saves user/helraizer.gif and if $page != 1 then it only loads it to the browser and doesn't save the gif. But even if $page == 3 then it saves that as the image and therefore the image hosted on a forum will keep changing as each user views a different thing.

I know that $page works because it changes the contents of the image, but it doesn't work within the if statement.

Can you see what's/if anything's wrong with the code? Would a switch statement be a better solution?

Thanks,
Sam

Hi there,
the bug is in this if statement. Try using parentheses to make your intentions more clear:

if ( (!isset($filter)) && ($page == 1) )

Frankly I would just write this instead of the whole if/else if bunch:

if ($page == 1)
  imagegif($image, "user/" . $user . ".gif");
imagegif($image);

Also, you could make the initial testing a bit more simple:

$page = max(intval($_GET['page']), 1);

I guess you start paging with 1, which is a bit impractical.
If you start with zero you could do with a plain intval($_GET['page']);

Hey, thanks for the input.

I found a solution a while ago.

if (isset($filter))
{
    
        imagepng($image);
    
}
elseif ($page == 1)
{

        imagepng($image);
        imagepng($image, "./user/".$user.".png");
    



}
else
{
        imagepng($image);
    
}

if ($page == 1)
imagegif($image, "user/" . $user . ".gif");
imagegif($image);

$page is always set, even if filter is on. Since it's for use as a signature, with the code above, if someone uses the filter then it'll change the image in the signature, which isn't good. Therefore if filter is set (regardless of whether page is set) then the image isn't saved; if filter isn't saved but page is, then it is saved and if $page != 1 then it isn't saved either.

This question has already been answered. Start a new discussion instead.