Looking through your code, what stood out was your for loop
<?
for($i=0;$i<3;$i++){
$i = $i + 1
?>
Now you said this only inputs one record, not the other two. Well your for loop, you start out with $i equaling 0. PHP checks to see if $i < 3 is still true, if it is, it runs what is between the brackets.
well you're taking $i, and adding 1 to it. So now, $i equals 1 (you've already skipped 0). Then when the for loop is over, $i increments ($i++), so now $i equals 2. For loop starts over. $i is still less than 3, so the for loop executes what is between brackets. Well in between the brackets, you take $i (which equals 2) and add 1 to it. Now $i equals 3, but you originally specified that $i was less than 3. It was true when the for loop originally checked it, that's why it was executed, but if you're wanting to input when $i=0, $i=1, and $i=2, it's really only inputting when $i=1.
Just change that part of the for loop to
<?
for($i=0; $i<3; $i++){
?>
(no need to add 1 to $i).
And another thing with your insert. is the field id set to auto increment? if so, you don't need to specify that you're inserting into that field, mysql will increment it automatically. Also, watch the double quotes around $newcat. Should be single quotes.
$sql1 = "INSERT INTO $mysql_cat (username, category) VALUES ('$username', '$newcat')";
Cgraz