Muy sencillo. Foreach necesita que el parametro sea un array. Si no es un array da ese error. Eso quiere decir que $vehiculos2 no es un array. ¿Y por que no es un array? Pues porque la consulta no ha devuelto ningun registro. ¿Como se soluciona? Pues yo lo que hago es inicializar siempre las variables. Asi tendrias que hacer:
Código PHP:
<?php
// MUESTRA TODOS LOS COCHES EN UN DETERMINADO APARCAMIENTO
open();
$query = "SELECT coches.matricula FROM coches WHERE (aparcamiento = '$aparcamiento')";
$result = mysql_query($query) or die(mysql_error());
$vehiculos=array(); // INICIALIZAMOS $vehiculos a un array vacio
while($vehiculo = mysql_fetch_array($result))
$vehiculos[]=$vehiculo;
// TODOS LOS COCHES EN UN DETERMINADO APARCAMIENTO Y FECHA
open();
$query = "SELECT reserva.matricula FROM coches INNER JOIN reserva ON
(coches.matricula = reserva.matricula) WHERE (fecha = '$fecha') AND (aparcamiento = '$aparcamiento')";
$result = mysql_query($query) or die(mysql_error());
$vehiculos2=array(); // INICIALIZAMOS $vehiculos2 a un array vacio
while($vehiculo2 = mysql_fetch_array($result))
$vehiculos2[]=$vehiculo2;
// Código de Josemi
$resultado=array();
foreach ($vehiculos as $vehiculo) {
$esta=false;
foreach ($vehiculos2 as $vehiculo2) { //Josemi esta es la línea 38 donde dice que está el error¿?
if ($vehiculo['matricula']==$vehiculo2['matricula']) {
$esta=true;
break;
}
}
if (!$esta) $resultado[]=$vehiculo;
}
?>
Con esas inicializaciones, en caso de no haber registros y no entrar en los while, $vehiculos y $vehiculos2 todavia serian un array (vacio, pero array).
Saludos.