first of all, you're using mysql_query on a string that was already executed by mysql_query.
$query = mysql_query("UPDATE 'ginfo' SET bday='$bday',
height='$height', weight='$weight', fcolor='$fcolor',
fanimal='$fanimal', ton='$ton', toff='$toff', ame='$ame' WHERE
userid='$id'");
$result = mysql_query($query, $link)
or die('MySQL error: ' . mysql_error() . '<br>Query: ' . $query);
There's your code. I'd fix it so you don't it that way, and also print the query out to see what it looks like. Then you'll know if it's really empty or not. Try this:
$query = "UPDATE ginfo SET bday='$bday',
height='$height', weight='$weight', fcolor='$fcolor',
fanimal='$fanimal', ton='$ton', toff='$toff', ame='$ame' WHERE
userid='$id'";
print "Query: " . $query . "<br>";
$result = mysql_query($query)or die(mysql_error());
I also dropped the single quotes around your table name. Your syntax is correct with using the commas. I don't know if AND will work on an UPDATE (it may, never tried it), but the way you are doing it now will work just fine assuming you don't mysql_query() twice and print out the string to make sure the variables actually have values.
Cgraz