Insisto en que el problema es la lógica:
Código PHP:
Ver originalif(isset($mi_carrito) && count($mi_carrito) > 0) { // $mi_carrito está definido y tiene productos
// Defines la variable que servirá para saber si hay error en cantidad
$excedido = false;
// Debes recorrer el carrito para revisar producto por producto
foreach($carrito as $producto) {
$consulta = "SELECT * FROM tabla WHERE id = {$producto['id']}";
// Deberías hacer alguna verificación adicional
// pero se supone que siempre existirá el producto
// así que leemos directamente
if($producto['cantidad'] > $fila['stock']) {
$excedido = true;
// Si es necesario, muestras mensaje de error para cada producto
// algo como:
echo "- El producto {$producto['nombre']} tiene mayor cantidad de la disponible<br />";
}
}
// Verificas si hay algún errror
if($excedido) {
// Mensaje de error de que hay uno o más productos con cantidad > stock
} else {
// Aquí muestras el botón para finalizar
}
} else {
// No hay productos en el carrito!
}
Con eso debería funcionar correctamente.