Código PHP:
//Insertas el pedido
$query="INSERT INTO pedidos (usuario,email,fecha,total) VALUES($usuario,$email,$fecha,$total)";
$r_query=mysql_query($query);
// Este es el id que se usa cuando se insertan productos en la factura
$id=mysql_insert_id();
// Despues insertas cada producto con el id del pedido
// Asumo que $productos es una matrix que contiene todos los productos comprados y la cantidad de cada uno
foreach($productos as $producto)
{
// Aca me parece innesarios todos estos campos, seria suficiente con una tabla con el nombre y el precio de cada producto y pondria solo el id y la cantidad.
//El subtotal se saca de lo anterior asi que no es necesario ponerlo en la bdd, pero lo hago como vos lo pusiste.
$query="INSERT INTO factura (id_pedido, producto,precio,cantidad, subtotal) VALUES ($id,$producto['nombre'], $producto['precio'],$producto['cantidad'],$producto['precio']*$producto['cantidad'])";
$r_query=mysql_query($query);
}
Bueno, obviamente no lo probe este codigo pero para que entiendas la idea creo que es suficiente
Saludos