Well I'd say you are mising the way switch works.
Your code should look like this:
while ($rows = mysql_fetch_array($result))
{
switch($i)
{
case (2):
if ($rows[$i] == "D")
$rows[$i] = "Diesel";
elseif ($rows[$i] != "D")
$rows[$i] = "Petrol";
break;
case (12):
if ($rows[$i] != "a")
$rows[$i] = "Manual";
else
$rows[$i] = "Automatic";
break;
case (5):
if ($rows[$i] == "3")
$rows[$i] = "Hatchback";
elseif ($rows[$i] == "5")
$rows[$i] = "Hatchback";
elseif ($rows[$i] == "4")
$rows[$i] = "Saloon";
elseif ($rows[$i] == "e")
$rows[$i] = "Estate";
elseif ($rows[$i] == "c")
$rows[$i] = "Coupe";
break;
case (6):
if ($rows[$i] == "e")
$rows[$i] = "5";
elseif ($rows[$i] == "c")
$rows[$i] = "3";
break;
case (17):
if ($rows[$i] == ".")
$rows[$i] = "";
break;
}
}
This isn't to say that this will fix your problem, but at least the structure will be correct.
When using a switch statement all of the "cases" should be within one switch. Also the compairson between the variable you are switching and the values in your case statements is implied, you don't have to specify it.