Hola Jam,
Saque el form del bucle como me dijiste pero sigo sin obtener resultados, siempre muestra la ultima referencia de la tabla.Quizas no se pueda hacer con foreach y tenga mas que ver con los arrays bidemencionales (de los que no tengo ni idea). 
lo de las comillas no lo entiendo ¿Que hago mal?  
 Código PHP:
   
<form method="post" action="<?=$_SERVER['PHP_SELF'] ?>"> 
     <?  require ("../php/conexion2.php");
                   $query = "SELECT * FROM referen ORDER BY nombre";
                   $result=mysql_db_query($dbdat,$query,$link);
                     while ($row = mysql_fetch_array($result)){ 
                             print("
                                     <p>
       <input type='text' name='referen' value=\"".$row[codigo]."\" /> 
      <input type='text' name='nombre' value=\"".$row[nombre]."\" /> 
      <input type='text' name='cantidad' value='0' /> 
             </p>
             <br />
            ");
            }
            mysql_close();
            ?> 
      <input type="submit" name="Submit" value="Enviar"> 
    
</form> 
  <br> 
  <?php 
if(isset($_POST['Submit'])) { 
foreach($_POST as $indice => $valor) { 
    if(!empty($valor) && $indice!='Submit') { 
        $campos[]= $indice; 
        $values[]= "'$valor'"; 
    } 
} 
$campos= implode(", ", $campos); 
$values= implode(", ", $values); 
echo "INSERT INTO ($campos) VALUES ($values)"; 
} 
?>