Still not 100% sure on how JOINS work, so it's a lot of guess and check goin on here. A lot of the documentation talks about foreign key relationships, and keys are another thing I'm a little cloudy on.
Looks to me like you are only JOINing the 'uploads' and 'products' tables. There is no JOINing with the 'users' table, so what SQL does is to return the results from JOINing the 'uploads' and the 'products' tables for each row in the 'users' table.
So, to solve your problem, simply add a join between the 'users' table and either the 'uploads' or 'products' table, whichever one has the linking value.
SELECT users.username,products.product_id,uploads.thumb_path
FROM users,uploads,products
WHERE uploads.product_id=products.product_id AND
users.user_id=uploads.user_id
including a guess for the code change (last line) as suggested in previous post.
In general I find it useful to only rename tables within a select when absolutely necessary. Also INNER JOIN is not required as it is defaulted (at least in all the DB's I have experienced).
I also like to have product_id in the product table and upload.product_ref to distinguish between them, although this is only preference I often find it useful for readability.