The posts_per_page
refers to how many posts per page, and not what page you are viewing. For that, you want to set the paged
argument. See the Codex on WP_Query
and this article by Scribu.
With the paged
argument set, it’ll return the appropriate posts depending on the page number (the first x posts for page 1, the next x posts for page 2 etc). If not, you are always querying the first x posts- hence the same for each page.
For instance, instead of
query_posts($args, 'posts_per_page=".$paged);
use
$args = array_merge( $args, array( "paged' => $paged ) );
query_posts($args);
and instead of
query_posts('posts_per_page=".$paged);
use
query_posts("paged='.$paged);