El error te dice que no le estás pasando una matriz a foreach().
Código PHP:
include("conec.php");
conectarse();
$id=$_POST['orden'];
$qry=mysql_query("select * from factura where id='$id'") or die("Error en consulta:" .mysql_error() );
// OJO: tu IF original no sirve para nada debido al punto y
// coma que le pusiste al final.
// Si querés que solamente se inicialize $_SESSION['carro']
// si la consulta es exitosa, borrá el punto y coma del final
// de la línea
// De todas formas, siguiendo la lógica de la aplicación podés
// juntar los 2 if en uno solo.
// Te pongo código equivalente y que funciona :-D
if($query=mysql_fetch_array($qry)) {
$_SESSION["carro"]=unserialize($query['compra']);
// haz var_dump($_SESSION['carro']); en este punto para
// ver qué es lo que realmente contiene
$carro=$_SESSION['carro'];
echo "extraccion oka";
} else {
echo "fallado";
}
Te recomiendo leer el manual y leer bien el código, hacerte un pequeño diagrama de lo que querés hacer explicado con tus propias palabras, y luego empezar a programar. De otra forma, terminás con código como éste muy difícil de leer y con inconsistencias lógicas.
Saludos.