Du menar while($j<$i)
där.
Kom ihåg att du ökade $i efter den sista infogningen. Detta betyder att $i kommer att vara högre än maxnyckeln för $dish.
Några tankar:
Varje gång du testar för likhet med null bör du överväga att använda is_null
(eller !är_null). Det är mer exakt.
Detta:
$dish[$i]=$row['dishes'];
$i++;
Skulle vara bättre som:
// obviously instead of $i you would use count($dish) later (or use foreach)
$dish[]=$row['dishes'];
Den sista while-slingan skulle vara bättre som en foreach:
foreach($dish as $val)
{
echo $val;
}